我正在从表中检索多个结果。如果在表中找到两条记录,则只返回一条记录。如果有三个结果,则只返回两个。我不确定为什么会发生这种情况,因为我认为“while(rs.next())”方法会迭代每个结果。任何想法/评论赞赏。感谢。
package Test;
import java.sql.*;
public class DatabaseConnection {
//Create a GUI object
static GUI GUI = new GUI();
//Initialize String array
static String[] arr = new String[5];
//Connection string to Access Database
static String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Users/StevenM/Desktop/TestProject.mdb";
public static void main(String[] args) throws ClassNotFoundException, SQLException{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
static void SelectAllFromActor(String Query) throws SQLException, ClassNotFoundException{
Connection conn = DriverManager.getConnection(database,"","");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(Query);
if(!rs.next()){
GUI.NoResults();
}
else{
GUI.SetActorModel();
GUI.clearResults();
while (rs.next()){
arr[0] =(rs.getString("Title") +" ");
arr[1] =(rs.getString("First_Name") +" ");
arr[2] =(rs.getString("Last_Name") +" ");
arr[3] =(rs.getString("Gender") +" ");
arr[4] =(rs.getString("ID") +" ");
GUI.AddToTable(arr,"Actor");
}
}
}
答案 0 :(得分:2)
您在rs.next
声明之上致电while
6行:
if(!rs.next()){
GUI.NoResults();
}
通过这种方式,您已经“处理”了第一个结果,因此总是有一个结果少于预期。请改用first()
:
if(!rs.first()){
GUI.NoResults();
}
答案 1 :(得分:2)
您在rs.next()
语句中调用if
,该语句检索第一条记录。然后在你的while循环中,它会多次调用rs.next()
,但你不会得到第一条记录,因为它已经被检索过了。
像这样重做:
boolean records = false;
while(rs.next()) {
records = true;
// code
}
if(!records)
GUI.NoResults();
答案 2 :(得分:0)
您应该将rs.hasNext()
置于上述条件下,并while-loop
保持原样。
当使用next()
时,迭代器会移动到下一个结果,如果你这样做两次就会丢失一条记录。