如何将 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.java: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
。如果需要,您可以使用键值对使它更灵活。为此,您可以使用 HashMap
、HashTable
,也可以创建您自己的自定义。
如果你想要定制一个:
- 为键值对创建一个 class(比如说 class 名称对)。
- 在
Pair
class 中为键和值添加两个变量。
- 实现构造函数:
Pair(String key, Object o){//..}
- 然后在
returnObjectArray
初始化ArrayList<Pair> data = new ArrayList();
- 然后将值添加为
data.add(new Pair("column name", rs.getObject(1)))
- 然后使用 for-each 循环检索值。
我无法将 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.java: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
。如果需要,您可以使用键值对使它更灵活。为此,您可以使用 HashMap
、HashTable
,也可以创建您自己的自定义。
如果你想要定制一个:
- 为键值对创建一个 class(比如说 class 名称对)。
- 在
Pair
class 中为键和值添加两个变量。 - 实现构造函数:
Pair(String key, Object o){//..}
- 然后在
returnObjectArray
初始化ArrayList<Pair> data = new ArrayList();
- 然后将值添加为
data.add(new Pair("column name", rs.getObject(1)))
- 然后使用 for-each 循环检索值。