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

Problema con INSERT en BD, Ayuda!

Estas en el tema de Problema con INSERT en BD, Ayuda! en el foro de Java en Foros del Web. Saludos. En mi reciente aprendizaje de java, estoy aprendiendo también como conectar el java con BDs access, mysql etc...estoy teniendo un problema y me gustaria ...
  #1 (permalink)  
Antiguo 10/04/2006, 17:46
 
Fecha de Ingreso: abril-2006
Mensajes: 6
Antigüedad: 18 años, 1 mes
Puntos: 0
Problema con INSERT en BD, Ayuda!

Saludos. En mi reciente aprendizaje de java, estoy aprendiendo también como conectar el java con BDs access, mysql etc...estoy teniendo un problema y me gustaria saber si me pueden dar un norte de por donde esta el problema.

Tengo un proyectito de prueba, que consta de 3 clases: ConexionAccess.java, Producto.java y Gui.java. todas operan en modo terminal (consola). Bien, el asunto es, que al Correr Gui.java Gui este envia efectivamente los datos a procesar a la clase Producto.java que contiene implementaciones getXXX, setXXX para los campos de la tabla "producto" de mi base de datos; Gui luego, hace un llamado a ConexionAccess.java con un atributo producto como parametro que es resultado de una instancia de la clase producto para un nuevo producto a insertar o bien procesar. Por ultimo, la clase ConexionAccess.java toma esos datos y (en teoria) los guarda en la tabla producto. El problema esque ,luego de verificar con algunos printlns en la clase ConexionAccess, si los datos en realidad llegan a la clase(lo cual si hacen efectivamente) por alguna razon extraña la instrucción no se ejecuta.

Los segmentos de codigo son estos:
(Gui.java enviando datos)

try{
Producto producto = new Producto();
producto.setId("1");
producto.setDesc("estufa");
producto.setPrecio("100");
producto.setStock("200");
System.out.println("enviando datos...");
cnxA.agregarProducto( producto );
}

Hasta aqui todo funciona bien.....luego,

(ConexionAccess.java recibe efectivamente, pero executeUpdate() no actualiza el string sql):

public void agregarProducto(Producto producto) throws SQLException
{
try
{
System.out.println("iniciando...");
conexion.setAutoCommit(false);
String sql = "insert into producto(id,desc,precio,stock) values (?,?,?,?)";
PreparedStatement preparedStatement = conexion.prepareStatement(sql);
System.out.println("recogiendo datos...");
preparedStatement.setString(1,producto.getId());
preparedStatement.setString(2,producto.getDesc());
preparedStatement.setString(3,producto.getPrecio() );
preparedStatement.setString(4,producto.getStock()) ;
System.out.println(producto.getId());
System.out.println(producto.getDesc());
System.out.println(producto.getPrecio());
System.out.println(producto.getStock());

System.out.println("datos obtenidos");
System.out.println(sql); /*a ver si se actualiza*/

preparedStatement.executeUpdate();

System.out.println(sql); /*otra vez a ver si se actualiza pero no lo hace*/
System.out.println("guardado...");
conexion.setAutoCommit(true);
conexion.commit();
System.out.println("guardado...");
preparedStatement.close();

}

catch(SQLException sqex)
{
conexion.rollback();
conexion.close();
}
finally{};
}

Pero ninguna instrucción se ejecuta luego del preparedStatement.executeUpdate();

algo pasa que no se termina de ejecutar el resto de lineas, aunque el programa en compilacion y ejecucion no devuelve ningun error.

No sé si en la seccion que escribi String sql = "insert into producto(id,desc,precio,stock) values (?,?,?,?)"; radica el problema, y si sea correcto usar el ?,?,?,? que usé.

Agradezco de antemano su ayuda con el tema.

Luiyi.
  #2 (permalink)  
Antiguo 11/04/2006, 01:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
algo pasa que no se termina de ejecutar el resto de lineas, aunque el programa en compilacion y ejecucion no devuelve ningun error.


¿Como va a devolver ningun error si tienes un catch(SQLException sqex) que captura los "errores" y no muestra ningun mensaje de error? Eso es algo que no se debe hacer casi nunca .
  #3 (permalink)  
Antiguo 12/04/2006, 13:30
 
Fecha de Ingreso: marzo-2006
Mensajes: 6
Antigüedad: 18 años, 2 meses
Puntos: 0
pones setString.....todos tus campos son string?
  #4 (permalink)  
Antiguo 12/04/2006, 14:06
 
Fecha de Ingreso: marzo-2006
Mensajes: 61
Antigüedad: 18 años, 1 mes
Puntos: 0
Eso tiene razon, tienes que ver si tus campos de la tabla de la BD son de tipo VARCHAR, porque por ahi podria ir el error.

Voy a revisar tu codigo mas pausadamente...

Esop

Patricio
  #5 (permalink)  
Antiguo 12/04/2006, 14:09
 
Fecha de Ingreso: marzo-2006
Mensajes: 61
Antigüedad: 18 años, 1 mes
Puntos: 0
Capaz que:

preparedStatement.setString(1,producto.getId());
preparedStatement.setString(2,producto.getDesc());
preparedStatement.setString(3,producto.getPrecio() );
preparedStatement.setString(4,producto.getStock()) ;

producto.getStock(), producto.getPrecio, producto.getDesc() sean de tipo int y por eso que no te lo acepta.

Usa la herramienta de debug que trae el programa con que tu estas compilando.

Esop

Patricio
  #6 (permalink)  
Antiguo 12/04/2006, 14:18
 
Fecha de Ingreso: abril-2006
Mensajes: 6
Antigüedad: 18 años, 1 mes
Puntos: 0
Saludos. He solucionado el problema y curiosamente no era el codigo java, sino la sentencia SQL. Resulta que por ahi en algun ejemplo por la red vi que puede hacerse esto: "insert into producto(id,desc,precio,stock) values ('1','horno','4500','4')";

Y luego de poner un printStackTrace(); como me sugierieron anteriormente, pude ver que el error se originaba justamente en el string sql. He cambiado la sentencia de esa estructura anterior a: "insert into producto values('1','horno','4500','4')"; Y el error ha sido solucionado. Esto es si no estoy mal la escritura estandar del SQL y el modelo anterior es el que usa MySQL para su sintaxis particular. La verdad no se porque habia un ejemplo java para ACCESS con ese tipo de sintaxis que si bien no sirve para ACCESS, tampoco para MySQL.

Posteriormente he cambiado los tipos de campo de mi tabla, y adecuado las pertinentes instrucciones setInt, setString, etc para los distintos tipos, y todo ha funcionado perfectamente.

Gracias por la atención y ayuda.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 22:54.