プロが教えるわが家の防犯対策術!

プログラミング初心者です。
よろしくお願い致します。
主キーになる列がないので、行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 + "')");

A 回答 (4件)

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



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

ResultSet result = smt.executeQuery("select count(*) as count from money");
int z = 0;
while(result.next()){
z = result.getInt("count");
}
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2009/02/26 11:18

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



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

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

どこでどううまくいかないのか。


エラーメッセージ等提示してください。

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

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



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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!