休眠 SQL 错误:17002,SQLState:空 Io 异常:连接重置
Posted
技术标签:
【中文标题】休眠 SQL 错误:17002,SQLState:空 Io 异常:连接重置【英文标题】:Hibernate SQL Error: 17002, SQLState: null Io exception: Connection reset 【发布时间】:2015-02-11 08:58:12 【问题描述】:我们使用的是休眠 3 和 c3p0-0.9.1。我们有一个基于 Hibernate 条件的查询来检查数据库表以及其他查询中键入的用户名和密码。在执行第一个查询(即登录页面)期间,我们面临 SQLState 为空的连接重置问题。如果在页面中再次提供详细信息,一段时间内一切正常。如果我们在一段时间后尝试,第一次再次出现同样的问题,当重新输入用户名和密码时,它可以正常工作一段时间。请查找以下错误消息以供参考。
00:12:42 WARN [org.hibernate.util.JDBCExceptionReporter:77 logExceptions] - SQL 错误:17002,SQLState:null 00:12:42 错误 [org.hibernate.util.JDBCExceptionReporter:78 logExceptions] - Io 异常:连接重置
这里是示例代码...
public UserSample fetchUserDetails(final String loginId) throws DataAccessException
return (UserSample) getHibernateTemplate().execute(new HibernateCallback()
public Object doInHibernate(Session session)
throws HibernateException, SQLException
Criteria criteria = getSession().createCriteria(UserSample.class)
.createAlias("rolesample", "rolesample")
.createAlias("accountsample", "accountsample");
try
if(loginId!= null)
criteria.add(Restrictions.eq("loginName",loginId));
criteria.setProjection(Projections.projectionList()
.add(Projections.property("loginName").as("loginName2"))
.add(Projections.property("password").as("password"))
.add(Projections.property("name").as("name"))
.add(Projections.property("roleId").as("roleId")) );
criteria.addOrder(Order.desc("loginName"));
criteria.setFetchSize(1);
criteria.setMaxResults(1);
criteria.setResultTransformer(Transformers.aliasToBean(UserSample.class));
ArrayList list = (ArrayList)criteria.list();
if(list != null && list.size() > 0)
return (User)criteria.list().get(0);
else
return new User();
catch (Exception e)
LogUtil.info(e.getMessage());
return null;
);
applicationContext.xml中的连接池如下:
<bean id="sampleSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="sampleDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</prop>
<prop key="hibernate.connection.pool_size">50</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<!-- C3P0 Properties -->
<prop key="hibernate.c3p0.min_size">3</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.max_statements">100</prop>
<prop key="hibernate.c3p0.idle_test_period">600</prop>
<prop key="hibernate.c3p0.acquire_increment">1</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT 1 FROM DUAL</prop>
</props>
</property>
当我在 SQL 开发者等 oracle 客户端执行生成的查询时,能够得到结果。但是,在运行应用程序时,随机面临这个问题。你能帮忙吗?谢谢。
最好的问候, 幸运
【问题讨论】:
【参考方案1】:您必须提供更多详细信息才能解决此问题。
-
您要连接到什么数据库?
粘贴休眠查询执行代码。
By definition连接重置错误是由于
当远程连接意外并且 由于应用程序崩溃等各种原因被强制关闭, 系统重启,远程主机硬关闭。来自远程的内核 系统向本地系统发送一个带有 RST 位的数据包。本地的 执行任何 SEND 时的套接字(可能是 Keep-alive 数据包)或 RECEIVE 操作随后因此错误而失败。肯定 延迟设置的组合也可能导致具有 RST 的数据包 位设置。
为了帮助调试,您可以使用Wireshark 等工具查看实际的网络数据包。
【讨论】:
以上是关于休眠 SQL 错误:17002,SQLState:空 Io 异常:连接重置的主要内容,如果未能解决你的问题,请参考以下文章
休眠,PostgreSQL:无法提取结果集,SQLState 25P02
连接失败:SQLState:'01000' SQL Server 错误:53