好吧,我会重写这个问题,因为我之前做了一些过于复杂的事情。java,mysql使用preparedStatement插入到多个表中
我想借此:
con.setAutoCommit(false);
String tempforbatch;
Statement stmt = con.createStatement();
for (int i = 0; i < tables.length; i++) {
tempforbatch = "INSERT INTO " + tables[i] + " VALUES ('" + values[i] + "')";
stmt.addBatch(tempforbatch);
}
stmt.executeBatch();
,并把它变成的东西完全一样,只是使用:
PreparedStatement stmt = con.prepareStatement("INSERT INTO table_name VALUES (?, ?)");
其中 '表名' 可以基于更换哪些表[I]每次都是通过循环。
我已经尽可能地尝试了所有可能的方法,并且所有方法都是一样的,要么对sql无效,要么每次只是最后一次INSERT都丢失。
最后,我想做一个循环,将批量所有插入,也许100,也许1000我不知道。在任何情况下,我希望它循环和批处理所有插入,然后执行一次所有的批处理。另一种方法是仅仅执行每一个单独的插入,这首先破坏了具有批处理功能的原因。
如果只是有办法做到这一点:
PreparedStatement stmt = con.prepareStatement("INSERT INTO ? VALUES (?, ?)");
...loop code here....
stmt.setTable(1, "table1");
stmt.setString(2, "value1");
stmt.setString(3, "value2");
stmt.addBatch();
...end loop here....
stmt.executeBatch();
但是大家都知道.setTable不存在:(如果有那么它可以被放置到一个循环,并给予不同的表值对于循环中的每一个循环来说,这种类型的循环现在可以正常工作,只要将它全部提供给同一个表即可。
我开始认为现在我已经看到PreparedStatement的更多内容了。如果有办法以'table_name'可变的方式调用它,那么它可能会工作,例如s = conn.prepareStatement(“INSERT INTO?VALUES(?)”);然后有一些形式的s.setTable(1,“table1”);但没有办法做到这一点,我发现,并且每个批次的表格必须设置为石头。 – 2012-08-15 07:18:29