递归中重复使用某个ResultSet对象,如何对其进行关闭

wangyanqiu 2004-08-25 09:44:36

public void MakeTree(int pid) throws SQLException
{

String flage, url, url1, lev;

SQL = "select * From SAFETYSTANDARD where SAF_PID = '" + pid +
"' order by SAFE_ID";
dbs datebase = new dbs();
ResultSet rs1 = datebase.executeQuery(SQL);

while (rs1.next())
{
int Fid = rs1.getInt(2); //父亲id
int id = rs1.getInt(1); //自己id
flage = rs1.getString(3).trim(); //自己的标识
lev = rs1.getString("SAF_LEVEL");
saflev = java.lang.Integer.parseInt(lev);

url = "/safety/StandardAdmin/view.jsp?pId=" + id;
TreeNodes = TreeNodes + "\n" + "A[" + (i + 1) + "] = new TREE('" +
Fid +
"','" + id + "','" + flage + "','','','" + url + "','" + flage +
"','" + flage + "','" + flage + "','');";
i++;

if (!this.CheckLeaf(id))
{ //判断是否是叶子,如果不是叶子,继续递归

MakeTree(id);

//rs1.close();

//datebase.close();

}

}
//rs1.close();
//datebase.close();

}

在什么位置关闭结果集呢。。。急!!
...全文
236 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyanqiu 2004-08-25
  • 打赏
  • 举报
回复


谢谢楼上的!!

帮人家擦屁股呢,改程序

用ArrayList
bradwoo8621 2004-08-25
  • 打赏
  • 举报
回复
在方法最外层套一个finally吧
dbs database = new dbs();
ResultSet rs1 = null;
try {
} finally {
try {
rs1.close();
} catch (Exception e) {}
database.close();
}
非叶子节点在调用MakeTree()方法以后, 只要没有异常, 就会返回出来, 最终还是会执行自己的关闭方法的. 递归明白吗?
还有你这个方法占用JDBC资源实在太大了. 强烈建议先将结果集读取到自定义的对象中, 然后再循环构造树. 至于自定义对象用Vector还是其他什么看需求了. 如果用Vector的话, 建议用ArrayList. Vector现在已经不用了, 只是为了保持向前兼容而留下的, 各种性能都没有ArrayList高.

另外类名第一个字母用大写, 方法名第一个字母用小写. 这是一个默认规范, 不要代码给人看就觉得你是新手.
wangyanqiu 2004-08-25
  • 打赏
  • 举报
回复

循环外肯定要关闭的

但是那些非叶子节点的ResultSet肯定不会关了,因为又开始MakeTree()了


有人说将结果集中的数据存到Vector中,在循环,是这样吧???
xuyang821225 2004-08-25
  • 打赏
  • 举报
回复
循环外关闭啊~
Tasia 2004-08-25
  • 打赏
  • 举报
回复
在while()循环外关闭。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧