2012-03-06 7 views
0

beforeFirst()を削除すると、私の機能は最初にResultSetに記録され、終了します。 beforeFirst()を使用すると、エラーResultSet IS_TYPE_FORWARD_ONLYが発生します。rs.next()が別のレコードに移動しない理由

try { 
    ResultSet rs = stat.executeQuery("select _id, godziny_id from tblZmiany where harmonogram_id = " + h_id + " order by pracownik_id, Dzien"); 
    rs.beforeFirst(); 
    while (rs.next()) { 
     if (stat.executeUpdate("insert into tblWykonanie (Zmiana_id, Godziny_id) values ('" + rs.getLong(1) + "', " + rs.getInt(2) + ");") < 1) { 
      // Jeśli insert nie wstawił kolejnego rekordu 
      error_code = "Wystąpił problem podczas zatwierdzania harmonogramu."; 
      return false; 
     } 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
    System.out.println(e.getMessage()); 
    return false; 
} catch (Exception e) { 
    error_code = e.getMessage(); 
    return false; 
} 

return true; 
+0

SQLエンジンのタイプは – mKorbel

+1

なる場合がございますがリセットされているRS .executeUpdateであなたは、接続の作成時にプロパティを設定する必要がありますか? – Nadmin

答えて

3

あなたはSELECTINSERTの両方に同じStatementオブジェクトを使用しています。 Javadocから:

を生成Statementオブジェクトは、閉じ再実行、または複数の結果のシーケンスから次の結果を取得するために使用される場合ResultSetオブジェクトが自動的に閉じられます。

問題を解決するには、別のStatementオブジェクトをexecuteUpdate()呼び出しに使用します。

また、PreparedStatementをバインドされた引数(?)で使用するようにコードを変更することを強くお勧めします。あなたが今やっているようにビットごとにSQL文を構築すると、security vulnerabilitiesがオープンします。

1

コードには大きなセキュリティ上の欠陥があります。あなたはSQLインジェクションに脆弱です。 SQL文との文字列連結を使用することは決してありません。代わりにPreparedStatementsを使用してください!

harmonogram_id = " + h_id + " order by pracownik_id, 

アプリケーションは簡単なトリックを所有することができる方法はこちらをご覧ください:しかし、あなたの質問に答えるために http://en.wikipedia.org/wiki/SQL_injection

、それはあなたのデータベースに依存します。

Statement stmt = con.createStatement(
          ResultSet.TYPE_SCROLL_SENSITIVE, 
          ResultSet.CONCUR_UPDATABLE), 
          ResultSet.HOLD_CURSORS_OVER_COMMIT); 

http://docs.oracle.com/javase/1.4.2/docs/guide/jdbc/getstart/resultset.html#1012735

+1

ベストプラクティスではありませんが、 'h_id'がintの場合、リスクはありません。 –

+0

同意するが、私は同意しない。今は安全かもしれませんが、初心者の同僚が来てintをStringに変更して、フロントエンドで多くの作業をする必要はありません。単体テストはまだ "合格"になります。申し訳ありませんよりも安全です! –

関連する問題