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

解決済みの質問

select count(*)の結果に1を足したものを、主キーにしようとしています

プログラミング初心者です。
よろしくお願い致します。
主キーになる列がないので、行No列を作り
select count(*)でレコード数を取得後+1したものを、
insertで登録しようとしていますがうまくいきません。
間違っているところなど、ご指摘いただきたいです。

// Oracle JDBC Driverのロード
Class.forName("oracle.jdbc.driver.OracleDriver");

// データベースへ接続
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","HR","redhat");


// ステートメントを作成
smt = con.createStatement();
// 変数zにレコード数を入れる
    int z = getint("select count(*) from money");
// 変数z(現在のレコード数)+1
z = z + 1;
// SQLを実行して結果を得る
int row_count = smt.executeUpdate("insert into money (key_number, month, day, subject, from_place, to_place, traffic, place, naiyou, money) values ('" + z +"','" + A1 +"','" + B1 + "','" + C1 + "','" + D1 + "','" + E1 + "','" + F1 + "','" + G1 + "','" + H1 + "','" + I1 + "')");

投稿日時 - 2009-02-26 10:40:17

QNo.4750318

すぐに回答ほしいです

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

これ、コンパイルできないでしょう・・・

せめて動くコード書きましょうよ。

ResultSet result = smt.executeQuery("select count(*) as count from money");
int z = 0;
while(result.next()){
z = result.getInt("count");
}

投稿日時 - 2009-02-26 10:56:43

お礼

動きました!
ありがとうございますm(__)m

まだ、書かれていることの内容が理解できていないので
きちんとわかるようにしておきたいと思います。

投稿日時 - 2009-02-26 11:18:00

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

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

回答(4)

ANo.4

「初心者」と書いてあったのであえて突っ込みませんでしたが、No2,No3さんの回答のように場合によっては同じキーのレコードが作成される場合があります。

そのうち困るかハマれば気づくと思いますので詳しくは説明しません。
(調べればいくらでも情報は転がっているので)

業務アプリなんかでは絶対にやっちゃいけないつくりですね。

投稿日時 - 2009-02-26 12:56:13

ANo.3

どこでどううまくいかないのか。
エラーメッセージ等提示してください。

気づいた点
・key_numberが数値とかの型ならzのシングルクォテーションはいらない気がするけど。
・単純にキーを重複させたくないのなら、シーケンスを使った方がいい
・select countでキーを決めた場合
 ・レコード削除するとキーが重複する可能性がある
 ・同時に複数のアクセスがあるとキーが重複する可能性がある
(下の方はjavaの作り方次第だけどね。)

投稿日時 - 2009-02-26 11:06:01

ANo.2

ソースコードに関しては、他のHP等を参考にしてみては?

あと、主キーとのことですが、count(*) + 1では重複する可能性がありますよね。Oracleであれば、シーケンスを使用してみては?

投稿日時 - 2009-02-26 11:01:25

あなたにオススメの質問