データベース上でmySQLクエリ/文を実行するツールを作成しようとしています。 私が実行している問題は、これらのクエリー/ステートメントがテキストボックスのようなフリーフォームのテキストにあることです。プロフェッショナルなSQLプログラムでも使用しています。あなたは、クエリ/文は、その後、コメント、SET文と実行文またはSELECTクエリのいずれかを含むことが見ることができるようにSET文と通常の文を組み合わせる
#Example of a query statement
@SET fName = "John"
SELECT * FROM Person WHERE Person.firstName = fName
#Example of an execute statement
@SET fName = "John"
DELETE FROM Person WHERE Person.firstName = fName
:それはようなものになるだろう例を与えることを 。また、それらは必ずしも適切にフォーマットされていないかもしれないので、スタッフやタブやスペースの間に空白行があるかもしれません。
私はPreparedStatementsのオプションについて知っていますが、それは動作しますが、それは完全なクエリ/ステートメントの請求書がフリーフォームのテキストとして編集可能ではありません。 私の質問は、これらのステートメント/クエリをJavaで実行する方法です。 executeBatchは2番目の例では動作しますが、最初の例ではResultSetが返されます。
あなたは 'execute()'を使って調べる必要があります。自動コミットを無効にしてください。 –
.setAutoCommit(false)は実行されたステートメントの積み重ねを許可しますか? "@SET xxxx"に対してのみ.execute()が動作する ステートメントを分割して.executeUpdate()または.executeQuery()を.setAutoCommit(false)で実行すると、それらをスタックして後でコミットできるようになります彼らはすべて実行されましたか? – ZeW
私は定期的にMySQLを使用していませんし、 '@SET'を使ったことは一度もありませんが、コミットの境界を越えて永続化されないことを期待しています(間違っているかもしれません)。あなたは['execute'](http://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#execute-java.lang.String-)を使う必要があります。あなたが実行している文のタイプを事前に知っている。そして、自動コミットを無効にすると、接続オブジェクトに対して自分自身で 'commit()'を呼び出す必要があります。 –