0

我在 java 中有一段很长的代码,它使用 selenium webdriver 和 firefox 来测试我的网站。如果我不能在这里重现它,请原谅我。它有一个无限的while循环来重复执行它的功能。这就是它应该做的。另外,我不使用多线程。

  1. 有时,它会卡住。我使用 Windows 系统,代码在命令提示符下运行。当它卡住时,不会抛出任何错误或异常。它类似于“它挂起”(只有运行代码的窗口挂起)。然后我必须使用 CTRL + C 。有时它会在那之后恢复工作,有时它会被终止,然后我重新启动它。它工作正常,但经过一些循环后,它再次“挂起”。另外,我注意到它通常在执行查询 mysql 数据库的方法之一期间。

  2. 代码运行一个无限循环。每次,它都会查询 mysql 数据库,从特定表(每个循环中的一个值)中获取一个值(其“状态”字段不是“完成”)并继续使用该值进行测试。在循环结束时,表已更新(该值的“状态”列设置为“完成”)。当该特定表中没有“状态”不等于“完成”的新值时,理想情况下应该显示“没有新值”。然而,在所有的值都被使用之后,它只会占用最后使用的值(即使它的状态在前一个循环结束时更新为“完成”)并继续。然后我必须终止执行并再次运行代码。这次无限循环开始时,它查询数据库并正确显示“

我使用 con.close() 关闭 sql 连接。

似乎在运行循环几次后,某些资源在某处被耗尽。但这只是一个疯狂的猜测。

任何人都可以提出问题是什么,我该如何解决?

下面是一段相关的代码:

try{
        String sql = "select something from somewhere where id = ? and          is_deleted = '0';";

        System.out.println("\n"+sql + "\n? = " + pID);

        PreparedStatement selQuery1 = conn.prepareStatement(sql);

        selQuery1.setString(1, pID);

        ResultSet rs1 = selQuery1.executeQuery();

        //Extract data from result set
        while(rs1.next() && i1<6){
            //do something


        }//end while loop

        String sql2 = "select something2 from somewhere2 where id = ? and is_deleted = '0';";
        System.out.println("\n"+sql2 + "\n? = " + pjID);


        PreparedStatement selQuery2 = conn.prepareStatement(sql2);
        selQuery2.setString(1, pjID);
        ResultSet rs2 = selQuery2.executeQuery();



        //Extract data from result set
        while(rs2.next() && i1<6){
            //do something

        }//end while loop

        System.out.println("\nDone.");

        conn.close();
    }catch (SQLException e) {
        flag=false;
}

请注意,任何地方都不会抛出异常。在显示两个查询语句后,运行代码的窗口会冻结(偶尔也会冻结) 。

4

2 回答 2

1

我忘了关闭查询和结果集。只是关闭连接应该隐式关闭查询和结果集,但它并不总是有效。

于 2013-11-12T12:05:02.223 回答
0

我最近也面临同样的问题。但就我而言,问题在于索引。我只是在这里指出,以便对其他人有所帮助。

就我而言,我正在从数据库中的 MenuMaster 表中获取菜单项。因此,在成功登录后,我正在使用 MySQL 连接器驱动程序访问数据库以获取菜单项。在这里,我需要使用他们的子菜单获取父菜单。在我的查询中,在 where 子句中我没有使用任何主键或唯一键。所以,花了很长时间。所以只需为那个键做一个索引,它就像魅力一样......

于 2016-02-25T09:45:27.093 回答