From 1a9fc404bad3bce2f08cd9af44ceb5fbd66811b3 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Fri, 2 May 2014 01:31:58 +0000 Subject: [PATCH] Ok, this works on both mysql and postgres. On mysql the column name ends up being "GENERATED_KEY". --- .../depot/impl/IdentityValueGenerator.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java b/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java index 1bab389..07e03e7 100644 --- a/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java +++ b/src/main/java/com/samskivert/depot/impl/IdentityValueGenerator.java @@ -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); + } } } }