如何将ResultSet存储在对象数组中

时间:2017-05-30 05:40:59

标签: java resultset

我无法将ResultSet存储在对象数组中。我想将它存储在一个Object数组中并返回它,我该怎么做?

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无法强制转换为   [Ljava.lang.Object;在   TestSQLwithFunction.returnObjectArray(TestSQLwithFunction.ja VA:13)   在TestSQLwithFunction.main(TestSQLwithFunction.java:24)中的异常   线程“main”java.lang.NullPointerException at   TestSQLwithFunction.main(TestSQLwithFunction.java:25)

4 个答案:

答案 0 :(得分:2)

创建一个表示SQL中的表的java类。每个成员变量应代表SQL表的每一列。然后,当您遍历该行时,创建一个类的对象,将ResultSet中的所有数据传递给构造函数。这样,您将在其中一个对象中存储一行。继续为所有行执行此操作,并将对象存储在某些数据结构中。

答案 1 :(得分:0)

while(rs.next()) {
     ob =  (Object[]) rs.getObject(1);
}

rs.getObject(1)会返回一个Object,但您尝试将其转换为Object[]

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分: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。如果需要,可以使用键值对更灵活。为此,您可以使用HashMapHashTable,也可以创建自己的自定义广告。

如果您想要自定义:

  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循环检索值。