0

从 3 或 4 个线程调用方法时出现异常。此方法在方法内部获取数据库连接并从 DB 填充一些值,然后连接(连接、结果集和 prepareStatement)仅在方法内部正确关闭。仍然得到异常。

Thread_1 - 调用了 abc() 方法。连接在方法内部打开和关闭。
Thread_2 - 调用了 abc() 方法。连接在方法内部打开和关闭。
Thread_3 - 调用了 abc() 方法。连接在方法内部打开和关闭。

我不清楚为什么即使连接正确打开和关闭也会发生异常。数据库 - Ms sql,Java - 1.6,apache-tomcat 6。

主要是它并不一致,有时会出现异常,有时不会。

1. Exception -
com.inet.tds.am: 
[TDS Driver]java.lang.NullPointerException                                                                                                                                                
        at com.inet.tds.aj.a(Unknown Source)                                                                                                                                                               
        at com.inet.tds.r.g(Unknown Source)                                                                                                                                                                
        at com.inet.tds.r.executeQuery(Unknown Source)                                                                                                                                                     
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)


2. Exception -
java.sql.SQLException: Connection is closed.                                                                                                                                                               
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.checkOpen(PoolingDataSource.java:175)                                                                                  
        at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:301)

请就此提出建议。

4

2 回答 2

2

数据库连接可能不是线程安全的。尽管您的堆栈跟踪显示您正在尝试使用连接池 (dbcp),但您可能没有正确设置它。如果您使用更多配置和进行数据库调用的代码更新问题,也许有人可以发现问题。

于 2012-02-24T08:28:47.310 回答
0

请找到配置/上下文文件 -

 <Resource name="jdbc/mysqlDS" auth="Container" type="javax.sql.DataSource"
            driverClassName="com.inet.tds.TdsDriver"
            url="jdbc:inetdae7://194.0.0.1:1433/july"
            username="team" password="!team!"
            maxActive="50" maxIdle="2" maxWait="10000"
            removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
于 2012-02-24T09:06:52.380 回答