2017-05-30 268 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

を試してみてください。

はこれを試してみてください:

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場合:

  1. を(クラス名のペアを言うことができます)キーと値のペアのための1つのクラスを作成します。
  2. Pair class keyとvalueの2つの変数を追加します。
  3. Pair(String key, Object o){//..}は、次いでループ毎に使用して値を取得returnObjectArrayに次いで
  4. ArrayList<Pair> data = new ArrayList();
  5. を初期data.add(new Pair("column name", rs.getObject(1)))
  6. ように値を追加:
  7. コンストラクタを実装します。
0
while(rs.next()) { 
    ob = (Object[]) rs.getObject(1); 
} 

rs.getObject(1)は、オブジェクトを返しますが、あなたがテーブルを表すJavaクラスを作成Object[]

+0

に動作します彼のメソッドを使用し、「メイン」でjava.lang.Error:未解決のコンパイルの問題: \t型の不一致:TestSQLwithFunction.main(TestSQLwithFunction.java:24)で \tをTestSQLwithFunction.returnObjectArray(TestSQLwithFunction.java:13) \tに変換できません。 – faisal

2

にキャストしようとしていますSQLの中にあります。各メンバー変数は、SQLテーブルの各列を表す必要があります。次に、行をトラバースするときに、すべてのデータをResultSetからコンストラクタに渡すクラスのオブジェクトを作成します。この方法で、オブジェクトの1つに1つの行を格納します。すべての行に対してこれを行い、オブジェクトをいくつかのデータ構造体に格納します。

0

は、あなたがオブジェクト配列を使用することができますが、あなたはまた、コレクションAPIを使用することができ、この

int i=0; 
while(rs.next()){ 
    ob[i]=rs.getObject(i+1); 
    i++; 
} 
関連する問題