2012-04-08 6 views
1

Javaを使用してSQLデータベースを照会し、Object [] []を返す方法を探しています。ここではSQLクエリは次のとおりです。ここでJava SQLクエリをJava Object [] []に変換するにはどうすればよいですか?

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; 
} 

答えて

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

関数では、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を変換することができます。

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++; 
} 
+0

彼のクエリでは 'select *'を使うので、列が常に3になることは確かではありません。 – dash1e

+1

が合意していれば、forループはより強固な解決策です。 – Richante

関連する問題