好吧,我會重寫這個問題,因爲我之前做了一些過於複雜的事情。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