`
lysming
  • 浏览: 24567 次
  • 来自: ...
社区版块
存档分类
最新评论

Hibernate: could not execute query using sroll问题解析

 
阅读更多
最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
org.hibernate.exception.JDBCConnectionException: could not execute query 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
. 
Caused by: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error: 


** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException 
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException 
MESSAGE: Broken pipe 

STACKTRACE: 

java.net.SocketException: Broken pipe 
at java.net.SocketOutputStream.socketWrite0(Native Method) 
 
** END NESTED EXCEPTION ** 



查看了Mysql的文档,以及Connector/J的文档以及在线说明发现,出现这种异常的原因是:

Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。

解决的方法有3种:

    增加wait_timeout的时间。
    减少Connection pools中connection的lifetime。
    测试Connection pools中connection的有效性。

当然最好的办法是同时综合使用上述3种方法,下面就DBCP和C3P0分别做一说明,假设wait_timeout为默认的8小时

DBCP增加以下配置信息:
//set to 'SELECT 1' 
validationQuery = "SELECT 1" 
//set to 'true' 
testWhileIdle = "true" 
//some positive integer 
timeBetweenEvictionRunsMillis = 3600000 
//set to something smaller than 'wait_timeout' 
minEvictableIdleTimeMillis = 18000000 
//if you don't mind a hit for every getConnection(), set to "true" 
testOnBorrow = "true" 


C3P0增加以下配置信息:
//获取connnection时测试是否有效 
testConnectionOnCheckin = true 
//自动测试的table名称

automaticTestTable=C3P0TestTable

//set to something much less than wait_timeout, prevents connections from going stale 
idleConnectionTestPeriod = 18000 
//set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out 
maxIdleTime = 25000 
//if you can take the performance 'hit', set to "true" 
testConnectionOnCheckout = true 


更多的配置信息参照看C3P0文档,Connector/J文档,以及DBCP的文档。
分享到:
评论

相关推荐

    could not execute

    could not execute:bad executable format(win32 error 193) 下了一个实现MD5的代码,编译时没有错误,但是执行的时候却提示:could not execute:bad executable format(win32 error 193)

    maven出现:Failed to execute goal on project …: Could not resolve dependencies for project …

    在使用Maven构建Java项目时,可能会遇到这样一个错误:“Failed to execute goal on project …: Could not resolve dependencies for project …”。这个错误通常表明Maven在构建过程中遇到了依赖解析问题,无法...

    windump3.9.3+winpcap

    用户可以将Windump捕获的.pcapng或.pcap文件导入Wireshark,以进行更深入的协议解析和数据分析。 总的来说,Windump和WinPcap是网络诊断和分析的强大组合,它们可以帮助IT专业人员深入了解网络流量,发现潜在的问题...

    Hibernate映射导致的几个异常

    SQLGrammerException, Could not execute JDBC batch update 当执行批量更新操作时,如果SQL语法错误或数据库不支持批处理,可能会遇到此异常。检查SQL语句的语法正确性,以及数据库驱动是否支持所需的批处理功能...

    关键字user附近有语法错误解决方案

    警告: SQL Error: 156, ...org.hibernate.exception.SQLGrammarException: could not execute query org.hibernate.util.JDBCExceptionReporter logExceptions 严重: 关键字 'user' 附近有语法错误。 的解决方案。

    SSH整合项目中容易出现的错误

    nested exception is org.hibernate.exception.SQLGrammarException: could not execute query 这个错误是由于SQL语句有错误,导致查询失败。解决方法是检查SQL语句的正确性,确保语句正确无误。 4. 严重: Error ...

    MyEclipse注册机

    Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update 或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: ...

    ssh框架报错分析集合

    nested exception is org.hibernate.exception.SQLGrammarException: could not execute query` 这个异常表明执行SQL查询时出现了语法错误。检查并修正相关的SQL语句,确保其符合SQL语法规范,并且与数据库表结构...

    使用Element的InfiniteScroll 无限滚动组件报错的解决

    TypeError: Failed to execute ‘observe’ on ‘MutationObserver’: parameter 1 is not of type ‘Node’ InfiniteScroll的更多用法element官网 二、解决办法 给需要使用 InfiniteScroll 的元素或者它的父级...

    Hibernate错误及解决办法集合

    **问题描述**:在使用Hibernate执行查询语句时,系统抛出`Nodefaultconstructorforentity`错误。 **可能原因**:该错误通常是由于实体类中缺少无参构造函数导致的。在Java中,如果一个类没有显式地定义任何构造函数...

    Qt5.4下连接Mysql,QSqlDatabase: QMYSQL driver not loaded but available-附件资源

    Qt5.4下连接Mysql,QSqlDatabase: QMYSQL driver not loaded but available-附件资源

    SSH项目原本使用的sqlserver2005数据库现在改用MySql配置问题修改

    在将SSH项目从SQL Server 2005迁移至MySQL时,出现的“org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query”异常通常意味着数据访问层在尝试执行SQL查询时遇到了问题。...

    Hibernate:有了 save,为什么还需要 persist?.docx

    在Java持久化领域,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者将Java对象与数据库中的记录进行映射,简化了数据库操作。`save` 和 `persist` 是Hibernate Session接口中的两个方法,它们都...

    Maven报错: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources

    idea创建Maven项目时,报错显示Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources,并且Maven插件内看不到 mybatis-generator。如下图: 折腾了好久发现配置放错地方了,...

    can't execute 'CKeilC51BINA51.EXE'.txt

    ### 解决Keil C51 编译器执行问题:“can't execute 'CKeilC51BINA51.EXE'.txt” 在使用Keil C51编译器的过程中,可能会遇到一个常见的错误提示:“can't execute 'CKeilC51BINA51.EXE'.txt”。这个问题通常出现在...

    EXECUTE

    在IT行业中,"EXECUTE"通常与编程和脚本执行紧密相关。这可能是指在某个程序、脚本或操作系统命令中触发执行的动作。当我们谈论"EXECUTE"时,我们主要关注的是代码的运行过程,这涉及到计算机语言的理解、编译(如果...

    详谈mysqldump数据导出的问题

    mysqldump: Couldn’t execute ‘SET OPTION SQL_QUOTE_SHOW_CREATE=1’: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use ...

    制作调试过程及数据记录1

    另一个常见的问题是在级联操作时,如级联删除,可能会遇到`Hibernate: Could not execute JDBC batch update`的错误。这通常是由于Hibernate在执行数据库更新操作时出现了问题。为了解决这个问题,我们需要在实体类...

    SAP Execute Query Directly On The Server

    在SAP系统中,"Execute Query Directly On The Server"是一种功能,允许用户直接在数据库服务器上执行查询,以提高数据检索效率并减轻客户端的负担。这种技术通常用于处理大量数据或复杂查询,以避免在客户端进行...

    Linux中运行ifconfig出现错误解决方法-综合文档

    Linux中运行ifconfig出现错误解决方法[摘要]linux中运行ifconfig出现错误:正常情况下,只需要在控制面板上...不能sudoapTInstallnet-tools,出现这种问题时,解决方法是,首先输入:sudoapt-getupdate,然后输入:sud

Global site tag (gtag.js) - Google Analytics