【问题标题】:How to store ResultSet in an array of object如何将 ResultSet 存储在对象数组中
【发布时间】:2017-05-30 05:40:58
【问题描述】:

我无法将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) 中的异常 线程“主”java.lang.NullPointerException 在 TestSQLwithFunction.main(TestSQLwithFunction.java:25)

【问题讨论】:

  • @Ezio 是对的……用他的方法……会奏效的

标签: java resultset


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用对象数组,但也可以使用集合 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. 为键值对创建一个类(比如说类名 Pair)。
    2. Pair 类中为键和值添加两个变量。
    3. 实现构造函数:Pair(String key, Object o){//..}
    4. 然后在returnObjectArray初始化ArrayList&lt;Pair&gt; data = new ArrayList();
    5. 然后将值添加为data.add(new Pair("column name", rs.getObject(1)))
    6. 然后使用 for-each 循环检索值。

    【讨论】:

      【解决方案3】:
      while(rs.next()) {
           ob =  (Object[]) rs.getObject(1);
      }
      

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

      【讨论】:

      • 没有这个它会给出这个编译错误线程“main”java.lang.Error中的异常:未解决的编译问题:类型不匹配:无法在TestSQLwithFunction.returnObjectArray(TestSQLwithFunction. java:13) 在 TestSQLwithFunction.main(TestSQLwithFunction.java:24)
      【解决方案4】:

      试试这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-15
        • 2011-11-11
        • 2021-08-27
        • 2021-04-11
        • 2016-03-26
        • 1970-01-01
        • 2021-12-23
        相关资源
        最近更新 更多