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

Java, PreparedStatement y Oracle

Estas en el tema de Java, PreparedStatement y Oracle en el foro de Java en Foros del Web. Buenas, Estoy realizando una aplicación en Java cuya base de datos está en Oracle. Mi problema es que al intentar insertar algunos campos en la ...
  #1 (permalink)  
Antiguo 30/04/2010, 13:37
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 18 años, 2 meses
Puntos: 0
Java, PreparedStatement y Oracle

Buenas,

Estoy realizando una aplicación en Java cuya base de datos está en Oracle.
Mi problema es que al intentar insertar algunos campos en la BD provenientes de variables, si estos tienen caracteres especiales me da problemas.

He leído que esto te lo soluciona PreparedStatement y para ello ejecuto el siguiente código:

Código PHP:
java.sql.PreparedStatement pstmt con.prepareStatement("insert into suscripciones values ('" direccionXML "', '" nombre "')");
                    
pstmt.executeUpdate();
                    
pstmt.close(); 
Las entradas sin caracteres especiales las inserta sin problemas, sin embargo las que sí los tienen me da la excepción:

java.sql.SQLException: ORA-02291: restricción de integridad (SYSTEM.FK_DESCARGAS) violada - clave principal no encontrada

He leído también que hay que decirle al driver que tiene que usar PreparedStatement, pero sólo he encontrado la forma de hacerlo para MySQL.

Me he pateado google pero no encuentro nada para Oracle.

Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 30/04/2010, 14:38
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Java, PreparedStatement y Oracle

Segun el mensaje de error, tu problema no tiene que ver con caracteres especiales sino con que estas insertando un registro en una tabla que tiene una foreign key con otra tabla y el registro referenciado no existe.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 01/05/2010, 03:09
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Java, PreparedStatement y Oracle

Lo siento, me equivoqué al copiar el código. Puse la inserción de suscripciones y de lo que hablaba era de la inserción de descargas. Es decir, el problema me lo da al insertar una descarga y no encontrar la clave dentro de esa misma tabla, nada que ver con otras tablas.

Código PHP:
java.sql.PreparedStatement pstmt con.prepareStatement("insert into descargas values (?, ?, ?)");
                    
pstmt.setString(1nombre_archivo);
                    
pstmt.setString(2nombre);
                    
pstmt.setString(3suscripcionDireccionXML);
                    
pstmt.executeUpdate();
                    
pstmt.close(); 
Además, si lo hago con Statement la excepción obtenida es:

java.sql.SQLException: ORA-00917: falta la coma

Y efectivamente, hay una comilla simple en el atributo nombre.
  #4 (permalink)  
Antiguo 01/05/2010, 10:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Java, PreparedStatement y Oracle

Es mejor usar PreparedStatement y poner el valor de los parametros con setString(), setXXX ya que así el driver se encarga de los caracteres especiales. Es más seguro y más "robusto".

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 02/05/2010, 09:24
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Java, PreparedStatement y Oracle

Pero es que eso es lo que hago... y como he dicho, cuando no hay caracteres especiales funciona perfectamente, pero si los hay da problemas como la excepción que indico arriba.
  #6 (permalink)  
Antiguo 02/05/2010, 12:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Java, PreparedStatement y Oracle

La verdad es que me he perdido, dices que si lo haces con "Statement" te hace x... pero el código que muestras es con PreparedStatement, y la excepción que has mostrado antes es de una Foreign Key. Esta es de que falta una coma, pero no te deberia dar con PreparedStatement así que no se a que te refieres.
Empecemos de cero: Pon el trozo de codigo que usas, los valores de los parametros y a continuación que excepción te da. Por separado si tienes más de una version.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: oracle
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 02:59.