2012-03-14 6 views
0

Joomlaサイトに記事を追加するJavaアプリケーションを作成しました。
私はMySQLをデータベースに接続してクエリを実行するためにJDBCを使用しています。
記事を作成するには、_contentsテーブル(挿入)と_assetsテーブル(3つの更新&ワン挿入)で3つのクエリを実行する必要があります。
_assetsテーブルで実行する必要がある3つのクエリは、項目を「ネストされたリストツリー」に挿入するために使用されます。これらのクエリの1つが失敗すると、ネストされたリストツリーが破損します。
私のプログラムはリモートシステムからデータベースにアクセスしています(インターネット接続の問題または何かがクエリを中断する可能性があります)。
どのように3つのクエリを実行しても、間違っていないことを確認するにはどうすればよいですか?JDBCで一度に4つのmysqlクエリを実行

ありがとうございました

+0

これらのクエリを実行する前に新しいデータベーストランザクションを開始し、すべてのトランザクションが実行された後にトランザクションをコミットすることができます。そうすれば、いずれかが失敗した場合、以前のクエリはキャンセルされます。 – fajran

答えて

2

私はトランザクションがあなたが探しているものだと思います。

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

+0

不幸にもMySQL MYISAMエンジンはトランザクションをサポートしていません! – RYN

+1

あなたの質問にMyISAMは言及していませんでした。関連するテーブルをInnoDBに変更できない場合は、各クエリの後にチェックを入れ、成功した場合にのみ続行するようにしてください。 StoredProcs serversideは、トランザクションの振る舞い(アトミック性)を保証しないため、助けにはなりません – moodywoody

1

また、あなたの4つのクエリを組み合わせた「ストアドプロシージャ」にMysql-Transactionsを使用することができます。 この方法では、更新が成功する可能性が高いと思います(データベース上で、Javaメソッドが失敗する可能性があります)。他のプログラム/プログラミング言語を使用しようとしている場合、アップデートの処理は同じで、それ以上は気にする必要はありません。

しかし、私はJavaがSQLよりも簡単であるため、Javaのプログラムを使用しています(特にSpringや永続化プロバイダを使用している場合は、 hibernate transactions))。

+0

不幸にもMySQL MYISAMエンジンはトランザクションをサポートしていません! – RYN