//
Prepared statement contains too many placeholders - 簡書
http://www.lxweimin.com/p/0a84e680bd6d
場景:使用Kettle進行簡單的數據插入時,出現以下Prepared statement contains too many placeholders錯誤
數據庫:MySQL
先上錯誤截圖:
轉換設計:
報錯信息:
表輸出設計:
DB連接:
以上錯誤提示Prepared statement contains too many placeholders(占位符過多),這是由于我把“提交記錄數量”設為1000,而要插入記錄的表字段有131個,所以要進行批量插入時需要1311000=131000 > 65535 ,故而報錯。
解決方案:
方案1:把DB連接中的 rewriteBatchedStatements 給設置為false(或者去掉),不過這個操作會影響數據的插入速度。
方案2:更改表輸出的設計。確保131個輸出字段的和提交記錄數量的乘積不超過65535。比如把提交記錄數量由1000更改為450(131450=58950 < 65535)
把提交記錄數量由1000更改為450
參考網址1:http://www.cnblogs.com/chenjianjx/archive/2012/08/14/2637914.html
網址1中內容概括:對delete和update,驅動所做的事就是把多條sql語句累積起來再一次性發出去;而對于insert,驅動則會把多條sql語句重寫成一條風格很酷的sql語句,然后再發出去。官方文檔說,這種insert寫法可以提高性能(”This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements”)