Estoy usando una instrucción SELECT para obtener datos de una tabla y luego insertarlos en otra tabla. Sin embargo, la línea "stmt.executeQuery (query);" está insertando la primera línea de la tabla y luego sale. Cuando comento esta línea, el ciclo while recorre todas las líneas imprimiéndolas. La stacktrace no muestra ningún error. ¿Por qué está pasando esto?¿Por qué la instrucción While (rs.next()) termina después de la 1ra iteración?
try{
String query = "SELECT * FROM "+schema_name+"."+table;
rs = stmt.executeQuery(query);
while (rs.next()) {
String bundle = rs.getString("BUNDLE");
String project_cd = rs.getString("PROJECT_CD");
String dropper = rs.getString("DROPPER");
String week = rs.getString("WEEK");
String drop_dt = rs.getString("DROP_DT").replace(" 00:00:00.0","");
query = "INSERT INTO INDUCTION_INFO (BUNDLE, PROJECT_CD, DROPPER, WEEK, DROP_DT) "
+ "VALUES ("
+ bundle+","
+ "'"+project_cd+"',"
+ dropper+","
+ week+","
+ "to_date('"+drop_dt+"','YYYY-MM-DD'))";
System.out.println(query);
stmt.executeQuery(query);
}
}catch(Exception e){
e.printStackTrace();
}
Hm ... en realidad no sé si al llamar a 'executeUpdate()' en una instrucción se cierran las declaraciones anteriores 'ResultSet'. Y soy demasiado perezoso para probar eso en este momento ... –
La pregunta específica ya está respondida, pero como observación: debe usar una declaración preparada y cambiar las variables de vinculación cada vez en lugar de crear una nueva inserción con los valores codificado de forma rígida. (Parece un lugar poco probable para obtener una inyección SQL, pero depende de quién puede colocar las entradas en la tabla fuente ...). Pero, ¿por qué no simplemente hacerlo de un golpe con un select-as-insert, en lugar de un bucle? –