| |||
Problema al insertar un array en una base de datos sql Buenas, estoy haciendo una aplicacion que inserta los valores de un array que vienen de un objeto, mi problema es que el array es de 32 elementos pero en la base de datos solo inserta 20, siempre y no da error, alguna idea de porque puede ser esto? |
| |||
Respuesta: Problema al insertar un array en una base de datos sql Mmmm pongo entonces mi codigo a ver si me pueden ayudar: --periodontograma.java-- (esta es la clase) package modelo; public class Periodontograma { private String DNI; private int[] arrayDientes = new int[32]; public Periodontograma(){ int i; for(i=0; i<32; i++){ arrayDientes[i] = 0; } } public String getDNI() { return DNI; } public void setDNI(String dNI) { this.DNI = dNI; } public int getDientes(int i) { return arrayDientes[i]; } public void setDientes(int i, int Dientes) { this.arrayDientes[i] = Dientes; } } y aqui el codigo del action --AccionBuscarPeriodontograma.java-- package controlador; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Locale; import modelo.Periodontograma; import com.opensymphony.xwork2.ActionSupport; public class AccionBuscarPeriodontograma extends ActionSupport { private static final long serialVersionUID = 1L; public static final String NIF_STRING_ASOCIATION = "TRWAGMYFPDXBNJZSQVHLCKET"; private Periodontograma periodontogramaVO; @Override public String execute() throws Exception { String url = "jdbc:mysql://localhost:3306/"; String dbName = "clinigest"; String driverName = "com.mysql.jdbc.Driver"; String userName = "root"; String password = "CRSM"; Connection con = null; Statement stmt = null; ResultSet rs; int tDiente; int i, j, val, tNumero; String tDNI = periodontogramaVO.getDNI(); try { Class.forName(driverName).newInstance(); con = DriverManager.getConnection(url + dbName, userName, password); stmt = con.createStatement(); } catch (Exception e) { System.out.println(e.getMessage()); } stmt = con.createStatement(); rs = stmt.executeQuery("SELECT DNI FROM periodontograma WHERE DNI like '"+tDNI+"'"); if (rs.next() == false) { for(i=0; i<32; i++){ tDiente = periodontogramaVO.getDientes(i); tNumero = i; System.out.println(tDiente); val = stmt.executeUpdate("INSERT INTO periodontograma (DNI, Numero_Pieza, Estado_Pieza) VALUES ('"+tDNI+"', '"+tNumero+"', '"+tDiente+"')"); if (val == 0) { return ERROR; } } } else { for (i=0; i<32; i++) { tNumero = i; rs = stmt.executeQuery("SELECT Estado_Pieza FROM periodontograma WHERE DNI like '"+tDNI+"' AND Numero_Pieza like '"+tNumero+"'"); while (rs.next()) { tDiente = Integer.parseInt(rs.getString("Estado_Pieza")); periodontogramaVO.setDientes(i, tDiente); } } } con.close(); return SUCCESS; } public Periodontograma getPeriodontogramaVO() { return periodontogramaVO; } public void setPeriodontogramaVO(Periodontograma periodontogramaVO) { this.periodontogramaVO = periodontogramaVO; } } alguna idea? |
| ||||
Respuesta: Problema al insertar un array en una base de datos sql Algunos consejos: 1. Usa PreparedStatement en lugar de andar concatenando string. http://docs.oracle.com/javase/6/docs...Statement.html eso te va a salvar de un sql injection. 2. Preferente usa transaccions en esta parte.
Código Java:
Ver original Así te aseguras que o todo se hace o no se hace nada.
Código Java:
En esta parte la puedes simplificar, haciendo un solo query. No veo necesario hacer 32 queries.Ver original Usa el debbuger para encontrar por que solamente inserta 20 registros (estoy seguro que te arroja alguna excepción o regresa error y no lo estas checando) y por favor usa logs. |
| |||
Respuesta: Problema al insertar un array en una base de datos sql De acuerdo, ya solucione el problema mirando la excepcion y tratandola como me dijeron, intentare seguir todos tus consejos pero como soy novato en esto me gustaria que me referenciaras si te fuera posible: - Que son transaccions? - Como simplifico los 32 querys en uno? - Que son logs? Un saludo y gracias de antemano |
| ||||
Respuesta: Problema al insertar un array en una base de datos sql Las transacciones son un conjunto de instrucciones que se ejecutan como si fuese una sóla. Es decir, o todo va bien y se ejecutan todas o falla algo y no se ejecuta ninguna. Simplificar? WHERE DNI like '"+tDNI1+"' OR DNI like '"+tDNI2+"' DNI like '"+tDNI3+"'.... etc y lo mismo con tNumero. Así haces una sola consulta que te devuelva todos los resultados y no cargas tanto la BD. Logs son registros, similares a los que ves en la consola con System.out pero guardados en archivos de texto. Hay librerías específicas de java que te permiten hacer logging, busca un poco en google.
__________________ if (fuzzy && smooth) { fuzzylog = "c00l"; return true; } |
| |||
Respuesta: Problema al insertar un array en una base de datos sql
Código:
Bien les cuento, vuelvo a tener el mismo error, probe metiendolo en un try/catch pero no me arroja ninguna excepcion, ademas probe a mostrar los valores de tDiente y tNumero y el incremento llega correctamente a 31 pero en la base de datos solo me inserta siempre hasta el 19, he probado con el debug y al hacer un step into en el stmt.executeupdate me muestra lo siguiente, no se si tendra algo que ver:for(i=0; i<32; i++){ tDiente = periodontogramaVO.getDientes(i); tNumero = i; System.out.println(tDiente); val = stmt.executeUpdate("INSERT INTO periodontograma (DNI, Numero_Pieza, Estado_Pieza) VALUES ('"+tDNI+"', '"+tNumero+"', '"+tDiente+"')"); if (val == 0) { return ERROR; } } |
| ||||
Respuesta: Problema al insertar un array en una base de datos sql ¿Sabes usar el debbuger? No hay necesidad de baja o entrar la las funciones del sistema, solamente a las tuyas. Trata de usar step over en lugar de step into. |
| ||||
Respuesta: Problema al insertar un array en una base de datos sql Ese mensaje lo único que te está diciendo es que como no tienes la librería de código fuente del conector de mysql no puedes depurar en sus clases, pero como ha dicho razpeitia no tienes que llegar a ese nivel. Como estás en debug, prueba a copiar en tiempo de ejecución una de las insert que supuestamente hace sin errores pero que no inserta, y la ejecutas directamente sobre mySQL. Recuerda que antes también decías que no daba ningún error y sí lo estaba dando.
__________________ Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe. |
| |||
Respuesta: Problema al insertar un array en una base de datos sql Una consulta,¿como estas viendo que contiene la tabla ?, me refiero si estas mirando la tabla desde consola o desde el IDE que utilizas. |
| |||
Respuesta: Problema al insertar un array en una base de datos sql Nada, no hay manera, he probado cambiando el bucle de inserts por un solo insert con todos los valores y tengo el mismo problema, solo me inserta 20 registros y no entiendo el por que, he probado poniendo un outprintin despues de cada insercion y los valores son los adecuados y el bucle se ejecuta las 32 veces pero en la base de datos solo me inserta 20 registros... Para visualizarlo he probado con el plugin del eclipse y tambien desde netbeans pero no creo que de eso sea el problema no? |
| ||||
Respuesta: Problema al insertar un array en una base de datos sql Cita: ¿Pero has probado a ejecutarlas directamente en la BBDD o sólo te parecen correctas?he probado poniendo un outprintin despues de cada insercion y los valores son los adecuados Cambia el orden de los insert o inserta sólo las 12 últimas, de forma que puedas comprobar que el problema no es de los registros si no de su número. También puedes probar a hacer desde el mismo bucle 32 insert en otra tabla para ver si hace 20 o 32. Edit: Me extraña mucho que antes te diera un error e insertara 20, y que ahora no aparezca error y siga insertando 20, aparte de que deberías decir cuál era la excepción. Prueba también a borrar las clases y a volver a compilarlas.
__________________ Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe. Última edición por Xerelo; 22/05/2013 a las 07:54 |
| |||
Respuesta: Problema al insertar un array en una base de datos sql Problema solucionado, imagino que tendria que ver con algo de la cache de la BD porque al borrar la tabla y volver a crearla se soluciono, muchas gracias a todos! ^^ |
Etiquetas: |