[英]resultset iterating only one time on while loop
所以我在我的java代碼中使用Statement
來訪問mySql數據庫來執行我的查詢並將返回的ResultSet
保存在ResultSet
對象中然后使用相同的ResultSet
對象,我迭代結果中的行並簡單地打印出每行的數據。
這是代碼:
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()
,當我在第一次迭代時實際運行它時,它進入循環並打印出我表的第二行。
非常感謝您的幫助。
我的問題是在getClasses()
方法中我也修改了rs
變量,所以在while循環中變量不一樣所以它返回false。
解決方案是在每個方法中使ResultSet rs
變量本地化。
像這樣:
public class DBConnect {
private Connection conn;
public DBConnect(){
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/unal_grades", "root", "");
}catch(Exception ex){
System.out.println("Error: " + ex);
}
}
public ArrayList<Semester> getSemesters(){
ResultSet rs;
try{
Statement st = conn.createStatement();
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;
}
}
Statement st;
ResultSet rs;
try{
String query = "Select * from semester";
st = con.createStatement();
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);
}
System.out.println();
} catch(Exception ex){
System.out.println("Error: " + ex);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.