2013-12-11 31 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

我有同样的问题,问题是一个;在我准备好的语句字符串结尾。刚刚删除;从字符串和它的工作。