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]);