如何解决ResultSet显示为空,但表中至少有1条记录
问题我的ResultSet为空,但我知道表中至少有1条记录(“ tblStudents”)?
代码:
package smartdatabase;
/**
*
* @author travi
*/
import java.sql.*;
public class Conn {
private Connection connect = null;
private Statement stmt = null;
public Conn() {
}
public void getStudents() {
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
connect = DriverManager.getConnection("jdbc:derby://localhost:1527/SmartData","root","password");
String sql;
sql = "SELECT FirstName,Surname FROM tblStudents";
stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
String Firstname = rs.getString("Firstname");
String Surname = rs.getString("surname");
System.out.println(Firstname + " " + Surname);
}else{
System.out.println("Empty ResultSet");
}
} catch (sqlException se) {
se.printstacktrace();
} catch (Exception e) {
e.printstacktrace();
}
}
}
我尝试检查是否区分大小写,但这似乎不是问题。
我也尝试过ResultSet rs = stmt.executeQuery(sql);
,但它没有任何改变。有什么想法吗?
解决方法
rs.next()
方法会将当前对象的指针移到下一行。
因此,当您放置条件if (rs.next())
时,指针仅指向下一行,因为您说过您在数据库中有一个行条目,所以该指针为空。
首次调用next()方法时,结果集指针/游标将移至第一行。再次第二次调用next()方法,结果集光标将移至第二行。通过这种方式。
您可以调用first() or beforeFirst()
方法将ResultSet游标重设回第一行。
您可以在以下网址找到更多说明:ResultSet---isBeforeFirst()---AND--first()
现在要检查是否为空,您需要按以下方式实现,将光标移到第一个位置,如果结果集为空,它将返回false:
选项1:
if (!rs.first()) {
System.out.println("Empty ResultSet");
} else {
do {
String Firstname = rs.getString("Firstname");
String Surname = rs.getString("surname");
System.out.println(Firstname + " " + Surname);
} while (rs.next());
}
更新:
选项2:
if (!rs.isBeforeFirst()) {
System.out.println("Empty ResultSet");
} else {
do {
String Firstname = rs.getString("Firstname");
String Surname = rs.getString("surname");
System.out.println(Firstname + " " + Surname);
} while (rs.next());
}
选项3:
if (!rs.isBeforeFirst() && rs.getRow() == 0) {
System.out.println("Empty ResultSet");
} else {
do {
String Firstname = rs.getString("Firstname");
String Surname = rs.getString("surname");
System.out.println(Firstname + " " + Surname);
} while (rs.next());
}
更新2:
对于DERBY数据库,请在createStatement
中使用以下参数:
// Replace : stmt = connect.createStatement();
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
然后使用上面提到的选项1 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。