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

Control de sentencias SQL en Java

Estas en el tema de Control de sentencias SQL en Java en el foro de Java en Foros del Web. Hola! En mi web tengo un buscador, en el que a partir de los resultados de un formulario genero una sentencia SQL. Me gustaria encontrar ...
  #1 (permalink)  
Antiguo 16/09/2007, 16:53
 
Fecha de Ingreso: julio-2007
Mensajes: 26
Antigüedad: 17 años, 4 meses
Puntos: 0
Control de sentencias SQL en Java

Hola!
En mi web tengo un buscador, en el que a partir de los resultados de un formulario genero una sentencia SQL.
Me gustaria encontrar una solucion optima para este problema.
Agradeceria evolucionar esta solucion al maximo, supongo que todos nos hemos encontrado varias veces con este problema y que no sere el unico que vaya a sacar provecho de esto.
Yo lo unico que he pensado es en meter por cada entrada del formulario ocupar una posicion de una lista. De esta manera nos ahorramos muchos ifs y else innecesarios.

Un saludo!
Y muchas gracias, pq si has leido hasta aqui es q por lo menos estas un pelin interesado!
  #2 (permalink)  
Antiguo 16/09/2007, 23:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 22 años
Puntos: 37
Re: Control de sentencias SQL en Java

El sql lo armas dinamicamente con ifs, ve este ejemplo en el que leo tablas .txt que contienen series de campos para creacion de tablas, y luego series de datos de ejemplo, la variable SQL tendra al final la cadena completa:

Cita:
// Abre la lista de tablas a crear
Vector tables = new Vector();
String tableFile = "tablas.txt";
String table = null;
String create = null;
String drop = null;

InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
String line = null;

is = this.getClass().getResourceAsStream(tableFile);
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
System.out.println( "CICLO 1 Crea tablas");

while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line, "=");
table = tokenizer.nextToken(); // Nombre de tabla
create = tokenizer.nextToken(); // INstruccion create
// Primero borra la tabla existente
String tmpString = replaceAll(table, "QGPL", getBiblioteca() );


drop = "drop table " + getBiblioteca()+"."+tmpString; // table
System.out.println(drop);
executeStatement(drop, true);
System.out.println(create);
// Luego crea de nuevo la tabla
tmpString = replaceAll(create, "QGPL", getBiblioteca() );

//executeStatement(create, true);
executeStatement(tmpString, true);
tables.addElement(table);
}

br.close();

// Ciclo para insertar datos de prueba a tablas recien creadas
//System.out.println( "CICLO 2 Agrega registros");
for (Enumeration e = tables.elements();
e.hasMoreElements();
table = (String) e.nextElement()) {
if ((is = this.getClass().getResourceAsStream(table + ".txt")) != null) {
isr = new InputStreamReader(is);
br = new BufferedReader(isr);

while ((line = br.readLine()) != null) {
// El separador de datos/campos es ;
StringTokenizer tokenizer = new StringTokenizer(line, ";");
String sql = "insert into " + getBiblioteca()+"."+ table + " values (" + tokenizer.nextToken();

while (tokenizer.hasMoreTokens()) {
sql += ", " + tokenizer.nextToken();
}
sql += ")";
System.out.println(sql);
executeStatement(sql, true);
}
br.close();
}
}

El archivo TXT que se lee tiene el formato siguiente:
BUsuarios=CREATE TABLE QGPL.DBUsuarios (IDUSUARIO numeric(5),NOMBRE CHAR(50),USUARIO CHAR(15), PASSWORD CHAR(15), IDPERFIL NUMERIC(09), ADMIN NUMERIC(01), COMPLEJAS NUMERIC(01) )
DBPerfiles=CREATE TABLE QGPL.DBPerfiles (IDPERFIL numeric(5),PERFIL CHAR(50) )


y luego, cuando se leen los DATOS de prueba para ser insertados estan asi (para la tabla usuarios):
1;'Administrador de prueba';'admin';'admin';0;1;1

Se procesa con un TOken.
Para el caso de insert o update dinamicamente armado con una serie de IFs preguntarias si se inserta o no el campo con su "value"
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 13:52.