2017-05-30 104 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++; 
} 
相关问题