1

テーブルから複数の結果を取得しています。テーブルに 2 つのレコードが見つかった場合は、1 つだけが返されます。結果が 3 つある場合は、2 つだけが返されます。「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

-statementrs.nextの上に 6 行を呼び出します。while

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

このようにして、最初の結果をすでに「処理」しているため、常に予想よりも 1 つの結果が少なくなります。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()すると次の結果に移動する場合、2 回実行するとレコードが失われます。

于 2013-11-08T11:08:57.757 に答える