2017-12-08 12 views
0

がでSQL挿入(Javaの/ Netbeansの)ResultSetが閉じ

Connection var2 = DBConnPool.getInstance().getConnection(); 
Statement var3 = null; 
String var5; 
ResultSet var8 = null; 

try { 
    var3 = var2.createStatement(); 

    var5 = "insert into triggers (ts, nodeip, trapname) values (now(), '"+ipaddress+"', '"+trapname+"')"; 
    var3.execute(var5); 

    var5 = "select asset.id as assetid, node.id as nodeid \n" + 
     "from asset, node\n" + 
     "where asset.name LIKE 'Trigger%'\n" + 
     "and node.ipaddress=\'"+ipaddress+"'"; 
    var8 = var3.executeQuery(var5); 

    while(var8.next()){ 
     int var31 = var8.getInt("assetid"); 
     int var32 = var8.getInt("nodeid"); 

     var5 = "insert into alerts (ts, assetid, alerttypeid, nodeid, ack) values (now(), " + var31 + ", 15, " + var32 + ", 0)"; 
     var3.execute(var5); 
     var5 ="insert into logs (ts, rssi, nodeid, assetid) values (now(), 1000, " + var32 + ", " + var31 + ")"; 
     var3.execute(var5); 
    } 
} 

選択asset.id照会がOKで実行しているように見える前に、閉じたResultSetの問題を持っていますが、(挿入する前に) point of

while(var8.next()) { 
    int var31 = var8.getInt("assetid"); 
    int var32 = var8.getInt("nodeid"); 

ResultSetが終了した後で操作を実行できません。

while(var8.next())の外に挿入を行う必要がありますか?もしそうならば、変数var31とvar32をどのように回復/参照するのですか?

謝罪、私はVAR名は非常に有用ではありませんが、挿入コマンドは簡単でなければなりません(またはそう思った)知っている

思考を分離するようにしてください

よろしく アクティブ

+0

「ResultSetを閉じた後に操作できません」という行は何ですか? – DanielBarbarian

+0

while(var8.next()) – Active

+0

わかりませんが、最初の実行後に新しい文を作成する必要があるかもしれません。 – DanielBarbarian

答えて

1

を高く評価すべての声明の責任:

Connection var2 = DBConnPool.getInstance().getConnection(); 
Statement var3 = null; 
Statement stmQuery = null; 
String var5; 
ResultSet var8 = null; 

try { 
    var3 = var2.createStatement(); 
    stmQuery = var2.createStatement(); 

    var5 = "insert into triggers (ts, nodeip, trapname) values (now(), '"+ipaddress+"', '"+trapname+"')"; 
    var3.execute(var5); 

    var5 = "select asset.id as assetid, node.id as nodeid \n" + 
     "from asset, node\n" + 
     "where asset.name LIKE 'Trigger%'\n" + 
     "and node.ipaddress=\'"+ipaddress+"'"; 
    var8 = stmQuery.executeQuery(var5); 

    while(var8.next()){ 
     int var31 = var8.getInt("assetid"); 
     int var32 = var8.getInt("nodeid"); 

     var5 = "insert into alerts (ts, assetid, alerttypeid, nodeid, ack) values (now(), " + var31 + ", 15, " + var32 + ", 0)"; 
     var3.execute(var5); 
     var5 ="insert into logs (ts, rssi, nodeid, assetid) values (now(), 1000, " + var32 + ", " + var31 + ")"; 
     var3.execute(var5); 
    } 
} catch (Exception e) { 
    //Somthing went wrong! 
} finally { 
    var3.close(); 
    stmQuery.close(); 
    var8.close(); 
    var2.close(); 
} 

ヒント:ご覧のとおり、最終ブロック内のリソースを閉じることは非常に重要です。

これは役に立ちます。

+0

ありがとうエレアサル、大変感謝しています。 Tryブロックが動作していますが、最終的にはそれほど正しくないものがありますが、私はそのことについて作業します。 – Active

関連する問題