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

[Consulta] SqLite crear tabla si no existe

Estas en el tema de [Consulta] SqLite crear tabla si no existe en el foro de Java en Foros del Web. Hola amigos. Tengo un problema con un método que estoy utilizando. Aquí dejo el código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original private void crearTabla ( ...
  #1 (permalink)  
Antiguo 05/06/2014, 12:02
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 7 meses
Puntos: 1
[Consulta] SqLite crear tabla si no existe

Hola amigos.

Tengo un problema con un método que estoy utilizando.

Aquí dejo el código:
Código Java:
Ver original
  1. private void crearTabla() {
  2.         Statement crearTabla = null;
  3.        
  4.         String tabla = "CREATE TABLE IF NOT EXISTS Usuarios ("
  5.                 + "_id INTEGER PRIMARY KEY," + "admin INTEGER,"
  6.                 + "userID VARCHAR NOT NULL," + "pass VARCHAR NOT NULL,"
  7.                 + "nombre VARCHAR NOT NULL," + "apellido1 VARCHAR NOT NULL,"
  8.                 + "apellido2 VARCHAR NOT NULL," + "email VARCHAR NOT NULL"
  9.                 + ");";
  10.        
  11.         try {
  12.             crearTabla = conexion.createStatement();
  13.             int tablaCreada = crearTabla.executeUpdate(tabla);
  14.             System.out.println(tablaCreada);
  15.             if (tablaCreada == 0) {
  16.                 String admin = "INSERT INTO Usuarios "
  17.                         + "(admin, userID, pass, nombre, apellido1, apellido2, email)"
  18.                         + "VALUES (" + "1," + "'admin'," + "'123',"
  19.                         + "'nombre'," + "'apellido1'," + "'apellido2',"
  20.                         + "'email'" + ");";
  21.                 crearTabla.executeUpdate(admin);
  22.             }
  23.            
  24.             crearTabla.close();
  25.  
  26.         } catch (SQLException sqlex) {
  27.             System.err.print("Error # 3");
  28.             System.out.println("Imposible crear la tabla");
  29.            
  30.         } finally {
  31.  
  32.             try {
  33.                 if ( conexion == null ){
  34.                     conexion.close();
  35.                 }
  36.  
  37.             } catch (SQLException sqlex) {
  38.                 sqlex.printStackTrace();
  39.             }
  40.  
  41.         }
  42.     }

En la parte int tablaCreada = crearTabla.executeUpdate(tabla);
Creía que si creaba la tabla (si esta no existia) me retornaba 0, y si no creaba la tabla porque ya existe me retornaba -1.

El detalle es que siempre me retorna 0, he borrado la db varias veces para probar y si, aunque exista o no me retorna 0.
Obviamente si me retorna siempre 0, siempre se crea el user.

Gracias por la ayuda.

Saludos.
  #2 (permalink)  
Antiguo 05/06/2014, 12:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: [Consulta] SqLite crear tabla si no existe

Esto es C#.net?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/06/2014, 14:51
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: [Consulta] SqLite crear tabla si no existe

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esto es C#.net?
Perdon, es Java.

Saludos.
  #4 (permalink)  
Antiguo 05/06/2014, 14:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: [Consulta] SqLite crear tabla si no existe

Off topic en BB.DD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/06/2014, 02:41
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: [Consulta] SqLite crear tabla si no existe

http://docs.oracle.com/javase/7/docs...Statement.html

Cita:
int executeUpdate(String sql)
throws SQLException
Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.
La API te avisa de que un CREATE (DDL) no devuelve nada.

Aparte de eso, estás intentando crear la tabla siempre, exista o no, y eso no es una buena idea.

Puedes comprobar si existe primero, y utilizarlo para decidir si la creas o no y además si hay que añadir usuario o no.

http://stackoverflow.com/questions/2...f-table-exists

Usando execute creo que sí te devuelve si se ha creado o no, pero como he dicho, pienso que no es correcto intentarlo si ya existe.
__________________
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.
  #6 (permalink)  
Antiguo 06/06/2014, 10:39
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: [Consulta] SqLite crear tabla si no existe

Gracias por el dato amigo. Ya he cambiado ciertos cosas para que verifique primero la tabla si existe o no.

Ahora. Mira que he tenido un problema con el PreparedStatement.

Código Java:
Ver original
  1. boolean crear = tablaExiste();
  2.                 if (!crear)
  3.                     crearTabla();
  4.  
  5.                 initConexion();
  6.  
  7.                 if (!(psConsultar != null)) {
  8.  
  9.                     psConsultar = conexion
  10.                             .prepareStatement("SELECT * FROM Usuarios WHERE userId = ?;");
  11.  
  12.                 }
  13.                 System.out.println(psConsultar);
  14.                 psConsultar.setString(1, user);
  15.  
  16.                 ResultSet resultado = psConsultar.executeQuery();
  17.  
  18.                 String idUser = "", pass = "", admin = "";
  19.                 while (resultado.next()) {
  20.                     idUser = resultado.getString("userID");
  21.                     pass = resultado.getString("pass");
  22.                     admin = resultado.getString("admin");
  23.                 }
  24.  
  25.                 verificarUser(idUser, pass, admin);

Si ingreso los datos una vez (la primea vez) si funciona, los trae y los compara correctamente. Pero si ingreso por segunda vez me tira este error:

* statement is not executing
* psConsultar.setString(1, user);

(El error y en que linea).

Estoy investigando mas a fondo para solucionarlo, pero si me puedes brindar tu ayuda sería excelente.

Saludos.

Etiquetas: bases-de-datos-general, sql, sqlite, tabla
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 19:58.