Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分配结果集时未发现数据异常_Java_Jdbc_Jdbc Odbc - Fatal编程技术网

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

Java 分配结果集时未发现数据异常,java,jdbc,jdbc-odbc,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>

我正在编写一个代码来获取列中的值计数,并使用这个结果在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");
    }
我添加了
try catch
块,如下所示,以查看stacktrace,它显示了以下结果

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
如果我只是打印值(不赋值),输出如下

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网桥驱动程序的常见警告(bug?)。对于一个结果集行,应只读取一次数据,并将其存储在局部变量中:

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

这不是一个真正的错误。JDBC规范允许这种行为。的apidoc说:“为了最大的可移植性,每行中的结果集列应该按从左到右的顺序读取,并且每列只能读取一次。”这是为了解决某些驱动程序和数据库系统的限制。