0

我正在使用数据源对象从连接池获取 Oracle JDBC 连接。并使用连接将一些日志从java(通过java静态方法)插入数据库。由于每个用户大约有 10 到 20 个插入,我正在做的是,我在过滤器中的请求级别提交连接并在会话级别关闭连接(通过会话侦听器的 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);
}

所以我正在检查上述内容,因此当我尝试执行时无法关闭连接,对吗?但不确定和困惑它为什么会发生。

4

2 回答 2

1

我猜你的 con 对象是空的?

考虑以下块:

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

首先,您询问连接是否已关闭。然后你看看它是否为空。如果 con 真的是 null,你会得到一个 NullpointerException。

切换检查,看看它是否有帮助:-)

if (con == null || con.isClosed()) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}
于 2012-05-15T13:28:13.717 回答
1

改变

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

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

看看有没有区别。

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

于 2012-05-15T13:28:43.967 回答