首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.sql.SQLException: I/O错误:由对等方重置连接:套接字写入错误

java.sql.SQLException: I/O错误:由对等方重置连接:套接字写入错误
EN

Stack Overflow用户
提问于 2015-05-13 05:39:53
回答 2查看 31.7K关注 0票数 1

我使用的是jTDS,它是一个100%纯Java (type 4) JDBC 3.0驱动程序,用于Microsoft SQL Server (2012)

Tomcat 7 -我有下面的连接池配置

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/webapp">
    <Resource name="jdbc/dbname" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000" removeAbandoned="true" removeAbandonedTimeout="60"
               username="abc" password="abc" driverClassName="net.sourceforge.jtds.jdbc.Driver"
               url="jdbc:jtds:sqlserver://localhost;databaseName=dbname;SelectMethod=Cursor"/>
</Context>

有时,我会得到以下异常--无法从sql server获得连接。我不知道为什么?

I/O错误:点对点重新设置连接:套接字写入错误在net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1052) at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465) at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:777) at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93) at at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662),由: java.net.SocketException:对等方重置连接: java.net.SocketOutputStream.socketWrite0(Native方法的套接字写入错误引起)在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.DataOutputStream.write(DataOutputStream.java:90) at net.sourceforge.jtds.jdbc.SharedSocket.sendNetPacket(SharedSocket.java:671) at net.sourceforge.jtds.jdbc.RequestStream.putPacket(RequestStream.java:560) at net.sourceforge.jtds.jdbc.RequestStream.flush(RequestStream.java:508) at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1039) .8多8点-2015年4月12:00:54错误处理程序:614- SQLException java.sql.SQLException:已经关闭。在org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84) at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181) at at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662 )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-13 07:17:59

可能检查以下条件:

  1. 在执行SQL语句之前检查套接字或资源池端口是否关闭。
  2. 检查连接是否被任何其他进程重置。
  3. 检查端口是否未被其他进程或其他执行程序使用或锁定。
  4. 检查连接池中是否有可用端口。
票数 3
EN

Stack Overflow用户

发布于 2015-05-20 04:21:51

最后,我能够找到这个错误的原因。这是因为,在重新启动数据库服务器之后,tomcat服务器没有重新启动(因此,即使在重新启动数据库时,它仍然处于活动状态)。因此,池中的连接变得无效。因此,当网页第一次尝试创建数据库连接时,此错误提示,在下一次尝试中,当应用服务器标识其连接无效时,它将从连接池获得有效连接,因此它将获得一个新连接池。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30206517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档