Problema:
Tras hacer un INSERT en una tabla de Informix que contiene campos del tipo SERIAL nos encontramos con que tras realizarlo, tenemos todos los datos del registro excepto los autogenerados por la base de dato.
Solución:
// Por CNG (www.trapallada.com). PreparedStatement preparedStatement = null; ResultSet resultSet = null; String queryString = "INSERT INTO " + TABLA + " (" + CAMPOS + ") VALUES ( ?,?,?,? )"; preparedStatement = conn.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS); int i = 1; // El primer campo de la tabla es SERIAL preparedStatement.setInt(i++, 0); preparedStatement.setString( i++, vo.getCampo2() ); preparedStatement.setString(i++, vo.getCampo3() ); preparedStatement.setString(i++, vo.getCampo4() ); int insertedRows = preparedStatement.executeUpdate(); resultSet = preparedStatement.getGeneratedKeys(); resultSet.next(); vo.setCampo1( resultSet.getInt(1) );
En el momento de crear el
PreparedStatement
incluimos el parámetro Statement.RETURN_GENERATED_KEYS
para indicarle a la aplicación que recupere los valores de los SERIAL
generados por la base de datos.Tras ejecutar el
INSERT
, se recupera un ResultSet
con los campos SERIAL
generados con el método getGeneratedKeys()
del PreparedStatement
.Tras eso, accedemos al
ResultSet
para obtener los valores.
GRACIAS!! Me habeis salvado la vida.
ResponderEliminarMuchas gracias ^^
Muchas Gracias !
ResponderEliminarMe ha sido de Gran Ayuda