2017-01-14 7 views
1

Derbyデータベースからテーブルに新しいレコードを追加しようとしています。そのフィールドの1つでレコード番号を使用する必要があります。例えば。写真のフィールドに画像のパスを保存する必要があります。画像の名前はIDに対応していなければなりません。例えば1.jpg。私は(ファイルの拡張子は、この例で使用されていません)この文をしようとしていた。SQL文でgenerated idを使用するには?

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, lastname, email, address, password, photo, lastvisit, status) VALUES ('" + name + "','" + lastname + "','" + email + "','" + address + "','" + DigestUtils.toMd5(password) + "', id, '" + now + "','user')"); 

しかし、私はエラーを取得:java.sql.SQLSyntaxErrorExceptionを:列「ID」がないか、リストから任意のテーブルです。 .. しかし、この列は間違いなく存在します。エラーの原因は何ですか?

+7

無関係ですが、適切に 'PreparedStatement' **を使用する方法を学んでください。値をSQL文字列に連結しないでください。代わりにプレースホルダ( '?')を使用してください。 –

+0

新しく作成した 'Users'レコードのユーザIDが42の場合、' photo'の値を '' 42 .jpg 'にしたいのですか?そうであれば、insert文が新しいIDを返すか、またはトリガーでそれを行う必要があるかのいずれかのupdate文が必要です。 – Andreas

+0

生成されたIDを取得する方法については、http://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbcを参照してください。その後、その値を後続のステートメントで使用します。 –

答えて

1

まあ、短い答えは、あなたはSQLでそれをすることはできません。 あなたのテーブルのユーザでは、あなたのidカラムが自動インクリメントの主キーだと思います。あなたができることはあなたのレコードを挿入し、この挿入ステートメントのために生成された最後のIDを取得することです。次に、写真の列の値を設定する更新クエリを実行する必要があります。ところで

は、間違いなく私はダービーの専門家ではないが、私はあなたが生成された列を取得することができますどのように見つけドキュメントを閲覧するプリペアドステートメントに

をプレースホルダを使用することを学びます。

pstmt.execute(sql, Statement.RETURN_GENERATED_KEYS); 
ResultSet keys = pstmt.getGeneratedKeys(); 
keys.next(); 
int id = keys.getInt(); 
関連する問題