PreparedStatement中运行多个sql语句??

leeking888 2009-09-02 09:17:13
for(int i = 0; i<tables.size();i=i+2){
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";

pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.execute();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.execute();
}

上面的这些语句我想一次运行完,看了一下有个addBatch()
不知道可不可以改成

for(int i = 0; i<tables.size();i=i+2){
sql_insert = "insert into "+tables.get(i)+" (select * from "+tables.get(i+1)+" where cid = ? )";
sql_delete = "delete from "+tables.get(i+1)+" where cid = ?";

pstmt = conn.prepareStatement(sql_insert);
pstmt.setString(1, cid);
pstmt.addBatch();
pstmt.clearParameters();
pstmt = conn.prepareStatement(sql_delete);
pstmt.setString(1, cid);
pstmt.addBatch();

}
pstmt.execute();

最后一次运行commit();


...全文
522 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
leeking888 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nxyc_twz 的回复:]
你的写法很有问题,按下面的方法改进:
1.将sql语句的定义放到for之外,且都用?替代参数;
2.将pstmt = conn.prepareStatement(sql_insert); 放到for之外;
3.prepareStatement实际上是针对相同SQL,不同参数进行优化并提供BATCH特性的,因此你的insert和delete应分别建立prepareStatement;
4.for体内只保留与pstmt.set***相关的操作,其它remove掉;


[/Quote]

看来只能用Statement来实现了
nxyc_twz 2009-09-02
  • 打赏
  • 举报
回复
你的写法很有问题,按下面的方法改进:
1.将sql语句的定义放到for之外,且都用?替代参数;
2.将pstmt = conn.prepareStatement(sql_insert); 放到for之外;
3.prepareStatement实际上是针对相同SQL,不同参数进行优化并提供BATCH特性的,因此你的insert和delete应分别建立prepareStatement;
4.for体内只保留与pstmt.set***相关的操作,其它remove掉;

81,117

社区成员

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

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