Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DAO中的结果集问题_Java_Dao_Resultset - Fatal编程技术网

Java DAO中的结果集问题

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

请原谅我在正确处理这个问题时缺乏创造力

嗨,我花了3个小时试图解决这个问题,我想我已经解决了,但是我仍然找不到解决办法。我有一个非常简单的代码

    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,但内部构建的可重用库可能存在各种陷阱。