我正在使用SELECT语句从表中获取数据,然后将其插入到另一个表中。不过行“stmt.executeQuery(query);”插入表中的第一行然后退出。当我将这一行注释掉时,while循环遍历所有将它们打印出来的行。堆栈跟踪没有显示任何错误。这是为什么发生?为什么While(rs.next())语句在第一次迭代后结束?
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();
}
嗯......实际上我不知道在语句中调用'executeUpdate()'是否会关闭语句前面的'ResultSet'。而我现在懒得去测试它...... –
已经回答了具体的问题,但作为一种观察:您应该使用准备好的语句并每次更改绑定变量,而不是使用值构建新的插入硬编码英寸(这似乎是一个不太可能的地方获得SQL注入,但取决于谁可以将条目放在源表中...)。但是,为什么不用一个select-as-insert来实现,而不是循环呢? –