jdbc 批量插入数据不能插入

wention 2009-08-30 09:01:32
rt,我一次次的插入是没有问题的,但是批量插入就不能插入,控制台也没有报错,但就是不能成功写到数据库中。高手指点下,下面是代码:

public class OracleTMobileDao implements TMobileDao {
public long addMobilesBatch(String mobile_Number, String mobile_Type,
String Card_Number, String is_Available,long total)
{
long rs = 0;
Card_Number = "0000000000000";//将card_number的值写成固定的值。
Connection conn = OracleDaoFactory.getConnection();
String mobile_Num = mobile_Number;
try {
conn.setAutoCommit(false);
String sql = "insert into TMobile values(?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql);
long mobile_NumLong =Long.parseLong(mobile_Number);
for(long i=0;i<total;i++)
{
mobile_NumLong+=i;
mobile_Num=mobile_NumLong+"";
stmt.setString(1, mobile_Num);
stmt.setString(2, mobile_Type);
stmt.setString(3, Card_Number);
stmt.setString(4, is_Available);
stmt.addBatch();

}
int s[] = stmt.executeBatch();
for(int i=0;i<s.length;i++)
{
rs +=s[i];
}
conn.setAutoCommit(true);
} catch (SQLException e) {
if(conn!=null)
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
return rs;
}
}
...全文
195 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2009-08-31
  • 打赏
  • 举报
回复
看看你的数据库啊,是不是曾经执行了一次,可是数据没有删除,主键值可能重复了吧....
wention 2009-08-31
  • 打赏
  • 举报
回复
怎么没人理了啊。。。。
wention 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaoyangjay 的回复:]
事物没有提交
我不知道你conn.setAutoCommit(true);放在这什么意思,
如果你的数据库隔离级别 是提交读,
可能是你事物没有提交。
把conn.setAutoCommit(true) 改为 conn.Commit() 应该就可以了

你的事物起始点是conn.setAutoCommit(false);
但是你没有结束点
事物的结束点应该是 conn.Commit()

[/Quote]
谢谢,粗心忘写了。现在的问题是int s[] = stmt.executeBatch(); 得到的数组中的值都是负数,我预想的是得到值都为1的数组,因为每条sql都只影响一条记录,可实际得到的值都为-2,数据库中是写入的值是正确的。
heavilyarmed 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 monkeyking1987 的回复:]
conn.setAutoCommit(true);
这句不对.应该是conn.commit();提交的方法.
在catch块里面加上
conn.rollback();回滚,要是抛出异常就回滚事务...
[/Quote]


顶了
ec06cumt 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhaoyangjay 的回复:]
事物没有提交
我不知道你conn.setAutoCommit(true);放在这什么意思,
如果你的数据库隔离级别 是提交读,
可能是你事物没有提交。
把conn.setAutoCommit(true) 改为 conn.Commit() 应该就可以了

你的事物起始点是conn.setAutoCommit(false);
但是你没有结束点
事物的结束点应该是 conn.Commit()

[/Quote]

楼上应该是正解,但是conn.setAutoCommit(true)也是正确的,不用删除,但是须在它之前加上conn.Commit()即可!
lz试试看,应该是正确的!
monkeyking1987 2009-08-30
  • 打赏
  • 举报
回复
conn.setAutoCommit(true);
这句不对.应该是conn.commit();提交的方法.
在catch块里面加上
conn.rollback();回滚,要是抛出异常就回滚事务...
11113fsfasdfasdfa 2009-08-30
  • 打赏
  • 举报
回复
事物没有提交
我不知道你conn.setAutoCommit(true);放在这什么意思,
如果你的数据库隔离级别 是提交读,
可能是你事物没有提交。
把conn.setAutoCommit(true) 改为 conn.Commit() 应该就可以了

你的事物起始点是conn.setAutoCommit(false);
但是你没有结束点
事物的结束点应该是 conn.Commit()

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧