1

我正在从表中检索多个结果。如果在表中找到两条记录,则只返回一条。如果有三个结果,则只返回两个。我不确定为什么会发生这种情况,因为我认为“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");
        }
    }
}   
4

3 回答 3

2

您在-statement上方调用rs.next6 行:while

if(!rs.next()){
    GUI.NoResults();
}

这样,您已经“处理”了第一个结果,因此您的结果总是比预期的要少。改用first()

if(!rs.first()){
    GUI.NoResults();
}
于 2013-11-08T11:07:10.200 回答
2

您正在调用语句,rs.next()if语句检索第一条记录。然后在你的while循环中它调用rs.next()了很多次,但是你永远不会得到第一条记录,因为它已经被检索到了。

像这样重做:

boolean records = false;
while(rs.next()) {
    records = true;
    // code
}
if(!records)
    GUI.NoResults();
于 2013-11-08T11:08:13.703 回答
0

你应该把rs.hasNext()上面的条件放在一边,让它保持while-loop原样。当使用next()迭代器移动到下一个结果时,如果你这样做两次,你会丢失一条记录。

于 2013-11-08T11:08:57.757 回答