我使用jTDS
是Java (type 4) JDBC 3.0
的开源100%纯Microsoft SQL Server (2012)
驱动程序。
Tomcat 7
- 我在
<?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获取连接。我不知道原因是什么?
java.sql.SQLException:I / O错误:通过peer:socket重置连接 写错误 net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1052)at at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465) 在 net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:777) 在 org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93) at at java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:918) 在java.lang.Thread.run(Thread.java:662)引起: java.net.SocketException:由peer重置连接:套接字写入错误 在java.net.SocketOutputStream.socketWrite0(Native Method)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 在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) 在 net.sourceforge.jtds.jdbc.RequestStream.putPacket(RequestStream.java:560) 在 net.sourceforge.jtds.jdbc.RequestStream.flush(RequestStream.java:508) at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1039) ... 8更多17-Apr-2015 12:00:54 ERROR PatientProcessor:614 - SQLException java.sql.SQLException:已经关闭。在 org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84) 在 org.apache.tomcat.dbcp.dbcp.PoolingDataSource $ PoolGuardConnectionWrapper.close(PoolingDataSource.java:181) at at java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:918) 在java.lang.Thread.run(Thread.java:662
答案 0 :(得分:3)
可能检查以下条件:
答案 1 :(得分:0)
最后,我能找到导致此错误的原因。 这是因为,重新启动数据库服务器后,tomcat服务器未重新启动(因此即使在重新启动数据库时它仍然存在)。因此,池中的连接无效。因此,当网页第一次尝试创建数据库连接时,此错误会提示,并且在下次尝试期间,当应用程序服务器识别其连接无效时,它将从连接池获得有效连接,因此它将获得新连接池。