在连接池中获取SQLException错误

时间:2012-05-15 12:39:37

标签: java oracle jdbc

我使用数据源对象从连接池获取Oracle JDBC连接。 并使用连接将一些日志从java插入DB(通过java静态方法)。 由于每个用户将有大约10到20个插入,我正在做的是,我在Filter中请求级别提交连接并在会话级别关闭连接(通过Session Listener的sessionDestroyed()方法) 我没有在测试中得到任何错误,但在生产环境中,我得到的错误如下,

java.sql.SQLException: execute, Exception = null (one scenario)
java.sql.SQLException: close, Exception = null (for another scenario)

如何避免这些错误?我可以改为在java静态方法中提交和关闭连接,而不是在请求级别提交并在会话级别关闭吗?

但令我感到有趣的是,尽管我的java静态方法中存在以下逻辑,但这些错误仍在发生,

if (con.isClosed() || con == null) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}

所以我正在检查上面的内容,所以在我尝试执行时无法关闭连接,我是对的吗? 但不确定和混淆为什么会发生它。

2 个答案:

答案 0 :(得分:1)

我猜你的con对象是null?

考虑以下块:

if (con.isClosed() || con == null) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}

首先询问连接是否已关闭。然后你看它是否为null。如果con确实为null,则会出现NullpointerException。

切换支票,看看它是否有帮助: - )

if (con == null || con.isClosed()) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}

答案 1 :(得分:1)

更改

if (con.isClosed() || con == null) {  

if ( con == null || con.isClosed() ) {  

看看是否存在差异。

您是如何检查con=connHelper.getConnection("ds");成功的? 在执行con之前,我担心nullcon.setAutoCommit(false); 如果是这种情况,则需要检查生产数据库的连接字符串是否正确。