這樣的IM使用Statement
來執行我的查詢和保存返回ResultSet
在那麼ResultSet
對象使用同一ResultSet
對象,我遍歷從排在我的Java代碼中訪問MySQL數據庫結果並簡單地輸出每行的數據。結果集迭代只有一個時間,而循環
下面是代碼:
public class DBConnect {
private Connection conn;
private Statement st;
private ResultSet rs;
public DBConnect(){
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/unal_grades", "root", "");
st = conn.createStatement();
}catch(Exception ex){
System.out.println("Error: " + ex);
}
}
public ArrayList<Semester> getSemesters(){
try{
ArrayList<Semester> semesters = new ArrayList<Semester>();
String query = "Select * from semester";
rs = st.executeQuery(query);
System.out.println("semesters");
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
float average = rs.getFloat("average");
boolean active = rs.getBoolean("active");
System.out.println(name+"/"+average+"/"+active);
Semester semester = new Semester(id, name, average, active);
semester.setClasses(getClasses(semester));
semesters.add(semester);
}
System.out.println();
return semesters;
}catch(Exception ex){
System.out.println("Error: " + ex);
}
return null;
}
我的問題是,在while循環中,rs.next()
語句只在第一次循環返回true。換句話說,當它實際上有很多行時,它只會在數據庫中打印我的表的第一行。
調試時,如果我真的跑過來吧,當我真正在它的第一次迭代運行前檢查
rs.next()
,它進入循環,並打印出我的表的第二行。
非常感謝您的幫助。
你的代碼不能編譯:你有沒有初始化'st'變量。 –
你確定你的查詢返回多行嗎? – Ali786
@ ali786我想,這就是他說的問題的調試部分。如果他在調試器中檢查了rs.next(),則會找到第二行。 – griFlo