【发布时间】:2015-09-20 21:05:18
【问题描述】:
所以我使用Statement 访问我的java 代码中的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(),当我在第一次迭代中实际运行它时,它会进入循环并打印出我的表格的第二行。
非常感谢您的帮助。
【问题讨论】:
-
你的代码没有编译:你还没有初始化
st变量。 -
您确定您的查询返回的不止一行吗?
-
@ali786 我想,这就是他对问题的调试部分所说的话。如果他在调试器中检查
rs.next(),则找到第二行。 -
@SantiagoAlvarez 但是你确定你的 while 块没有异常吗? (我不认为那是你的全部代码)。我无法想象为什么你不应该得到所有的行。
-
@TagirValeev 谢谢我解决了这个问题,但这是帖子上的错误。