- - PR -
同じデータベースへ連続してINSERTできない
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-04-21 14:08
こんにちはnabeママです。また皆さんのお知恵を拝借させて下さい。
同じデータベースに連続してINSERTしようとしてるのですが、最初の1件は出来るのですが2件以降、INSERTされません。どこがおかしいのでしょうか? for (int i=0; i<List.length; ++i) { try { con = DriverManager.getConnection("jdbc:odbc:DocMDB"); stmt = con.createStatement(); stmt.executeUpdate("INSERT INTO TB ( ID, Cat, No, Kubun ) values values("nabe", "05", 100, 0)); } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); } catch (Exception e) {} try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} } } こう書きました。よろしくお願いします。 |
|
投稿日時: 2003-04-21 14:17
どのようなエラーが表示されたのか明記されないと 答えようがないです。
あるいは 回答をする人が限られます。 しいて答えると 、キーが重複しているのでは?したがって主キーの値を毎回変えれば、よいのでは? |
|
投稿日時: 2003-04-21 14:25
nabeママさん、こんにちは。
エラーとかは発生していないのでしょうか? エラーの原因は 七味唐辛子 さんがかかれてるようなことかな ?? あと、一般論として getConnection() や createStatement() は外にループの外に出して 1度だけ実行し、ループ内では同じ stmt を使いまわすのが良いと思います。 このプログラムだと、毎回 DB接続、解除をしているのでCPUリソースをすごく無駄に使う事になると思います [ メッセージ編集済み 編集者: yuu 編集日時 2003-04-21 14:27 ] [ メッセージ編集済み 編集者: yuu 編集日時 2003-04-21 14:30 ] |
|
投稿日時: 2003-04-21 14:53
nabeママです。そうそうありがとうございます。
すみません。書き方がまずかったです。 リストボックスで選択された分だけ、DBに追加しており、 stmt.executeUpdate("INSERT INTO TB ( ID, Cat, No, Kubun ) values ("nabe", "05", 100, 0)); の"nabe"が変わります。ですからキーの重複ではないと思います。 エラーは } catch (Exception e) { out.println("DB処理エラー"); e.printStackTrace(); } のように書いた場合、ブラウザに「DB処理エラー」と出ます。 これがなければエラーが表示されません。(でもDBにはINSERTされてません) yuuさんのおっしゃるとおり最初は、getConnection() や createStatement() をループの外に出して 1度だけ実行し、ループ内はSQLの実行だけにしていたのですが、質問のように最初の1件しかINSERTできなかったのでだめなのかなぁと思いました・・・ 一般論はそうですよね。 となるとSQLの書き方がまずいのでしょうか・・・ |
|
投稿日時: 2003-04-21 14:58
失礼します。
ループの中でコネクションを切ってませんか? finallyにそれらしいことが書かれていますが。 接続はループの外→切断はループの中だと、 2回目のループで切断されているのにINSERTに行こうとして 失敗すると思いますが。 |
|
投稿日時: 2003-04-21 15:55
おつかれさまです 〜〜
} catch (Exception e) { out.println("DB処理エラー"); e.printStackTrace(); } e.printStackTrace(); にはエラー原因につながる情報が含まれているでしょうから それを、out に(ログファイルでも良いですが) に出力出来るようにしましょう。 JDK APIドキュメントの Throwable クラス(Exceptionの親クラス)を見ればヒントになると思います。 焼きそば さん、そうですね getConnection() 等をループの外に出す場合は close も ループの外に出さないとダメですね ^^); nabeママさん Good Luck! |
|
投稿日時: 2003-04-21 16:12
yuuさんのコードに補足すると
} catch (SQlException e) { out.println("DB処理エラー"); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } こちらの方がより明示的だと思います。 [ メッセージ編集済み 編集者: 七味唐辛子 編集日時 2003-04-21 16:13 ] |
|
投稿日時: 2003-04-21 16:49
nabeママです。
みなさん本当にありがとうございます。 yuuさんのコメントをヒントにエラーをoutしましたら、七味唐辛子さんの最初のご指摘どおり、キーが重複しているとのこと。 おかしいなと思ってDBの設計を確認したら、キーの設定で重複ありになっていなかったことが原因でした。 改めて皆様に私のふがいなさをお詫びいたします。 yuuさんのエラーをoutする方法は知らなかったのでこれから気をつけてoutするようにしたいと思います。 ありがとうございました。m(__)m |