Ok, this works on both mysql and postgres.

On mysql the column name ends up being "GENERATED_KEY".
This commit is contained in:
Ray Greenwell
2014-05-02 01:31:58 +00:00
parent e2a9702c46
commit 1a9fc404ba
@@ -6,6 +6,7 @@ package com.samskivert.depot.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
@@ -45,11 +46,13 @@ public class IdentityValueGenerator extends ValueGenerator
// if this JDBC driver supports getGeneratedKeys, use it!
if (stmt != null && conn.getMetaData().supportsGetGeneratedKeys()) {
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
try {
return rs.getInt(column);
} catch (SQLException e) {
log.info("Unable to get generated key, falling back", "errmsg", e.getMessage());
while (rs.next()) {
ResultSetMetaData rsMetaData = rs.getMetaData();
int columnCount = rsMetaData.getColumnCount();
for (int ii = 1; ii <= columnCount; ii++) {
if (column.equals(rsMetaData.getColumnName(ii))) {
return rs.getInt(ii);
}
}
}
}