列表不为空但我不能使用元素类型ResultSet

时间:2013-12-29 19:13:37

标签: java

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感谢您的帮助

1 个答案:

答案 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));
}