如何确定获得的Java ResultSet是否为空?

Bru*_*uce 12 java database jdbc resultset

Class.forName("org.sqlite.JDBC");
Connection conn =
    DriverManager.getConnection("jdbc:sqlite:userdata.db");
Statement stat = conn.createStatement();

ResultSet rs = stat.executeQuery("SELECT * from table WHERE is_query_processed = 0;");

int rowcount = rs.getRow(); 
System.out.println("Row count = "+rowcount); // output 1

rs.first(); // This statement generates an exception
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Col*_*son 20

我通常使用的模式如下:

boolean empty = true;
while( rs.next() ) {
    // ResultSet processing here
    empty = false;
}

if( empty ) {
    // Empty result set
}
Run Code Online (Sandbox Code Playgroud)


jas*_*p85 5

这是一个简单的方法:

public static boolean isResultSetEmpty(ResultSet resultSet) {
    return !resultSet.first();
}
Run Code Online (Sandbox Code Playgroud)

注意事项

这会将光标移动到开头.但是如果你只想测试它是否为空,那么你可能还没有做过任何事情.

另外

first()在进行任何处理之前,请立即使用该方法.ResultSet rs = stat.executeQuery("SELECT*from table WHERE is_query_processed = 0;");

if(rs.first()) {
    // there's stuff to do
} else {
    // rs was empty
}
Run Code Online (Sandbox Code Playgroud)

参考

ResultSet(Java Platform SE 6)