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

How to store ResultSet in an array of object

我无法将 ResultSet 存储在对象数组中。我想将它存储在对象数组中 return,我该怎么做?

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)

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

rs.getObject(1) returns 一个对象,但您试图将其转换为 Object[]

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

试试这个

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

您可以使用对象数组,但也可以使用集合 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. 为键值对创建一个 class(比如说 class 名称对)。
  2. Pair class 中为键和值添加两个变量。
  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 循环检索值。