人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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();

●質問者: kunitz
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Class JDBC postgreSQL Servlet SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●25ポイント

http://www.postgresql.jp/document/pg742doc/html/functions-sequen...

ちょっとトリッキーかもしれませんが、プリマリーキーになるフィールドが 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 をユニークキーの様に扱うことは、あまり推奨できない(将来にわたって、

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

◎質問者からの返答

ありがとうございます!


2 ● JULY
●25ポイント

http://ml.postgresql.jp/pipermail/pgsql-jp/2002-September/002386...

[pgsql-jp: 27244] Re: JDBCでgetlastoid

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

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

◎質問者からの返答

ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ