从递归方法调用另一个类的方法:Java
我有两个班,A班和B班- 类A:-此类具有getData方法,用于从数据库获取数据从递归方法调用另一个类的方法:Java,java,recursion,race-condition,Java,Recursion,Race Condition,我有两个班,A班和B班- 类A:-此类具有getData方法,用于从数据库获取数据 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
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()方法时打开连接。如果我在没有递归方法的情况下调用它(很多次),它可以正常工作,但是如果我使用递归,我会出错。递归方法是否需要处理特殊情况?错误指定连接已关闭。另外,在您的注释//从数据库获取一些数据中,在finally block close connection
中,您提到了在使用后关闭了连接,但没有提到是否在getData()
方法中打开连接
我建议如下:
getData()
方法中打开连接。如果没有,则或者仅使用此方法打开连接(从其他方法中删除打开连接的代码)或者在使用此方法后不要关闭连接,而是根据需要使用其他方法关闭连接getData()
方法使用连接并关闭它,因此该连接不可用于进一步调用getData()
方法。如果不使用递归调用getData()
方法,则不会出现这种情况。按照建议尝试一次,然后请评论您的观察结果。查看代码后,我注意到我的DBUtil类提供了现有连接(已关闭)。我来自Angular2的背景,需要学习更多关于Java的知识:)。谢谢