Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结果集显示为空,但表中至少有1条记录_Java_Database_Netbeans_Derby - Fatal编程技术网

Java 结果集显示为空,但表中至少有1条记录

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

问题我的结果集为空,但我知道表中至少有一条记录(“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()或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了吗。