Foros del Web » Programación para mayores de 30 ;) » Java »

problema con un preparedStatement

Estas en el tema de problema con un preparedStatement en el foro de Java en Foros del Web. Buen día, tengo un problema con el siguiente código: Las sentencias SQL .- strSQL = "INSERT INTO BANORTE.jvote_preguntas(pregunta,estatus,fecha_ult _modif) VALUES(?,?,?)"; .- strSQL2 = "SELECT pregunta_id ...
  #1 (permalink)  
Antiguo 11/12/2007, 08:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 4 meses
Puntos: 0
problema con un preparedStatement

Buen día, tengo un problema con el siguiente código:
Las sentencias SQL
.- strSQL = "INSERT INTO BANORTE.jvote_preguntas(pregunta,estatus,fecha_ult _modif) VALUES(?,?,?)";
.- strSQL2 = "SELECT pregunta_id FROM BANORTE.jvote_preguntas WHERE pregunta = ? AND fecha_ult_modif = ?";
.- strSQL3 = "INSERT INTO BANORTE.Respuestas(pregunta_id,opcion,respuesta) VALUES (?,?,?)";

El Codigo:
objFecha = new Date();
long lngTiempo = objFecha.getTime();
objTimeStamp = new java.sql.Timestamp(lngTiempo);

objCon = Conexion.makeConnection();
try {
//INSERTA PREGUNTA DE LA ENCUESTA
System.out.println("objTimeStamp = " + objTimeStamp.toString());
objPsm = objCon.prepareStatement(strSQL);
//objPsm.setInt(intIndice,0);
objPsm.setString(intIndice,strPregunta);
objPsm.setString(++intIndice,objEncuestaBean.getSt rStatus());
objPsm.setTimestamp(++intIndice,objTimeStamp);
intResultado = objPsm.executeUpdate();

//OBTIENE EL ID DE LA PREGUNTA
intIndice = 1;
System.out.println("objTimeStamp = " + objTimeStamp.toString());
objPsm = null;
objPsm = objCon.prepareStatement(strSQL2);
System.out.println("objPsm = " + objPsm.toString());
objPsm.setString(intIndice,strPregunta);
objPsm.setTimestamp(++intIndice,objTimeStamp);
/*intResultado = objPsm.executeUpdate();*/
objRs = objPsm.executeQuery();
System.out.println("objRs.next() = " + objRs.next());
while(objRs.next()){
intPreguntaId = objRs.getInt(1);
}

//INSERTA LAS OPCIONES DE LA PREGUNTA
Iterator objIterador = arrayOpciones.iterator();
objPsm = objCon.prepareStatement(strSQL3);
while(objIterador.hasNext()){
intIndice = 1;
objOpcResBean = (OpcionRespuestaBean)objIterador.next();
objPsm.setInt(intIndice,intPreguntaId);
objPsm.setString(++intIndice,objOpcResBean.getStrO pcion());
System.out.println("objOpcResBean = " + objOpcResBean.getStrOpcion());
objPsm.setInt(++intIndice,objOpcResBean.getIntResp uesta());
intResultado = objPsm.executeUpdate();
System.out.println("intResultado = " + intResultado);
}
Tengo 2 tablas Preguntas (padre) y respuestas (hijo) y el codigo anterior petende insertar la pregunta con sus opciones. La insercion funciona correctamente, pero cuando intento obtener el ID de la pregunta el select no trae nada en absoluto. por lo que las opciones se guardan con n Id de pregunta 0. Si alguien puede ayudarme y decir como puedo resolver este problemita lo agradezco. Ya he probado haciendo commit, cerrando la conexion y volviendola a crear y nada. Que puedo hacer?

Gracias de antemano por la ayuda

se me olvidó algo importante, estoy trabajando con java 1.5, jdbc14.jar, oracle 10g y apache tomacat 5.5

Última edición por angel3d3; 11/12/2007 a las 08:46
  #2 (permalink)  
Antiguo 16/12/2007, 00:38
 
Fecha de Ingreso: mayo-2001
Mensajes: 452
Antigüedad: 22 años, 11 meses
Puntos: 1
Re: problema con un preparedStatement

Creo que debieras recuperar por el MAX id de tu llave primaria para saber el ultimo registro agregado, con algo como:

SELECT max(campoLlave) as valorNuevo FROM tabla

y ya luego VALOR NUEVO es lo que insertarias como llaves foraneas en las tablas "hijo"

Para esto debes tener un campo automatico que se incremente en 1, o autonumerico si tu base de datos lo permite (sql serve, access, mysql, DB2)
__________________
Si necesitas los servicios de un programador ASP, JSP, HTML, JavaScript, ActionScript, o una aplicacion en Visual Basic o Delphi, enviame un email a [email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:26.