java在分配结果集时未发现数据异常
我正在编写一个代码来获取列中的值计数,并使用这个结果在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 name
和resultInt
并返回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
块以查看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
请让我知道我哪里出了问题,我怎样才能解决这个问题
谢谢
# 1 楼答案
这是一个常见的警告(bug?)用于MS Access的JDBC-ODBC网桥驱动程序。对于一个结果集行,应只读取一次数据,并将其存储在局部变量中: