如何在Java中查找结果集是否为空?

如何在Java中查找结果集是否为空?,java,jdbc,resultset,Java,Jdbc,Resultset,如何找到通过查询数据库得到的结果集是否为空?计算java.sql.ResultSet的大小: int size = 0; if (rs != null) { rs.beforeFirst(); rs.last(); size = rs.getRow(); } ()使用rs执行此操作。下一步(): 如果结果集为空,循环中的代码将不会执行。在execute语句之后,可以立即使用If语句。比如说 ResultSet rs = statement.execute(); if (

如何找到通过查询数据库得到的
结果集
是否为空?

计算java.sql.ResultSet的大小:

int size = 0;
if (rs != null) {
    rs.beforeFirst();
    rs.last();
    size = rs.getRow();
}

()

使用
rs执行此操作。下一步()


如果结果集为空,循环中的代码将不会执行。

在execute语句之后,可以立即使用If语句。比如说

ResultSet rs = statement.execute();
if (!rs.next()){
//ResultSet is empty
}
如果使用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();
}
public void fetchData(ResultSet res,JTable表)抛出SQLException{
ResultSetMetaData元数据=res.getMetaData();
int fieldscont=metaData.getColumnCount();
对于(int i=1;i
如果(rs==null | |!rs.first()){
//空的
}否则{
//不空
}

请注意,在这个方法调用之后,如果resultset不是空的,那么它就在开始处。

这无疑提供了很好的解决方案

ResultSet rs=stmt.execute(“SQL查询”);
//使用上述语句,您将不会有空结果集“rs”。
//在这种情况下,若发生任何异常,则不会执行下一行代码。
//所以,如果我不检查rs为null,就没有问题了。
如果(rs.next()){
做{
//从结果集检索数据的逻辑。
//例如:rs.getString(“abc”);
}while(rs.next());
}否则{
//没有数据
}

据我所知,这是一个坏主意……首先,你需要确保结果可以向后移动,其次,你在这样做时会受到性能的影响。只使用仅向前的结果集和使用while循环要快得多(就像这里的其他人已经建议的那样)同意…我投票通过了被接受的答案,这更直接地回答了问题。Dolph-NICE!!!我同意。我在下面添加了我的代码(不能在注释中包含代码)。这样更安全,我认为.ResultSet永远不会为空。但是,如果结果集不是空的,您现在将移动光标,实际上跳过了第一行。@Paul我认为您应该更新答案,使其完整,方法是在else块的第一行之前重置光标,如果它不是空的,即
else{rs.beforeFirst();}
    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();
}
if (rs == null || !rs.first()) { //empty } else { //not empty }