问什么我的PreparedStatement的addBatch方法只插入了最后一条数据

zliuzz 2009-08-27 11:50:52

try {
Class.forName(Config.getDB_DRIVER());
Connection conn = DriverManager.getConnection(Config.getDB_CONN(),
Config.getDB_USER(), Config.getDB_PWD());
// conn.setAutoCommit(false);
String sql = "insert into T_user values(?,?)";
PreparedStatement pstmt = null;
for (int i = 0; i < 100; i++) {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "|ddd" + i);
pstmt.setString(2, "ddsds");
pstmt.addBatch();

if(i % 20 == 0 || i == 99){
pstmt.executeBatch();
}
}
conn.commit();
pstmt.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
...全文
340 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
woming66 2009-08-27
  • 打赏
  • 举报
回复
pstmt = conn.prepareStatement(sql);
你创建了100个PreparedStatement 对象,

if(i % 20 == 0 || i == 99){
pstmt.executeBatch();
}

当然只执行这几个满足添加的了
老紫竹 2009-08-27
  • 打赏
  • 举报
回复
pstmt = conn.prepareStatement(sql);
把这一行放到循环外面去!哈哈!
gukuitian 2009-08-27
  • 打赏
  • 举报
回复
// conn.setAutoCommit(false);
不要这个的话
conn.commit();会出错
这两句都要还是都不要,执行都没错,不是最后一条啊。。
andesen 2009-08-27
  • 打赏
  • 举报
回复
加上这句试试 conn.setAutoCommit(true);
gukuitian 2009-08-27
  • 打赏
  • 举报
回复
每回只有一个sql命令,为什么用批处理?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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