2012-04-08 3 views
1

Ich suche nach einer Möglichkeit, eine SQL-Datenbank mit Java abzufragen und ein Objekt [] [] zurückzugeben. Hier ist die SQL-Abfrage:Wie verwandle ich eine Java SQL-Abfrage in ein Java-Objekt [] []?

private static Object result[][] = null; 
result = run.query(conn, "select * from TREEDATA", rsh); 

Hier wird die Probe von dem, was die Daten spiegeln sollte:

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 

Hier wird das Ergebnis Set-Handler mit dem Code, den ich nicht herausfinden können:

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

Antwort

2

ist die Umsetzung wie Sie es begann:

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

Aber persönlich würde ich eher die Funktion Rückkehr ArrayList<Object[]> oder noch besser List<TreeData> aber dann müssen Sie das TreeData Objekt mit der Zeile implementieren und füllen Werte manuell. Wo kommt JPA/Hibernate ins Spiel? Aber das könnte je nach Anwendung wieder zu viel werden.

1

In Ihrer Funktion starten Sie mit einer ArrayList und nicht eine Object[][]. Sie müssen also keine Zeilen zählen.

Dann für jede Zeile

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 
} 

Am Ende können Sie Ihre ArrayList in Array mit toArray() konvertieren.

1

Wollen Sie das? Sie müssen die Ergebnismenge zurücksetzen, bevor Sie durchgehen, um die Daten zu erhalten.

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

Seine Abfrage verwenden 'Select *', so dass Sie nicht sicher sein können, dass die Spalten immer 3 sind. – dash1e

+1

vereinbart, eine for-Schleife ist eine robustere Lösung dafür. – Richante

Verwandte Themen