2017-05-30 41 views
0

我無法將ResultSet存儲在對象數組中。我想將它存儲在Object數組中並返回它,我該怎麼做?如何將ResultSet存儲在對象數組中

import java.sql.*; 

public class TestSQLwithFunction { 
    private static Object[] returnObjectArray() { 
     String connnectionURL = "jdbc:sqlserver://localhost\\FAISAL- 
     FAS:1433;username=sa;password=password"; 
     Object ob[] = null; 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection conn = DriverManager.getConnection(connnectionURL); 
      ResultSet rs = conn.getMetaData().getSchemas(); 
      while(rs.next()) { 
       ob = (Object[]) rs.getObject(1); 
      } 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return ob; 
    } 


    public static void main (String[] args) { 
     Object[] checkrs = returnObjectArray(); 
     for(int i = 0; i <= checkrs.length; i++){ 
      System.out.println(checkrs); 
     } 
    } 
} 

我得到這個異常:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; at TestSQLwithFunction.returnObjectArray(TestSQLwithFunction.ja‌​va:13) at TestSQLwithFunction.main(TestSQLwithFunction.java:24) Exception in thread "main" java.lang.NullPointerException at TestSQLwithFunction.main(TestSQLwithFunction.java:25)

+0

@Ezio是正確的......用他的方法......它會工作 –

回答

0

您可以使用對象數組,但你可以使用收集API也。

試試這個:

private static ArrayList returnObjectArray()throws Exception { 
    String connnectionURL = "jdbc:sqlserver://localhost\\FAISAL-FAS:1433;username=sa;password=password"; 

     ArrayList<Object> data = new ArrayList(); 

    try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     Connection conn = DriverManager.getConnection(connnectionURL); 
     ResultSet rs = conn.getMetaData().getSchemas(); 

     while(rs.next()) { 
      data.add(rs.getObject(1)); 
     } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return data; 
} 


public static void main (String[] args) { 
    for(Object checkers: returnObjectArray()){ 
     System.out.println(checkers); 
    } 
} 

我以前ArrayList。如果你願意,你可以使這個更靈活,使用鍵值對。要做到這一點,你可以使用HashMap,HashTable或者你可以創建自己的自定義的。

如果你想定製一個:

  1. 創建鍵值對一個類(可以說類名稱對)。
  2. Pair類中爲鍵和值添加兩個變量。
  3. 實現構造函數:Pair(String key, Object o){//..}
  4. 然後在returnObjectArray初始化ArrayList<Pair> data = new ArrayList();
  5. 然後添加值data.add(new Pair("column name", rs.getObject(1)))
  6. 然後使用for-each循環檢索值。
0
while(rs.next()) { 
    ob = (Object[]) rs.getObject(1); 
} 

rs.getObject(1)返回一個對象,但你試圖把它轉換爲Object[]

+0

沒有這個它給在此線程編譯錯誤異常「主要」 java.lang.Error的:未解決的問題,編譯: \t類型不匹配:無法從Object轉換爲Object [] \t at TestSQLwithFunction.returnObjectArray(TestSQLwithFunction.java:13) \t at TestSQLwithFunction.main(TestSQLwithFunction.java:24) – faisal

2

創建一個Java類代表表格,你在SQL中有。每個成員變量應該代表你的SQL表的每一列。然後,在遍歷行時,創建一個類的對象,將所有數據從ResultSet傳遞給構造函數。這樣你就可以在一個對象中存儲一行。繼續爲所有行執行此操作,並將對象存儲在某個數據結構中。

0

試試這個

int i=0; 
while(rs.next()){ 
    ob[i]=rs.getObject(i+1); 
    i++; 
} 
相關問題