public class TableChanger {
Connection conn;
Statement stmt;
ArrayList arraylist;
public TableChanger()
{
try{
DataConnection dc = new DataConnection();
this.conn = dc.getConn();
this.stmt = conn.createStatement();
}
catch(Exception ex)
{ex.printStackTrace();}
} public TreeNode ChangerToTreeNode(String parentID) { TreeNode treenode = new TreeNode(); String query = "select * from tbl_tree where parentID = '" + parentID +"'";
try{
ResultSet rs = this.stmt.executeQuery(query);
while(rs.next())
{
TreeNode subnode = new TreeNode(); String name = rs.getString("Name");
subnode.setName(name);
subnode.setCaption(rs.getString("Caption"));
subnode.setValue(rs.getString("value"));
subnode.setTarget(rs.getString("target"));
String sub = "select * from tbl_tree where parentID='"+name+"'";
ResultSet subrs = this.stmt.executeQuery(sub);
if(subrs !=null)
{
subnode.addSubNode(this.ChangerToTreeNode(name));
}
treenode.addSubNode(subnode);
}
}
catch(Exception ex)
{ ex.printStackTrace();} return treenode; }
}
说明一下,tbl_tree表的结构是是
Name Caption value target parentID
A a 0
A1 a1 A
A11 a11 A1
A2 a2 A (parentID代表父节点的Name,通过递归查找就能建立树结构) TreeNode类结构是
public class TreeNode {
String name;
String caption;
String value;
String target;
ArrayList subNodeList; public TreeNode() {
this.subNodeList = new ArrayList();
} public void setName(String name)
{ this.name = name; } .
.
.
public void addSubNode(TreeNode treenode)
{ this.subNodeList.add(treenode); }我写了一个类TableChanger 。
ChangerToTreeNode()方法用递归将数据库中的表tbl_tree转换成树结构的类treenode
但是运行的时候总是报错,说resultset已经被关闭,递归不能进行,java.sql.SQLException: ResultSet is closedat sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(JdbcOdbcResultSet.java:6502)at sun.jdbc.odbc.JdbcOdbcResultSet.next(JdbcOdbcResultSet.java:1233)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:47)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:62)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:62)at com.accp.model.TableTest.<init>(TableTest.java:10)at com.accp.model.TableTest.main(TableTest.java:18)如果我注释掉以下这段代码,只能得到根节点下第一层的节点String sub = "select * from tbl_tree where parentID='"+name+"'";
ResultSet subrs = this.stmt.executeQuery(sub);
while(subrs.next())
{
subnode.addSubNode(this.ChangerToTreeNode(name));
}
问题是不是出在递归的时候又打开一个resultset,前面的就关闭了?怎么解决这个问题?请各位高手指点一下,谢谢
Connection conn;
Statement stmt;
ArrayList arraylist;
public TableChanger()
{
try{
DataConnection dc = new DataConnection();
this.conn = dc.getConn();
this.stmt = conn.createStatement();
}
catch(Exception ex)
{ex.printStackTrace();}
} public TreeNode ChangerToTreeNode(String parentID) { TreeNode treenode = new TreeNode(); String query = "select * from tbl_tree where parentID = '" + parentID +"'";
try{
ResultSet rs = this.stmt.executeQuery(query);
while(rs.next())
{
TreeNode subnode = new TreeNode(); String name = rs.getString("Name");
subnode.setName(name);
subnode.setCaption(rs.getString("Caption"));
subnode.setValue(rs.getString("value"));
subnode.setTarget(rs.getString("target"));
String sub = "select * from tbl_tree where parentID='"+name+"'";
ResultSet subrs = this.stmt.executeQuery(sub);
if(subrs !=null)
{
subnode.addSubNode(this.ChangerToTreeNode(name));
}
treenode.addSubNode(subnode);
}
}
catch(Exception ex)
{ ex.printStackTrace();} return treenode; }
}
说明一下,tbl_tree表的结构是是
Name Caption value target parentID
A a 0
A1 a1 A
A11 a11 A1
A2 a2 A (parentID代表父节点的Name,通过递归查找就能建立树结构) TreeNode类结构是
public class TreeNode {
String name;
String caption;
String value;
String target;
ArrayList subNodeList; public TreeNode() {
this.subNodeList = new ArrayList();
} public void setName(String name)
{ this.name = name; } .
.
.
public void addSubNode(TreeNode treenode)
{ this.subNodeList.add(treenode); }我写了一个类TableChanger 。
ChangerToTreeNode()方法用递归将数据库中的表tbl_tree转换成树结构的类treenode
但是运行的时候总是报错,说resultset已经被关闭,递归不能进行,java.sql.SQLException: ResultSet is closedat sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(JdbcOdbcResultSet.java:6502)at sun.jdbc.odbc.JdbcOdbcResultSet.next(JdbcOdbcResultSet.java:1233)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:47)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:62)at com.accp.model.TableChanger.ChangerToTreeNode(TableChanger.java:62)at com.accp.model.TableTest.<init>(TableTest.java:10)at com.accp.model.TableTest.main(TableTest.java:18)如果我注释掉以下这段代码,只能得到根节点下第一层的节点String sub = "select * from tbl_tree where parentID='"+name+"'";
ResultSet subrs = this.stmt.executeQuery(sub);
while(subrs.next())
{
subnode.addSubNode(this.ChangerToTreeNode(name));
}
问题是不是出在递归的时候又打开一个resultset,前面的就关闭了?怎么解决这个问题?请各位高手指点一下,谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货