servletとPostgreSQLでinsertのsql文を発行しました。今回のinsertがどの行のプライマリキーにされたのか知る方法を教えてください。

ソースは以下のような感じです。
Class.forName( ”org.postgresql.Driver” );
Connection con = DriverManager.getConnection(
”jdbc:postgresql:xxx”, ”xxxxxxx”, ”xxxxxxxk” );
Statement stmt = con.createStatement();
String sql = ”insert into (”〜”) VALUES(”〜”)”;
stmt.executeUpdate( sql );
stmt.close();
con.close();

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/04/26 17:20:57
  • 終了:--

回答(2件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472004/04/26 17:53:01

ポイント25pt

ちょっとトリッキーかもしれませんが、プリマリーキーになるフィールドが serial 型であれば、

そのフィールドのデフォルト値として使われているシーケンス値を使う方法があります。

BEGIN;

INSERT INTO test (data) VALUES (’test’);

SELECT currval(’test_id_seq’);

COMMIT;

http://php.s3.to/man/function.pg-last-oid.html

直近の行のオブジェクト ID を返す

PHP や他の言語でも、OID というフィールドで、今 INSERT したレコードを特定できる値を

取得できます。ただ、JDBC で取得できるかどうかは分かりませんでした(多分、無理?)。

ただし、そのテーブルが CREATE TABLE 時に WITHOUT OIDS が指定されているテーブルには

使えません。

また、OID をユニークキーの様に扱うことは、あまり推奨できない(将来にわたって、

使えるかどうかは分からない)といったことを読んだことがあります。

id:kunitz

ありがとうございます!

2004/04/26 18:01:47
id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472004/04/27 16:07:35

ポイント25pt

私自身は Java に疎いので、細かいことは分かりませんが、前述の oid を

Java で取得する方法はあるようです。

id:kunitz

ありがとうございます!

2004/04/27 16:15:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません