Return 一个 ms 访问列到一个数组
Return an ms access column into an array
我正在尝试使用 java 从 MS Access table 中 return 一列分数。这是table
我按照 java 的指南进行操作 documentation.This 是结果代码
public class DatabaseConnector {
public static void main(String[] args){
Connection connection=null;
Statement statement =null;
ResultSet resultSet = null;
//Loads JDBC DRIVER
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
}catch (ClassNotFoundException cnfex){
System.out.println("There was a problem loading MS Access Driver");
cnfex.printStackTrace();
}
//Loads Database
try{
String scoredb="C:/Users/User/"+"/Documents/Database2.accdb";
String mydburl ="jdbc:ucanaccess://"+scoredb;
connection = DriverManager.getConnection(mydburl);
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT CSC103, CSC103 FROM Scores");
while(resultSet.next()) {
Array z = resultSet.getArray("CSC103");
int[] CSC103 = (int[])z.getArray();
for (int i=0;i<CSC103.length;i++){
System.out.println(i);
}
}
} catch (SQLException sqlex){
sqlex.printStackTrace();
}
finally {
try{
if (null != connection) {
resultSet.close();
statement.close();
connection.close();
}
}catch (SQLException sqlex){
sqlex.printStackTrace();
}
}
我最终得到了错误-
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to [Ljava.lang.Object;
at org.hsqldb.jdbc.JDBCResultSet.getArray(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.getArray(Unknown Source)
at net.ucanaccess.jdbc.UcanaccessResultSet.getArray(UcanaccessResultSet.java:184)
at DatabaseConnector.main(DatabaseConnector.java:28)
我已经在线查看了这个错误,它有点令人困惑,因为解决方案不适用于数据库。如何修复错误并从列中获取我的值?
ResultSet#getArray
与支持特殊列的数据库一起使用,我们可以在其中为 table 中的每一行 存储值数组 。 Access 没有 Array
列类型。 table 中的 CSC103
列每行包含一个 ("scalar") 值,在本例中是一个整数。
因此您需要检索每一行的各个值并将它们添加到某种集合中。最直接的方法是
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT CSC103 FROM Scores");
java.util.List<Integer> csc103List = new java.util.ArrayList<>();
while (rs.next()) {
csc103List.add(rs.getInt("CSC103"));
}
之后您将获得 ArrayList<Integer>
中的值。如果你真的需要一个Integer
类型的array
(这是一个稍微不同的东西)那么你可以将List
转换成array
像这样:
Integer[] csc103Array = csc103List.toArray(new Integer[0]);
我正在尝试使用 java 从 MS Access table 中 return 一列分数。这是table
我按照 java 的指南进行操作 documentation.This 是结果代码
public class DatabaseConnector {
public static void main(String[] args){
Connection connection=null;
Statement statement =null;
ResultSet resultSet = null;
//Loads JDBC DRIVER
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
}catch (ClassNotFoundException cnfex){
System.out.println("There was a problem loading MS Access Driver");
cnfex.printStackTrace();
}
//Loads Database
try{
String scoredb="C:/Users/User/"+"/Documents/Database2.accdb";
String mydburl ="jdbc:ucanaccess://"+scoredb;
connection = DriverManager.getConnection(mydburl);
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT CSC103, CSC103 FROM Scores");
while(resultSet.next()) {
Array z = resultSet.getArray("CSC103");
int[] CSC103 = (int[])z.getArray();
for (int i=0;i<CSC103.length;i++){
System.out.println(i);
}
}
} catch (SQLException sqlex){
sqlex.printStackTrace();
}
finally {
try{
if (null != connection) {
resultSet.close();
statement.close();
connection.close();
}
}catch (SQLException sqlex){
sqlex.printStackTrace();
}
}
我最终得到了错误-
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to [Ljava.lang.Object;
at org.hsqldb.jdbc.JDBCResultSet.getArray(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.getArray(Unknown Source)
at net.ucanaccess.jdbc.UcanaccessResultSet.getArray(UcanaccessResultSet.java:184)
at DatabaseConnector.main(DatabaseConnector.java:28)
我已经在线查看了这个错误,它有点令人困惑,因为解决方案不适用于数据库。如何修复错误并从列中获取我的值?
ResultSet#getArray
与支持特殊列的数据库一起使用,我们可以在其中为 table 中的每一行 存储值数组 。 Access 没有 Array
列类型。 table 中的 CSC103
列每行包含一个 ("scalar") 值,在本例中是一个整数。
因此您需要检索每一行的各个值并将它们添加到某种集合中。最直接的方法是
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT CSC103 FROM Scores");
java.util.List<Integer> csc103List = new java.util.ArrayList<>();
while (rs.next()) {
csc103List.add(rs.getInt("CSC103"));
}
之后您将获得 ArrayList<Integer>
中的值。如果你真的需要一个Integer
类型的array
(这是一个稍微不同的东西)那么你可以将List
转换成array
像这样:
Integer[] csc103Array = csc103List.toArray(new Integer[0]);