如何在Java中查找ResultSet是否为空?

Yat*_*oel 31 java jdbc resultset

我怎么能发现ResultSet通过查询数据库得到的是空的?

Pau*_*aul 34

在执行语句之后,您可以立即使用if语句.例如

ResultSet rs = statement.execute();
if (!rs.next()){
//ResultSet is empty
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果结果集不为空,您现在将移动光标,有效地跳过第一行. (13认同)
  • @Paul我相信你应该通过在else块中的第一行之前重置游标来更新你的答案以使其完整,如果它不是空的,即`else { rs.beforeFirst(); }` (2认同)

小智 26

这绝对是一个很好的解决方案,

ResultSet rs = stmt.execute("SQL QUERY");
// With the above statement you will not have a null ResultSet 'rs'.
// In case, if any exception occurs then next line of code won't execute.
// So, no problem if I won't check rs as null.

if (rs.next()) {
    do {
      // Logic to retrieve the data from the resultset.
      // eg: rs.getString("abc");
    } while(rs.next());
} else {
    // No data
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*ith 10

这样做使用rs.next():

while (rs.next())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果结果集为空,则循环内的代码将不会执行.


Kac*_*hed 8

如果你使用rs.next()你将移动光标,而不是你应该先移动()为什么不直接使用first()进行检查?

    public void fetchData(ResultSet res, JTable table) throws SQLException{     
    ResultSetMetaData metaData = res.getMetaData();
    int fieldsCount = metaData.getColumnCount();
    for (int i = 1; i <= fieldsCount; i++)
        ((DefaultTableModel) table.getModel()).addColumn(metaData.getColumnLabel(i));
    if (!res.first())
        JOptionPane.showMessageDialog(rootPane, "no data!");
    else
        do {
            Vector<Object> v = new Vector<Object>();
            for (int i = 1; i <= fieldsCount; i++)              
                v.addElement(res.getObject(i));         
            ((DefaultTableModel) table.getModel()).addRow(v);
        } while (res.next());
        res.close();
}
Run Code Online (Sandbox Code Playgroud)


San*_*ari 5

如果(rs == null ||!rs.first()){
    //空
}其他{
    //不是空的
}

请注意,在此方法调用之后,如果结果集不为空,则它在开头。

  • ResultSet永远不会为null。 (10认同)