- ベストアンサー
JAVAでテーブルの中身を見て、処理を分岐させるには
JAVA初心者です。 JAVAで、ファイルから読み込んだデータをMySQLのテーブルに格納したいのですが、 すでにテーブルにある(キーが同じ)ならば、updateをし、 テーブル内同じキーのものがなければ、insertをしたいのですが、分岐条件の部分をどうやってかいたらよいのかわからず、上手くかけません。 select count(*) from table where key=00000; を使うのかなと思うのですが、 どうやって書いたらいいのかわかりません。 どなたか教えてください!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問の内容から察するにJDBCの基礎がわかってる上での質問だと思っていたのですが、そうではなかったようで・・・。 >の「抽出結果」に値を格納する方法がわかれば、 >教えていただきたいのですが。。 この方法については他の回答者さんの回答どおりです。 JavaでDBをいじくる時に使うAPIの名前をJDBCって言います。 まずはSpiralGalaxyさんが提示しておられるサイトでJDBCがどんな物かを体験してみるのが手っ取り早いかと。 さらに「JDBC mysql」等のワードでググってみることをお勧めします。
その他の回答 (4)
- OkinawaDream
- ベストアンサー率54% (6/11)
insert処理を実行し、一意制約エラーの場合にのみ、updateをしてはどうでしょうか? 例えば、こんな感じです。 try { INSERT処理 } catch(SQLException e) if (一意制約のエラー) { UPDATE処理 } else { throw e; } }
お礼
お礼が大変おそくなりましたが、 ありがとうございました。 教えてくださったように実行することができました。
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
JavaとSQLがごっちゃになってます。 >select count(*) from table where key=00000; これはSQL言語です。 Javaのコードではありませんので、コンパイルできません。 以下のサイトあたりを参考にすれば、いいでしょう。 http://www.hellohiro.com/jdbcmysql.htm
お礼
JAVAとSQL、なにがなにだかわかりませんでしたが、 教えていただいたURLも参考にしながら、なんとか実行にこぎつけました。 お礼がほんじつまで遅くなってしまい、失礼いたしました。本当にありがとうございました。
- chuckcavaness
- ベストアンサー率53% (7/13)
前提としてコネクション、ステートメントは取得していますでしょうか? (1)SQLの結果はResultSetに格納します。 ResultSet rs = state.executeQuery("select count(*) from table where key=00000"); ※stateはStatementのインスタンス (2)上記の実行SQLでカウント結果を参照するには以下のような書き方になります。 int i = rs.getInt(1); (3)上記で得た結果を比較して次処理に移ってください。
お礼
ありがとうございました。 まったくわからない状態でしつもんしてしまい、すぐに アドバイスいただいたことを反映することができなかったのですが、その後勉強しなおし、実行することができました。 ほんとうにありがとうございました。
- hanazawa-love
- ベストアンサー率13% (8/61)
件数が1件限定ならば select count(*) from table where key=00000 if (抽出結果=0) { INSERT処理 } else { UPDATE処理 } でいけると思います。 複数件だったら ・対象テーブルのキーをMapあたりに放り込んどいて ・読み込んだファイルのキーとぶつけて ・キーの有無でINSERT OR UPDATEの処理 って感じで私はやります。 バッチステートメントも必ず使用しますね。 あとはPL/SQL使ってやっちゃうとか。 他の人ってこういうの処理する時はどうしてるんでしょうね? いろんな意見が聞きたいです。
お礼
さっそくの回答ありがとうございます。 >select count(*) from table where key=00000 >if (抽出結果=0) { >INSERT処理 >} >else { >UPDATE処理 >} の「抽出結果」に値を格納する方法がわかれば、 教えていただきたいのですが。。 a = select count(*) from table where key=00000 if(a = 0 ){…… というふうに単純に書いてもだめだったので。。
お礼
親切にたびたびの回答をありがとうございました。 おれいが遅くなり大変もうしわけありませんでした。 なんとか実行することができるようになりました。 JDBCについて知識不足で、せっかくの回答をすぐに生かすことができませんでしたが、これからもがんばろうと思います。