2013-12-11 61 views
5

我的代碼非常簡單。但在運行executeBatch()後,只有1行進入數據庫。Java ExecuteBatch()只插入1行

的代碼如下:

//INSIDE LOOP: 
{ 
ps = conn.prepareStatement("INSERT INTO NK_EVENT_DATA VALUES(?,?,?,?,?,?,?); 

// setting bind variable values 
ps.setLong(1, ed_fi_uid); 
ps.setString(2 , ed_date); 
ps.setString(3, ed_hash_key); 
ps.setLong(4 , ed_et_uid); 
ps.setLong(5, ed_etn_uid); 

ps.addBatch(); 
} 
//LOOP ENDS 

ps.executeBatch(); 

然而,只有一條記錄被插入,而不是5個記錄。

+1

發佈您的完整代碼。 – user987339

+1

5?您在準備好的聲明中使用了5個變量,但沒有5個記錄... – PeterMmm

回答

16

您正在每個循環中創建一個新的PreparedStatement。每個語句只會添加一個批處理,並且只會執行最後一條語句。

移動ps = conn.prepareStatement("INSERT INTO NK_EVENT_DATA VALUES(?,?,?,?,?,?,?);以外的循環。

+1

嗨Michael!這正是問題!現在它的工作很好!乾杯人,謝謝!阿卜杜拉 –

0

你怎麼知道應該插入5行?

爲了實現此目的,必須發生5次對addBatch方法的調用,這很可能意味着您的代碼必須在循環中迭代5次。請檢查這是否發生。

此外,請注意您的INSERT語句看起來像預計將數據插入7列,而您只爲每行設置5個列值。

-1

我有同樣的問題,問題是一個;在我準備好的語句字符串結尾。剛剛刪除;從字符串和它的工作。