みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JAVAでテーブルの中身を見て、処理を分岐させるには

JAVA初心者です。

JAVAで、ファイルから読み込んだデータをMySQLのテーブルに格納したいのですが、
すでにテーブルにある(キーが同じ)ならば、updateをし、
テーブル内同じキーのものがなければ、insertをしたいのですが、分岐条件の部分をどうやってかいたらよいのかわからず、上手くかけません。

select count(*) from table where key=00000;

を使うのかなと思うのですが、
どうやって書いたらいいのかわかりません。

どなたか教えてください!

投稿日時 - 2005-11-30 19:51:48

QNo.1811574

すぐに回答ほしいです

質問者が選んだベストアンサー

質問の内容から察するにJDBCの基礎がわかってる上での質問だと思っていたのですが、そうではなかったようで・・・。

>の「抽出結果」に値を格納する方法がわかれば、
>教えていただきたいのですが。。
この方法については他の回答者さんの回答どおりです。

JavaでDBをいじくる時に使うAPIの名前をJDBCって言います。
まずはSpiralGalaxyさんが提示しておられるサイトでJDBCがどんな物かを体験してみるのが手っ取り早いかと。
さらに「JDBC mysql」等のワードでググってみることをお勧めします。

投稿日時 - 2005-12-01 09:24:46

お礼

親切にたびたびの回答をありがとうございました。
おれいが遅くなり大変もうしわけありませんでした。
なんとか実行することができるようになりました。
JDBCについて知識不足で、せっかくの回答をすぐに生かすことができませんでしたが、これからもがんばろうと思います。

投稿日時 - 2006-01-21 19:23:19

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

insert処理を実行し、一意制約エラーの場合にのみ、updateをしてはどうでしょうか?
例えば、こんな感じです。
try {
  INSERT処理
} catch(SQLException e)
if (一意制約のエラー) {
UPDATE処理
} else {
throw e;
}
 }

投稿日時 - 2005-12-01 09:49:37

お礼

お礼が大変おそくなりましたが、
ありがとうございました。
教えてくださったように実行することができました。

投稿日時 - 2006-01-21 19:21:03

ANo.3

JavaとSQLがごっちゃになってます。

>select count(*) from table where key=00000;

これはSQL言語です。
Javaのコードではありませんので、コンパイルできません。
以下のサイトあたりを参考にすれば、いいでしょう。

http://www.hellohiro.com/jdbcmysql.htm

投稿日時 - 2005-11-30 21:56:05

お礼

JAVAとSQL、なにがなにだかわかりませんでしたが、
教えていただいたURLも参考にしながら、なんとか実行にこぎつけました。
お礼がほんじつまで遅くなってしまい、失礼いたしました。本当にありがとうございました。

投稿日時 - 2006-01-21 19:26:15

前提としてコネクション、ステートメントは取得していますでしょうか?

(1)SQLの結果はResultSetに格納します。
ResultSet rs = state.executeQuery("select count(*) from table where key=00000");
※stateはStatementのインスタンス

(2)上記の実行SQLでカウント結果を参照するには以下のような書き方になります。
int i = rs.getInt(1);

(3)上記で得た結果を比較して次処理に移ってください。

投稿日時 - 2005-11-30 20:32:32

お礼

ありがとうございました。
まったくわからない状態でしつもんしてしまい、すぐに
アドバイスいただいたことを反映することができなかったのですが、その後勉強しなおし、実行することができました。
ほんとうにありがとうございました。

投稿日時 - 2006-01-21 19:24:42

件数が1件限定ならば
select count(*) from table where key=00000
if (抽出結果=0) {
INSERT処理
}
else {
UPDATE処理
}
でいけると思います。

複数件だったら
・対象テーブルのキーをMapあたりに放り込んどいて
・読み込んだファイルのキーとぶつけて
・キーの有無でINSERT OR UPDATEの処理
って感じで私はやります。
バッチステートメントも必ず使用しますね。

あとはPL/SQL使ってやっちゃうとか。

他の人ってこういうの処理する時はどうしてるんでしょうね?
いろんな意見が聞きたいです。

投稿日時 - 2005-11-30 20:09:38

お礼

さっそくの回答ありがとうございます。

>select count(*) from table where key=00000
>if (抽出結果=0) {
>INSERT処理
>}
>else {
>UPDATE処理
>}

の「抽出結果」に値を格納する方法がわかれば、
教えていただきたいのですが。。

a = select count(*) from table where key=00000
if(a = 0 ){……

というふうに単純に書いてもだめだったので。。

投稿日時 - 2005-11-30 20:15:09

あなたにオススメの質問