2016-05-09 62 views
0

我有一個腳本需要插入大量的數據到數據庫(270k行),我正在使用預處理語句(for循環)。 當我執行(res, err := stmt.Exec)時,我可以檢索插入到數據庫的最後一個ID(id, err = res.LastInsertId())。 但是由於我向數據庫提出了很多請求,在16k行之後,我得到了max_prepared_statements(16,382) error(然後我嘗試將最大值設置爲100萬而不是16,382,但問題仍然存在)。Go語言 - 插入數據到Mysql數據庫沒有準備好的語句

我的問題是,如果有另一種方式插入到數據庫並檢索最後插入的ID,而不使用準備好的語句?

我插入代碼,現在是:

stmt, err := db.Prepare(`INSERT info SET title=?,minimage=?,downloadfile=?,rating=?,peoplewatched=?,likes=?`) 
checkErr(err) 
res, err := stmt.Exec(title,minimage,downloadfile,rating,peoplewatched,likes) 
checkErr(err) 
id, err = res.LastInsertId() 
checkErr(err) 
fmt.Println(id) 

感謝

+1

您應該顯示更多的代碼。很可能你永遠不會關閉你的陳述和/或行。 – icza

+1

您是否在每個插入(調用db.Prepare)上創建新語句? 順便說一句,你有另一個stackoverflow線程與我認爲相同的問題。 – Apin

+1

可能重複[不能準備超過max \ _prepared \ _stmt \ _count Mysql錯誤](http://stackoverflow.com/questions/37123216/cannot-prepare-more-than-max-prepared-stmt-count-mysql-錯誤) – Topo

回答

2

對於那些誰encouter同樣的問題,一定要備調用語句一次並離開它的任何您的循環。我只注意到它在我的'for'循環中,因此它每次都創建一個新的準備陳述。

同樣感謝Apin先前提到的

+1

這就是爲什麼你需要在這裏附加更多的代碼,以便更好地理解他人。 – Apin

相關問題