【发布时间】:2018-10-11 18:31:30
【问题描述】:
我一直在得到错误耗尽的结果集,但我并没有真正知道我在做什么,我基本上是在尝试将数据库中的 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;
}
【问题讨论】:
-
请在问题中添加完整的异常堆栈跟踪
-
如果您打算返回多个
TypeLogement,您需要创建一个List<TypeLogement>并将新的TypeLogement添加到该列表中。然后返回列表。另外,我没有看到 id 列。您似乎还声明了一个数组,但从未设置大小。Logement logements[] = null; -
您的代码似乎产生了 N+1 个查询,而您可能只需一个查询就可以完成所有这些。此外,
find中的cnx与findAll中的连接是否相同?如果是这样,您关闭了连接,这意味着任何派生结果集也将关闭(包括findAll中的那个)。 -
@Ivan 你的意思是我得到的整个文本都是错误的?对不起,我还是个初学者。
-
@MarkRotteveel 谢谢下面的人也指出了这一点,现在我删除了 close();在
find方法中,但现在我在这一行得到nullpointerexception错误logements[i]=logement;