【问题标题】:Getting TDS driver - java.lang.NullPointerException. this exception is not consistent获取 TDS 驱动程序 - java.lang.NullPointerException。此异常不一致
【发布时间】:2012-02-24 17:06:52
【问题描述】:

当从 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)

请就此提出建议。

【问题讨论】:

    标签: java connection nullpointerexception sqlexception executequery


    【解决方案1】:

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

    【讨论】:

    • 我同意这个答案。您的应用程序不是线程安全的,并且您可能在某处存在竞争条件。
    【解决方案2】:

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

     <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"/>
    

    【讨论】:

    • 您应该编辑您的原始问题并在此处添加此信息。这样所有给定的信息都是集中的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2018-01-13
    • 2019-08-06
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多