2012-05-23 51 views
0

我有一種方法應該填充從我的數據庫收集的數據的JComboBox,但我已經看到能夠從數據庫中獲取信息的唯一方法是在陣列。我需要將數組轉換爲對象[],然後才能完全編譯我的程序。有什麼辦法可以做到這一點?或者這將是一個漫長的過程?我的代碼如下。使用Object []方法返回數組

public Object[] getId() { 
    Connection con; 
    Statement stmt; 
    ResultSet rs; 

    //Object[] returnId; 
    Array returnId; 
    try { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con = DriverManager.getConnection("jdbc:odbc:collegesys","root","0blivi0n"); 

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    rs = stmt.executeQuery("SELECT `id` FROM main"); 

    while(rs.next()) { 
     returnId = rs.getArray("id"); 
    } 

    con.close(); 
    } catch(Exception e) { 
    e.printStackTrace(); 
    } 
    return returnId.toObject(); 
} 

回答

1

試試這個:

return (Object[]) returnId.getArray(); 

據我瞭解,你要收集的"id"列從表main的所有行的價值。你的代碼不會這樣做,因爲它的組織。試試這個:

public Object[] getId() { 
    Connection con; 
    Statement stmt; 
    ResultSet rs; 

    //Object[] returnId; 
    ArrayList<Object> returnId = new ArrayList<Object>(); 
    try { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    con = DriverManager.getConnection("jdbc:odbc:collegesys","root","0blivi0n"); 

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
    rs = stmt.executeQuery("SELECT `id` FROM main"); 

    while(rs.next()) { 
     returnId.add(rs.getObject("id")); 
    } 

    con.close(); 
    } catch(Exception e) { 
    e.printStackTrace(); 
    } 
    return returnId.toArray(new Object[returnId.size()]); 
} 

當然,如果你擁有的數據類型的一個更好的想法id列,您可以具體談談返回類型,以及如何獲得值(例如,String[]rs.getString("id")Integer[]rs.getInt("id"))。

+0

好的,我已經完成了。但現在我從我的數組中獲取初始化錯誤。我該如何初始化? –

+1

@Nathan - 問題在於,在你的代碼中,可能到達'return'語句而沒有任何東西被分配給'returnId'。你需要看看你的邏輯和重組事情。我更新了我的答案以顯示一種方法。 –