Selenium webdriver と firefox を使用して Web サイトをテストする Java の長いコードがあります。ここで再現できない場合はご容赦ください。その機能を繰り返し実行し続けるために、無限 while ループがあります。それがやるべきことです。また、マルチスレッドは使用しません。
時々、行き詰まります。私は Windows システムを使用しており、コードはコマンド プロンプトで実行されます。スタックしても、エラーや例外はスローされません。「ハングする」ようなものです (コードが実行されているウィンドウのみがハングします)。次に、 CTRL + C を使用する必要があります。その後、動作を再開することもあれば、終了して再起動することもあります。正常に動作しますが、いくつかのループの後、再び「ハング」します。また、通常、mysql データベースにクエリを実行するメソッドの 1 つを実行していることに気付きました。
コードは無限ループを実行します。毎回、mysql データベースにクエリを実行し、特定のテーブル (各ループで 1 つの値) から値 (「ステータス」フィールドが「完了」していない) を取得し、この値を使用してテストを続行します。ループの最後で、テーブルが更新されます (列「ステータス」はその値に対して「完了」に設定されます)。その特定のテーブルに「ステータス」が「完了」と等しくない新しい値がない場合、理想的には「NO NEW VALUE」と表示する必要があります。ただし、すべての値が使用された後は、最後に使用された値が取り出され (前のループの最後でステータスが「完了」に更新されていても)、先に進みます。次に、実行を終了してコードを再度実行する必要があります。今回は無限ループが始まると、データベースにクエリを実行し、正しく「
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;
}
例外はどこにもスローされないことに注意してください。両方のクエリステートメントを表示した後、コードが実行されているウィンドウがフリーズします (それもたまに) 。