Insert文発行とSerial値

今回はミニTIPSです。

Postgresqlでは、主キーの値を自動採番する場合は、カラムの型をserialにします。

insert時にserial値が自動採番されます。

プログラムの中でSerial値を取得して使いたい場面が良く出て来ます。

よくあるのが、insert文の後にselect 文を発行して採番された値を取得したりしますが、

SQLを2回発行することになり効率がよくないです。

SQL1回の発行でSerial値を取得する方法を紹介します。

RETURNING 句の利用

postgresqlでは、insert文の後にreturning句を使用することで、列の値を戻してくれます。

insert into テーブル名 values(列値、列値、・・・・) returning id;

instert文を上記のように書いておき、insert文のsqlに対してPreparedStatementのexecuteQuery()メソッドを呼んで

Resultを取得します。ResultSetの中に取得したSerial値が入っています。

Javaのサンプルコードは以下のようになります。(コネクションの取得などの処理は割愛しています。)

String sql = "INSERT INTO SAMPLE (col1,col2,col3,col4) VALUES(?,?,?,?) returning reserve_no";  
PreparedStatement ps = co.prepareStatement(sql);  

ps.setString(1, "A"); 
ps.setString(2, "B"); 
ps.setString(3, "C"); 
ps.setString(4, "D");  
ResultSet rs =ps.executeQuery(); 
rs.next(); 
//Serial値の取得
System.out.println(rs.getInt(1));