这样的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