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