Java DAO中的结果集问题
请原谅我在正确处理这个问题时缺乏创造力 嗨,我花了3个小时试图解决这个问题,我想我已经解决了,但是我仍然找不到解决办法。我有一个非常简单的代码Java DAO中的结果集问题,java,dao,resultset,Java,Dao,Resultset,请原谅我在正确处理这个问题时缺乏创造力 嗨,我花了3个小时试图解决这个问题,我想我已经解决了,但是我仍然找不到解决办法。我有一个非常简单的代码 Statement stmt = db.getStatement(); ResultSet queryResult = stmt.executeQuery("SELECT * FROM users"); while(queryResult.next()) { username = queryResult.getS
Statement stmt = db.getStatement();
ResultSet queryResult = stmt.executeQuery("SELECT * FROM users");
while(queryResult.next()) {
username = queryResult.getString("username");
password = queryResult.getString("password");
privilege = queryResult.getInt("privilege");
queryResult = stmt.executeQuery("SELECT * FROM division");
while(queryResult.next()) {}
users.add(new User(username, password, privilege));
}
现在,将这段代码简化,以说明我的代码中存在的问题。显然,我没有一个while循环,它不包含任何内容
我逐渐意识到,每当我想从数据库中获取一些东西时,我只能在一个循环中使用resultset。如果我写了一个“嵌套的resultset循环”,我会得到“Operation…resultset closed”,“找不到列'username',或者其他一些错误
我的DAO代码中有很多嵌套的resultset循环,用于从数据库中获取所有内容。因为我对MySQL不是很在行,所以这是一个简单的解决方案(我几乎没有时间做这个程序了)。。。因为我以前用PHP做过类似的事情
我不是说这段代码是好的设计,但是为了时间的缘故,我现在真的不太关心好的类设计。因此,欢迎您考虑的任何解决方案,无论设计选择是否糟糕
另一个解决方案是将所有内容拆分为单个循环,因为这样做很容易(非常简单)。但这意味着要修改很多代码,我希望这是备份计划。您不能像这样交错结果集,请参阅: 默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在
我认为如果您为不同的查询创建单独的语句,您就可以了。我看到的通常做法是为每个查询使用单独的DAO方法,以便使DAO方法尽可能简单和可重用。(这意味着DAO不负责事务划分,但更高级别的组件(如服务)控制事务中的内容。)您不能像这样交错结果集,请参见: 默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在
我认为如果您为不同的查询创建单独的语句,您就可以了。我看到的通常做法是为每个查询使用单独的DAO方法,以便使DAO方法尽可能简单和可重用。(这意味着DAO不负责事务划分,但更高级别的组件(如服务)控制事务中的内容。)要解决您的问题,请不要将嵌套循环的值分配给同一个ResultSet要解决您的问题,请不要将嵌套循环的值分配给同一个ResultSet。。。使用为内部循环创建的结果集覆盖外部循环中使用的结果集。这太糟糕了。如果你知道你不会这么做。而且。。。我不是你的兄弟,抱歉这是一个专业论坛。你。。。使用为内部循环创建的结果集覆盖外部循环中使用的结果集。这太糟糕了。如果你知道你不会这么做。而且。。。我不是你的兄弟,对不起,这是一个专业论坛。非常感谢。我试着像你告诉我的那样为每个结果集做单独的语句,但每次都失败,出现“操作错误…结果集关闭”错误。所以我发现问题出在我老师的premade toolkit中,每次调用getStatement()时,它都返回相同的语句对象。@Volatile:这也是我在工作场所看到的:开放源代码库将所有的bug都去掉了,但是,内部构建的可重用库可能存在各种各样的陷阱。非常感谢。我试着像你告诉我的那样为每个结果集做单独的语句,但每次都失败,出现“操作错误…结果集关闭”错误。所以我发现问题出在我老师的premade toolkit中,每次调用getStatement()时,它都返回相同的语句对象。@Volatile:这也是我在工作场所看到的:开源库可以消除所有的bug,但内部构建的可重用库可能存在各种陷阱。