我正在寻找一种用Java查询SQL数据库并返回对象的方法。下面是SQL查询:
private static Object result[][] = null;
result = run.query(conn, "select * from TREEDATA", rsh);以下是数据应该镜像的示例:
Object[][] table = {
{1, null, "Root"}, //i=0
{2, 1, "Node2"}, //i=1
{3, 2, "Node3"}, //i=2
{4, 3, "Node4"}, //i=3
{5, 4, "Node5"}, //i=4
{6, 5, "Node6"}, //i=5
{7, 6, "Node7"}, //i=6
{8, 1, "Node8"}, //i=7
{9, 1, "Node9"}, //i=8
{10, 9, "Node10"},}; //i=9下面是结果集处理程序,其中包含我无法理解的代码:
public Object[][] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
System.out.println("result set is null");
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int rows = 0;
while (rs.next()) {
rows++;
}
Object[][] result = new Object[rows];
int i = 0;
while (rs.next()) {
//How do I do what I need to do in order to return result[][]
result[i][] = rs.getObject(3);
System.out.println(result[i][2].toString());
}
return result;
}发布于 2012-04-08 17:22:53
下面是您开始时的实现:
public Object[][] handle(ResultSet rs) throws SQLException {
if (!rs.last()) { //If false, the result set is empty.
System.out.println("result set is null");
return null;
}
int rowCount = rs.getRow(); // You are pointing on the last row, so this will get the row number of the last row.
rs.beforeFirst(); // Reset your cursor.
ResultSetMetaData meta = rs.getMetaData();
int columnCount = meta.getColumnCount();
Object[][] result = new Object[rowCount][columnCount];
int i = 0;
while (rs.next()) {
for (int j = 0; j < columnCount; j++) {
result[i][j] = rs.getObject(j);
}
}
return result;
}但就我个人而言,我更希望该函数返回ArrayList<Object[]>,甚至更好的List<TreeData>,但是您需要手动实现TreeData对象并使用行值填充它。这就是JPA/Hibernate的用武之地。但是,根据您的应用程序的不同,这可能又有点过头了。
发布于 2012-04-08 17:00:46
在您的函数中,首先使用ArrayList,而不是Object[][]。所以你不需要计算行数。
然后对于每一行
while(rs.next()) {
Object[] row = new Object[meta.getColumnCount()];
for (int i = 0 ; i < row.length ; ++i) {
row[i] = rs.getObject(i+1); // remember thet on ResultSet object first column is 1
}
rows.add(row); // add row to the ArrayList
}最后,您可以使用toArray()在数组中转换您的ArrayList。
发布于 2012-04-08 17:01:29
这是你想要的吗?在循环获取数据之前,您需要重置结果集。
Object[][] result = new Object[rows];
rs.first();
int i = 0;
while (rs.next()) {
result[i] = new Object[3];
result[i][0] = rs.getObject(1);
result[i][1] = rs.getObject(2);
result[i][2] = rs.getObject(3);
i++;
}https://stackoverflow.com/questions/10061611
复制相似问题