java - 分配结果集时未发现数据异常

标签 java jdbc jdbc-odbc

我正在编写一个代码来获取列中值的计数,并使用这个结果我需要在我的 swing 中创建一个 jtable。现在,当我直接使用 sysout 打印结果时没有问题,数据直接打印。但是当我开始分配变量时,会抛出异常。下面是我的代码。

//to run a query and build user
public List<User> searchUser(String USERNAME, String action) throws Exception {
        List<User> list = new ArrayList<>();

        PreparedStatement pst = null;
        ResultSet rs = null;

        try {

                USERNAME = "%" + USERNAME + "%";
                String query = "select count(*) as cnt, USERNAME from [Sheet1$] GROUP BY USERNAME";
                pst = myConn.prepareStatement(query);
                // pst.setString(1, USERNAME);
                rs = pst.executeQuery();
                String sum = null;
                while (rs.next()) {
                    User tempUser = convertRowToUser(rs);
                    list.add(tempUser);
                }
                System.out.println(sum);

            return list;
        } finally {
            close(pst, rs);
        }
    }

//Convert row data to user data

private User convertRowToUser(ResultSet rs) throws SQLException {
        System.out.println(rs.getInt(1) + "\t" + rs.getString(2));
        int resultInt = rs.getInt(1);
        String lastName = rs.getString(2);
        System.out.println(lastName + "\t" + resultInt);
        User tempUsers = new User(lastName, resultInt);

        return tempUsers;
    }

//My main method

public static void main(String[] args) throws Exception {
        UsersDAO dao = new UsersDAO();
        dao.searchUser("abc", "count");
    }

当我注释掉以下几行时,打印 last nameresultInt并返回null它正在控制台中打印数据。

    int resultInt = rs.getInt(1);
    String lastName = rs.getString(2);
    System.out.println(lastName + "\t" + resultInt);
    User tempUsers = new User(lastName, resultInt);

我已添加try-catch如下所示的 block 来查看堆栈跟踪,它向我显示了以下结果。

private User convertRowToUser(ResultSet rs) {
        try {
            System.out.println(rs.getInt(1) + "\t" + rs.getString(2));
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String lastName = null;
        try {
            lastName = rs.getString(2);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int resultInt = 0;
        try {
            resultInt = rs.getInt(1);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(lastName + "\t" + resultInt);

        User tempUsers = new User(lastName, resultInt);

        return null;
    }

异常(exception)情况如下。

16  abc
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:154)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:161)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
null    0
8   edf
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:154)
null    0
8   rgtd
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:161)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:154)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:161)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
null    0
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:154)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
8   rtfgt
java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
    at org.swing.classes.UsersDAO.convertRowToUser(UsersDAO.java:161)
    at org.swing.classes.UsersDAO.searchUser(UsersDAO.java:103)
    at org.swing.classes.UsersDAO.main(UsersDAO.java:193)
null    0
null

如果我只是打印值(不分配),输出如下。

16  abc
8   edf
8   rgtd
8   rtfgt
null

请让我知道我哪里出了问题以及如何解决这个问题。

谢谢

最佳答案

这是 MS Access 的 JDBC-ODBC 桥驱动程序的常见警告(错误?)。您应该只读取一个结果集行的数据并将其存储在局部变量中:

private User convertRowToUser(ResultSet rs) throws SQLException {
    int resultInt = rs.getInt(1);
    String lastName = rs.getString(2);
    System.out.println(resultInt + "\t" + lastName);
    User tempUsers = new User(lastName, resultInt);
    return tempUsers;
}

关于java - 分配结果集时未发现数据异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37163248/

相关文章:

postgresql - 从 Spark/pyspark 连接到 PostgreSQL

java - 将Java连接到MySQL数据库

java - 将结果集添加到 ArrayList 需要花费大量时间

java - jboss意外元素存档

java - Tomcat : OutOfMemoryError: Java heap space - 24gb system

java - 从 Java 在 SQL Server 中插入多行

java - 什么是最好的 java 开源 dbf 驱动程序?

java - Titan Cassandra - 幽灵顶点和重新启动之前不一致的读取行为

Java正确实现数学日志功能?