0
ここでは、発生する可能性のある理由と、開いている接続のために発生する可能性のある原因のみを調べました。私のコードでは、私は接続を閉じて、新しいものを登録して再オープンします。「結果セットを閉じた後に操作を使用できません」
try{
//Registration of driver, connector
String myDriver = "com.mysql.jdbc.Driver";
String myURL = "jdbc:mysql://localhost:3306/maintenance";
Class.forName(myDriver);
Connection connection = DriverManager.getConnection(myURL, "admin", "");
//Call MySQL for table names of users
String query = "SELECT users FROM goods";
Statement st = connection.createStatement();
ResultSet res = st.executeQuery(query);
while (res.next()) {
String name = res.getString("users");
if(name.equals(username)){
connection.close();
res.close();
try{
Connection connection2;
connection2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/maintenance", "admin", "");
query = "SELECT idkeys FROM goods";
Statement st2;
st2 = connection2.createStatement();
ResultSet res2;
res2 = st2.executeQuery(query);
String myDriver2 = "com.mysql.jdbc.Driver";
Class.forName(myDriver2);
connection2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/maintenance", "admin", "");
while (res2.next()) {
keyed = res2.getObject("idkeys");
if (keyed.equals(sanitizedPass)){
checked = true;
connection2.close();
res2.close();
}
}
} catch (Exception e2){
System.err.println(e2.getMessage());
}
}
}
//Close connections
if (!checked){
res.close();
connection.close();
}
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
return checked;
私のコードでは、少なくとも私が知る限り、そのようなことは起こりません。なぜそれはまだ投げられるのだろうか?
'connection.close(上記の照会を参照)。 res.close(); 'これで物事をしますが、外側のループを壊さないので、' while(res.next()) 'にループバックするとエラーになります。エラーを引き起こす正確な行についてはエラーメッセージの行番号を参照してください。これは内部ループの問題と同じである可能性が高いためです。解決方法: 'close()'を手動で呼び出さないでください。代わりにtry-with-resourcesを使用してください。 – Andreas