1

今、私はこれをずっと検索してきましたが、同じ答えが得られます。私が望むのは、Java で jdbc を使用して、1 つの変数の下でさまざまなステートメントをバッチ処理することです。これまでのところ、INSERT INTO table VALUES('?','?') など、同じパターンのステートメントをバッチ処理しています。これは、準備済みステートメントを使用して行うことができます。しかし、java.sql.Statement を使用してさまざまなタイプのステートメントをバッチ処理しようとしましたが、うまく実行されました。たとえば、1 つのステートメントでの更新と挿入、コミットは 1 回です。しかし、java.sql.Statement の問題は、preparedStatement が行うこと、つまりエスケープと呼ばれるものを行うことです。繰り返しになりますが、preparedStatement の問題は、同じパターンのステートメントのみをバッチ処理することです。たとえば、更新と挿入はできません。2つのうちの1つでなければなりません。

だから今私はjava.sql.Statementを使うと思ったが、preparedStatementがすること、Sqlインジェクションを避けるための文字列エスケープをするライブラリはある?また、知らないかもしれない別の用語でバッチ処理を間違えている場合は、むしろ訂正して、何をしたいのかを教えてください。つまり、1 つの java.sql.Statement の下で複数の異なるステートメントを実行することです。

最後に、バッチ処理で構文の検証がないことに気付きましたが、これは望ましくありません。実行中にすべてのエラーがチェックされます。これは、Sql を検証できるライブラリにも該当する可能性があります。

4

2 に答える 2

1

あなたが言及したことは何でも正しいです。

同様の一連のステートメントをバッチ処理して、一度に実行できます。しかし、私の知る限り、Javaには、さまざまな種類のステートメントをグループ化またはバッチ処理して実行するライブラリはありません。

最後にお伝えしたいのは、PreparedStatement オブジェクトを使用しているときに SQL ステートメントが 1 回だけコンパイルされることです。SQL ステートメントでエラーが発生した場合はスローされ、それ以外の場合はステートメントが実行されます。同じステートメントが異なる値でデータベースに再度送信された場合、ステートメントはコンパイルされず、データベース サーバーによって単純に実行されます。

于 2013-10-03T04:29:03.893 に答える