栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

org.hibernate.exception.GenericJDBCException:无法执行查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

org.hibernate.exception.GenericJDBCException:无法执行查询

听起来好像数据库已关闭连接或某个网络设备已终止套接字。您可以通过多种方法来解决此问题:

  1. 您可以经常在连接上发出某种“保持活动”类型的查询(例如:SELECT 1)以使其保持活动状态。假设它由于空闲而关闭。
  2. 您可以经常重新打开连接。
  3. 如果您收到连接关闭异常,则可以重新打开连接。咄。
  4. 您可以使用一个连接池,它可以为您执行保持活动和重新连接。 Apache的DBCP是许多人的最爱。

我推荐最后一个。您将使用DBCP之类的东西:

BasicDataSource ds = new BasicDataSource();ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");ds.setUsername("scott");ds.setPassword("tiger");ds.setValidationQuery("SELECT 1"); // this is database specificds.setTestWhileIdle(true); // test the connections every so oftends.setUrl(connectURI);...while (!shutdown) {    Connection conn = dataSource.getConnection();    Statement stmt = conn.createStatement();    ...    stmt.close();    // this returns the connection back to the pool instead of really closing    // the connection    conn.close();}

因此,当需要连接以及完成连接时,您可以

Connection
绕过
BasicDataSource
and调用
getConnection()
,而不必绕过a
conn.close()
。池执行所有验证工作,等等。它还将允许多个线程使用数据库。

希望这可以帮助。


编辑:
您也不能长时间保持hibernate会话。为了向您展示会话的寿命,我将引用文档中的内容:

会话的生命周期受逻辑事务的开始和结束的限制。(长事务可能跨越多个数据库事务。)

会话拥有一个数据库连接,因此您永远都不想保持它一段时间。您应该执行几个数据库请求(例如具有查询和更新的单个Web请求),然后关闭会话,以便可以将基础数据库连接返回到池中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号