Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JDBCのConnectionクラスの追加

Java+mysqlでアプリケーションを開発しています。
データベース接続にJDBCを使用しています。

Connectionクラスの使い方が分からなくて、質問させて下さい。
なお、AutoCommitはFalseにしています。

質問内容なのですが、トランザクションを使用してCommitしたものがSelectできなくて困っています。

複数のユーザーがアクセスしてくるサーバーアプリケーションを作っています。
アプリケーション内ではユーザー毎にスレッドを生成していて、Connectionインスタンスもユーザー毎に持っています。

ここで、ユーザーAさんがINSERTをしたあとにSELECTをするとデータを取得できます。
次にユーザーBさんがSELECTするとデータを取得できません。

ユーザーAさん:INSERT
ユーザーAさん:SELECT ・・・データ1件
ユーザーBさん:SELECT ・・・データ0件(取得できない)

COMMITできていることはコンソールから確認しました。
そこで次のことを試してみました。

ユーザーAさん:INSERT
ユーザーAさん:SELECT ・・・データ1件
ユーザーBさん:SELECT ・・・データ0件
ユーザーBさん:DBコネクション切断
ユーザーBさん:DBコネクション接続
ユーザーBさん:SELECT ・・・データ1件(取得できた)

ということは、Connectionのインスタンスはstaticで共有する(1つを全ユーザーで使用する)あるいは、SQL実行毎に接続切断の必要があるということなんでしょうか。

使い方が分からず質問させて頂きました。
宜しくお願いします。

5

回答

81560

閲覧

5件の回答

評価

0

題名間違えました・・・
×追加
○使い方

評価

0

どこでcommitしているのでしょうか?

1)ユーザーAさん:INSERT
2)ユーザーAさん:SELECT ・・・データ1件
3)ユーザーBさん:SELECT ・・・データ0件(取得できない)

1)の後にcommitされているんですよね?
遅くても、3)の前にはcommitされているんですよね?

評価

0

Bの側でexecuteを行ったあとで、
Aの側でcommitしてから、
Bの側でループを回したら、そういうことになるかも知れない。

評価

0

ご返信ありがとうございます。そして遅れてすいません。

// さん
1)の後でcommitしています。

不良社員さん
なるほど、B側ではA側のcommitに関係なく一定間隔でSELECTし続けています。
つまり、ご指摘の通り、”そういうこと”になっています。
現状は、DB接続→SELECT→DB切断を毎回行うことで問題を解消しています。
毎回接続切断を行うので効率が悪い気がするのですが、こういうものなのでしょうか。
「それはまずいでしょ」ということであればご指摘頂ければと思います。

評価

0

「トランザクション」という言葉を調べてみましょう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。