我有两个班级作为A和B -
A类: - 这个类有getData方法,用于从DB获取数据。
class A {
public synchronized getData() {
// get some data from database, in finally block close connection
}
}
B类: - 其中有递归方法m(),在这个方法中我调用了A类的getData()。
class B {
m() {
//some condition to terminate the recursion
A a = new A();
a.getData();
m();
}
}
我收到错误: -
java.lang.NullPointerException:null 在com.mchange.v2.c3p0.impl.NewProxyConnection.getAutoCommit(NewProxyConnection.java:1226)〜[c3p0-0.9.5.1.jar:0.9.5.1]
对于getData()方法的第一次调用,我能够从DB获取数据,但是在第二次递归后,我将连接关闭。任何帮助都将受到高度赞赏。
更新
我有DB Util方法,每次调用getData()方法时都会打开连接。如果我在没有递归方法的情况下调用它(很多次)它工作正常但是如果我使用递归我会得到错误。我必须处理递归方法的特殊情况吗?
答案 0 :(得分:2)
错误指定连接已关闭。此外,在您的评论// get some data from database, in finally block close connection
中,您已经提到您在使用后已关闭了连接但是,如果您使用getData()
方法打开连接,则没有提及。
我建议遵循:
getData()
方法打开连接。如果没有,则 仅在此方法中打开连接(从其他方法中删除用于打开连接的代码)或在此方法中使用后不要关闭连接根据需要使用不同的方法关闭连接。