Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取连接池中的SQLException错误_Java_Oracle_Jdbc - Fatal编程技术网

Java 获取连接池中的SQLException错误

Java 获取连接池中的SQLException错误,java,oracle,jdbc,Java,Oracle,Jdbc,我正在使用数据源对象从连接池获取Oracle JDBC连接。 并使用该连接从java(通过java静态方法)将一些日志插入数据库。 因为每个用户大约有10到20个插入,所以我要做的是,在筛选器的请求级别提交连接,并在会话级别关闭连接(通过会话侦听器的sessionDestroyed()方法) 我在测试中没有得到任何错误,但在生产环境中,我得到的错误很少,如下所示: java.sql.SQLException: execute, Exception = null (one scenario) ja

我正在使用数据源对象从连接池获取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);
}
所以我正在检查上面的内容,所以当我尝试执行时,连接无法关闭,对吗?
但我不确定,也不明白它为什么会发生。

我猜你的con对象是空的

考虑以下块:

if (con.isClosed() || con == null) {
 DBConnectionHelper connHelper = DBConnectionHelper.createInstance();
    con=connHelper.getConnection("ds");
    con.setAutoCommit(false);
}
首先,您询问连接是否已关闭。然后你看它是否为空。如果con真的为null,您将得到一个NullpointerException

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

改变

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

看看有没有区别

您如何检查
con=connheloper.getConnection(“ds”)成功吗?
我担心
con
在执行
con.setAutoCommit(false)之前是
null


如果是这种情况,您需要检查生产数据库的连接字符串是否正确。

为什么要关闭连接池中的连接?另外,在if中,我会在con.isClosed()之前先检查con是否为null。@Mike:一些连接池拦截
close()
调用,而将连接返回到池中。@skaffman-嗯,在第一次连接之前,
con
指向什么?@Mike如果使用连接池,然后,您确实需要关闭连接:这是连接池可供重用的信号。您(通常)不会得到实际的连接,而是一个由连接池管理的代理(正如skaffman所说:拦截关闭)。好吧,让我更改一下,然后看看。我应该在静态java方法中手动关闭连接池对象吗?还是最后关闭一次(就像我在会话侦听器中的sessionDestroyed()方法中所做的那样)?好的,让我更改一下,然后看看。我应该在静态java方法中手动关闭连接池对象,还是最后关闭一次(就像我在会话侦听器的sessionDestroyed()方法中所做的那样)?
if (con.isClosed() || con == null) {  
if ( con == null || con.isClosed() ) {