Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/09/2007, 23:33
wwwmaster
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 22 años, 1 mes
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"