【问题标题】:Return an ms access column into an array将 ms 访问列返回到数组中
【发布时间】:2023-03-20 12:13:01
【问题描述】:

我正在尝试使用 java 从 MS Access 表中返回一列分数。这是桌子

我按照 java 文档中的指南进行操作。这是结果代码

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)

我在网上查看了这个错误,这有点令人困惑,因为解决方案不适用于数据库。如何修复错误并从列中获取我的值?

【问题讨论】:

  • 该列包含一个标量值,而不是一个数组。您无法获取此列的数组。结果集是面向的。

标签: java sql ms-access jdbc ucanaccess


【解决方案1】:

ResultSet#getArray 与支持特殊列的数据库一起使用,我们可以在其中为表中的每一行存储一个值数组。 Access 没有Array 列类型。表中的 CSC103 列包含每一行的单个(“标量”)值,在本例中为整数。

因此,您需要检索每一行的各个值并将它们添加到某种集合中。最直接的方法是

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&lt;Integer&gt; 中的值。如果您真的需要array 类型为Integer(这有点不同),那么您可以将List 转换为array,如下所示:

Integer[] csc103Array = csc103List.toArray(new Integer[0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 2012-05-08
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多