我有一个在Apache Tomcat 6上运行的Web应用程序,使用ZK,Hibernate和Jaybird JDBC访问Firebird数据库。由于某些未知原因,在执行动态SQL的应用程序中尚未映射的操作之后,它会崩溃并出现以下异常:
错误:org.springframework.transaction.TransactionSystemException:无法回滚JPA事务;嵌套异常是javax.persistence.PersistenceException:回滚时出现意外错误 javax.persistence.PersistenceException:回滚时出现意外错误org.hibernate.TransactionException:JDBC回滚失败[SQL:335544726,HY000] org.firebirdsql.jdbc.FBSQLException:GDS异常。 335544726.从连接读取数据时出错。
原因:从连接读取数据时出错。 ...
然后,用户执行的任何操作都会导致以下错误:
错误:javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法执行查询 org.hibernate.exception.GenericJDBCException:无法执行查询 [SQL:335544721,HY000] org.firebirdsql.jdbc.FBSQLException:GDS异常。 335544721.无法完成托管的网络请求""。 原因:无法完成托管的网络请求""。
系统崩溃了,就像它丢失了与数据库的连接一样。
之前有没有人经历过?
答案 0 :(得分:4)
经过一些研究和测试,我必须了解发生了什么。
当用户使用大小超过目标表字段大小的字符串在应用中执行特定搜索时,问题就出现了。因此,当系统以字符串输入作为参数执行HQL查询时,系统崩溃 - 就像将长度为20的字符串与varchar(18)字段进行比较时一样。
解决方案很简单:在搜索字段中限制输入字符串的大小。
希望这有助于将来的任何人。
答案 1 :(得分:0)
您无法连接到数据库。代码335544721是主动拒绝访问的结果,可能是由各种元素引起的,例如错误登录,防止连接的防火墙规则或防病毒程序阻塞
答案 2 :(得分:0)
我也有类似的问题,在我的情况下,它发生了,因为我使用LIKE条件和两个"%"标志参数的长度超过了字段的长度。
所以,例如,如果我有一张桌子:
create table TEST (name varchar(5) default '' not null);
当我尝试按以下条件搜索并且参数param1 ='%name1%' (如您所见' name1'对varchar(5)字段有效):
select * from TEST where name like :param1;
我在hibernate中有同样的错误,并且在此错误之后我无法执行任何查询,可能是因为hibernate会话被破坏了。
希望它可以帮助某人。
答案 3 :(得分:0)
我通过重新启动服务器上的FirebirdGuardianService解决了这个问题。