Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/gestion_ecole","root","");
stmt = con.createStatement();
String sql="SELECT * FROM `note_mat` WHERE cin = '"+etd.cin+"'";
ResultSet rt=c.select(sql);
List<ResultSet> notes = new ArrayList<>();
while (rt.next())
notes.add(rt);
//i have problem only here the first part it's ok
for(int i=0;i<notes.size();i++)
System.out.println(notes.get(i).getDouble("note"));
//最后一行生成异常而notes.size()= 5感谢您的帮助
答案 0 :(得分:0)
ResultSet
是指向从数据库返回的查询的单行的游标。调用next()
会将此光标移动到下一行,并永久丢失前一行(除非您重新运行查询,或向后滚动ResultSet
,这只能在某些JDBC驱动程序中使用)。 / p>
此处要考虑的要点是RestulSet
是有状态对象。多次存储相同的参考没有意义。每次调用next()
时,都应从当前行中提取所有有用信息,然后继续。
例如,您的代码段可以重写以执行以下操作:
List<Double> notes = new ArrayList<>();
// Save all the notes from all the rows
while (rt.next()) {
notes.add(rt.getDouble("note"));
}
// Print all the notes
// Old-school list traversal style kept from the OP
for(int i = 0; i<notes.size(); i++) {
System.out.println(notes.get(i));
}