分配结果集时没有数据发现异常

时间:2016-05-11 12:51:10

标签: java jdbc jdbc-odbc

我正在编写代码来获取列中值的计数,并且使用此结果我需要在我的回合中创建一个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块,如下所示,以查看堆栈跟踪,并向我显示以下结果。

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;
    }

例外情况如下。

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

请让我知道我哪里出错了,我该如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

这是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;
}