我正在寻找一种用Java查询SQL数据库并返回Object [] []的方法。这是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;
}
答案 0 :(得分:2)
以下是您启动它的实现:
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的用武之地......但根据你的应用程序,这可能会有点过分。
答案 1 :(得分:1)
在您的功能中,首先使用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
}
最后,您可以使用ArrayList
转换数组中的toArray()
。
答案 2 :(得分:1)
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++;
}