and*_*kle 4 java sql recursion resultset
我有一个关于ResultSetJava和递归中的对象的问题.
我正在研究大学的一些代码,每当我找到一个后代时,我都会使用这个新节点,但当我从递归中走出来并尝试rs.next()时,指针已从指向第1行返回到第0行当它到达第0行时,rs.next()失败并返回!我知道那里有一件事还没有读过!是什么导致了这个?
解决这个问题的唯一方法是遍历结果集并获取每个元素并将其添加到数组列表中,然后循环遍历arraylist对数组中的每个元素进行递归!当然这必须是一个更好的解决方法吗?
这是我正在使用的新代码
private Vector<String> getDescendents(String dogname, Vector<String> anc) {
if (anc == null) anc = new Vector<String>();
ArrayList<String> tempList = new ArrayList<String>(2);
try {
System.out.println("Inside ");
childStmt.setString(1,dogname);
childStmt.setString(2,dogname);
ResultSet rs = childStmt.executeQuery();
System.out.println("Before while "+rs.getRow());
while (rs.next()){
String col1 = rs.getString(1);
tempList.add(col1);
anc.add(col1);
}
for (String s:tempList){
getDescendents(s,anc);
}
}
catch(Exception e) {
doError(e, "Failed to execute ancestor query in getBreeding");
}
return anc;
}
Run Code Online (Sandbox Code Playgroud)
但是在此之前,我getDescendents在while循环内部进行了调用,因此没有for循环,也没有arraylist,但是每当它实际递归时,它会在返回到递归时松散跟踪结果集.
进一步的细节:当我使用调试器(几乎说gdb那里lol太多C)时,结果集的ID是相同的但是行指针已经返回0并且rs.next调用失败了!
再次感谢任何解释!
ps它以前看起来像
private Vector<String> getDescendents(String dogname, Vector<String> anc) {
if (anc == null) anc = new Vector<String>();
ArrayList<String> tempList = new ArrayList<String>(2);
try {
System.out.println("Inside ");
childStmt.setString(1,dogname);
childStmt.setString(2,dogname);
ResultSet rs = childStmt.executeQuery();
System.out.println("Before while "+rs.getRow());
while (rs.next()){
String col1 = rs.getString(1);
anc.add(col1);
getDescendendts(col1,anc);
}
}
catch(Exception e) {
doError(e, "Failed to execute ancestor query in getBreeding");
}
return anc;
}
Run Code Online (Sandbox Code Playgroud)
bee*_*jay 12
看起来你正在重复使用childStmt; 不要这样做.来自Statementjavadoc:
默认情况下,每个Statement对象只能同时打开一个ResultSet对象.因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成.如果存在打开的对象,则Statement接口中的所有执行方法都会隐式关闭该语句的当前ResultSet对象.
您必须先保存所有行,然后执行递归查询,或者Statement为ResultSet要获取的每个行创建一个新行.
| 归档时间: |
|
| 查看次数: |
3564 次 |
| 最近记录: |