我正在编写代码来获取列中值的计数,并且使用此结果我需要在我的回合中创建一个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
块,如下所示,以查看堆栈跟踪,并向我显示以下结果。
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
请让我知道我哪里出错了,我该如何解决这个问题。
由于
答案 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;
}