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"