PostgreSQL - ERROR con serial en Postgresql tabajando con java

 
Vista:

ERROR con serial en Postgresql tabajando con java

Publicado por javier (1 intervención) el 28/07/2009 17:06:48
tengo un problemon, asi que acudo a ustedes para ver si me pueden salvar. Mi problema es el siguiente: tengo "clientes" dividido en dos tablas "clientes" y "clientes2". la primera lleva un serial como ID y la seguna lleva un Integer como ID que es foranea del ID de "clientes"(o sea de la primera). La tabla la tuve que dividir por fuerzas mayores. Hasta ahi vamos bien...
Para trabajarlas con java manejo dos Statement(TYPE_SCROLL_SENSITIVE, CONCUR_UPDATEABLE), y manejo dos Resultset(uno por cada tabla), todo con la misma conexion(setAutoCommit(false)).Seguimos....
El tema es que al realizar un INSERT (antes de realizar el conexion.commit()), en la tabla "clientes" no me devuelve el numero tipo serial del ID, para poder realizar el INSERT del otro resultset. El error es el siguiente:
org.postgresql.util.psqlexception: ERROR: insert or update on table "clientes2" violates foreign key constraint "clientes2_fk_clientes" Detail: Key (idcliente)=(0) is not present in table "clientes".
yo reviso en el pgAdmin y me llena la tabla "clientes" con su respectivo ID(tipo serial) pero es como si no lo refrescara cuando relizo el insert de "clientes" para luego hacer que me devuelva su id y cargarlo en el insert de "clientes2" y luego hacer un commit. como no se si me explico dejo la parte del codigo donde creo los statement, los resultset y realizo los insert:
try{

stmt1=conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
stmt2=conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs1=stmt1.executeQuery("SELECT * FROM clientes LIMIT 0 FOR UPDATE");
rs2=stmt2.executeQuery("SELECT * FROM clientes2 LIMIT 0 FOR UPDATE")
rs1.insertRow();
int idCli = rs1.getInt("idcliente");
rs2.updateRow("idcliente", idCli);
rs2.insertRow;
conexion.commit();

}catch(SQLException e){e.printStackTrace}
el esta muestra no pongo de donde cargo los demas registros de los resultset porque seria unas 200 linea mas. pero las realizo todas de la siguiente forma:
rs.updateString("columnaAlgo","algo");
y asi con todos y lugo realizo el codigo anterior dentro del try();
La verdad que alguna solucion o idea seria muy valiosa ya que no encontre casi documentacion en Internet y ya revise paginas en varios idiomas.
Desde ya se agradece.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder