我一直在获取错误用尽的结果集,而没有真正知道我在做什么,我基本上是在尝试将数据库中的3行存储到名为“ Logement”的类的3个元素的数组中我的uni项目,以后将用于填充javafx ui中的许多复选框
package accesBD;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import metier.ConvIntToBool;
import metier.Logement;
public class LogementDAO {
TypeLogementDAO bd = new TypeLogementDAO();
public Logement[] findAll() throws SQLException {
Logement logements[] = null;
Connection cnx= SConnection.getInstance();
Logement logement = null;
try {
PreparedStatement st= cnx.prepareStatement("select* from logement");
ResultSet res= st.executeQuery();
int i =0;
while (res.next()) {
logement= new Logement(bd.find(res.getInt(1)), ConvIntToBool.boolToInt(res.getInt(2)) ,ConvIntToBool.boolToInt(res.getInt(3)),ConvIntToBool.boolToInt(res.getInt(4)),ConvIntToBool.boolToInt(res.getInt(5)),ConvIntToBool.boolToInt(res.getInt(6)));
//System.out.println(res.getRow());
logements[i]=logement;
i++;
}
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
return logements;//la collection retournée peut être vide
}
}
These是我要从数据库接收的3行
这是find方法的代码
public TypeLogement find(int id){
Connection cnx =SConnection.getInstance();
TypeLogement c=null;
try {PreparedStatement stp1=cnx.prepareStatement("select * from typelogement where id=?");
stp1.setInt(1, id);
ResultSet n= stp1.executeQuery();
while(n.next()){
c= new TypeLogement(n.getInt(1),n.getString(2),n.getDouble(3));
}
cnx.close();
} catch (SQLException e) {
e.printStackTrace();
}
return c;
}
答案 0 :(得分:2)
类似的问题是因为您关闭了数据库连接:
您使用Connection cnx= SConnection.getInstance();
来获得findAll()
和find()
的连接。然后在find()
中关闭连接。因此发生以下情况:
findAll()
中打开连接ResultSet
并对其进行迭代find()
Connection cnx= SConnection.getInstance();
并获得内部ResultSet
find()
中关闭了连接。关闭连接时,它将关闭在该连接中打开的所有结果集ResultSet
的循环失败,因为由于find()
方法中的关闭连接而关闭了结果集代替关闭连接,您需要使用ResultSet
方法关闭find()
。