2010-11-18 16 views
0

IDENTITYフィールド以外のJavaでデータベース生成値を取得する方法はありますか?私は簡単にResultSetからIDENTITY値を得ることができますが、データベース(CURRENT_TIMESTAMP)によって生成された日付フィールドの値を取得したいと思います。私は日付を取得する別のSELECTクエリを送信しないことを好む。ResultSetの一部としてCURRENT_TIMESTAMPを取得

statement = connection.prepareStatement("INSERT INTO foo (bar_date) VALUES (CURRENT_TIMESTAMP)"); 
ResultSet generatedKey = statement.getGeneratedKeys(); 
while (generatedKey.next()) { 
    // read the key..., this unfortunately only returns IDENTITY columns. 
} 

答えて

0

を見てください、あなたが持っているあなたのinsert文にOUTPUT句を追加することができ

INSERT INTO foo (bar_date) 
OUTPUT INSERTED.bar_date 
VALUES (CURRENT_TIMESTAMP) 

のようなものを試してみました結果セットを返します。

私は結果セットを取得するJava構文のわからないんだけど、それは次のようになります。

statement = connection.prepareStatement("INSERT INTO foo OUTPUT inserted.id, inserted.bar_date (bar_date) VALUES (CURRENT_TIMESTAMP)"); //guessing the name of the id column 
ResultSet returnSet = statement.execute(); // or however you do this 
while (resultset.next()) { 
    // resultset will have two columns - id and bar_date 
} 
+0

偉大な、うまく動作します。私はこれを行うためのデータベースに依存しない方法はないと仮定します( Max

+0

@Max - OUTPUT節はANSI標準の一部ではないように見えるので、SQLサーバーのみです。他のデータベースエンジンは独自の実装を持つことができます。 Oracleには 'RETURNING'があります。これはPostgresも実装しています。 2005年以前のMSSQLやsqliteに相当するものはありません。最も移植性の高い方法は、結果セット(または出力パラメータ)を返すストアドプロシージャ内でロジックをラップすることですが、各RDBMSのSP実装の違いによりデータベースには依存しません。 –

+0

もう一度ありがとうございます。私はそれを考慮に入れます。 – Max

2

はあなたがSQL 2005以降を使用していると仮定すると、OUTPUT Clause (Transact-SQL)

+0

おかげで、それは私が探していたまさにです。 – Max