Java 结果集显示为空,但表中至少有1条记录
问题我的结果集为空,但我知道表中至少有一条记录(“tblStudents”) 代码:Java 结果集显示为空,但表中至少有1条记录,java,database,netbeans,derby,Java,Database,Netbeans,Derby,问题我的结果集为空,但我知道表中至少有一条记录(“tblStudents”) 代码: package smartdatabase; /** * * @author travi */ import java.sql.*; public class Conn { private Connection connect = null; private Statement stmt = null; public Conn() { } public v
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()或beforeFirst()
方法将结果集光标重置回第一行
有关更多说明,请访问:
现在,为了检查空,您需要按照以下方式实现,将光标移动到第一个位置,如果结果集为空,则返回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());
}
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());
}
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());
}
更新:
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());
}
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());
}
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:
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());
}
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());
}
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());
}
选项3:
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());
}
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());
}
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:
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());
}
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());
}
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());
}
对于DERBY数据库,请使用createStatement
中的以下参数:
// Replace : stmt = connect.createStatement();
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
然后使用上面提到的选项1。我尝试了您的代码,但仍然有相同的输出happening@Travopticat:它将是rs.first()
。我已经更新了我的答案。请立即检查。另一个错误“此方法应仅在可滚动的ResultSet对象上调用”@Travopticat:您正在使用哪个数据库?方法rs.first()
或rs.beforeFirst()
可能并不总是有效。@Travopticat:您尝试过答案中的选项2了吗。