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

Problema al insertar un array en una base de datos sql

Estas en el tema de Problema al insertar un array en una base de datos sql en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/05/2013, 13:18
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
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?
  #2 (permalink)  
Antiguo 14/05/2013, 13:52
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Problema al insertar un array en una base de datos sql

Estoy 100% seguro que tiene algo que ver con tu código.
  #3 (permalink)  
Antiguo 14/05/2013, 13:56
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
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?
  #4 (permalink)  
Antiguo 15/05/2013, 16:46
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema al insertar un array en una base de datos sql

Yo creo que seguramente está saltando una excepción, empieza por meter dentro de un try/catch el executeUpdate, un execute que propague una excepción no es una gran idea.
__________________
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.
  #5 (permalink)  
Antiguo 15/05/2013, 17:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
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
  1. for(i=0; i<32; i++){
  2.                 tDiente = periodontogramaVO.getDientes(i);
  3.                 tNumero = i;
  4.                 System.out.println(tDiente);
  5.                 val = stmt.executeUpdate("INSERT INTO periodontograma (DNI, Numero_Pieza, Estado_Pieza) VALUES ('"+tDNI+"', '"+tNumero+"', '"+tDiente+"')");
  6.                 if (val == 0) {
  7.                     return ERROR;
  8.                 }
  9.             }

Así te aseguras que o todo se hace o no se hace nada.

Código Java:
Ver original
  1. for (i=0; i<32; i++) {
  2.                 tNumero = i;
  3.                 rs = stmt.executeQuery("SELECT Estado_Pieza FROM periodontograma WHERE DNI like '"+tDNI+"' AND Numero_Pieza like '"+tNumero+"'");
  4.                 while (rs.next()) {
  5.                     tDiente = Integer.parseInt(rs.getString("Estado_Pieza"));
  6.                     periodontogramaVO.setDientes(i, tDiente);
  7.                 }
  8.             }
En esta parte la puedes simplificar, haciendo un solo query. No veo necesario hacer 32 queries.

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.
  #6 (permalink)  
Antiguo 16/05/2013, 08:49
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
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
  #7 (permalink)  
Antiguo 16/05/2013, 10:53
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
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;
}
  #8 (permalink)  
Antiguo 16/05/2013, 12:16
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
Respuesta: Problema al insertar un array en una base de datos sql

Código:
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;
                }
            }
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:
  #9 (permalink)  
Antiguo 17/05/2013, 09:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
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.
  #10 (permalink)  
Antiguo 17/05/2013, 09:46
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
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.
  #11 (permalink)  
Antiguo 18/05/2013, 12:51
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 11 años
Puntos: 9
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.
  #12 (permalink)  
Antiguo 22/05/2013, 07:08
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
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?
  #13 (permalink)  
Antiguo 22/05/2013, 07:45
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema al insertar un array en una base de datos sql

Cita:
he probado poniendo un outprintin despues de cada insercion y los valores son los adecuados
¿Pero has probado a ejecutarlas directamente en la BBDD o sólo te parecen correctas?

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
  #14 (permalink)  
Antiguo 26/05/2013, 06:45
 
Fecha de Ingreso: abril-2013
Mensajes: 36
Antigüedad: 11 años
Puntos: 0
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: sql
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 07:36.