当前位置: 技术问答>java相关
在一个servlet中,如何只向数据库提交一次,就同时执行多个SQL语句
来源: 互联网 发布时间:2015-06-16
本文导语: public ResultSet executeQuery(String sql) {rs = null; try {rs = stmt.executeQuery(sql); } catch(SQLException ex) {System.err.println("aq.executeQuery:"+ex.getMessage()); } ...
public ResultSet executeQuery(String sql)
{rs = null;
try
{rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
上述的方法只能一次提交一个SQL语句,
如果是要insert一百行,得执行一百次该方法
能不能只用一次,就将一百行insert进去呢?
{rs = null;
try
{rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
上述的方法只能一次提交一个SQL语句,
如果是要insert一百行,得执行一百次该方法
能不能只用一次,就将一百行insert进去呢?
|
JDBC 2.0不是支持成批更新吗?
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into ...");
stmt.addBatch("insert into ...");
...
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into ...");
stmt.addBatch("insert into ...");
...
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
|
可以:
public ResultSet executeQuery(String sql)
{rs = null;
try
{ rs.begin();//事务处理
while(..)
rs = stmt.executeQuery(sql);
rs.commit();
}
catch(SQLException ex)
{
rs.rollback();
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
注意:1。update data时要加事务处理
2。象楼上说的,优化SQL
public ResultSet executeQuery(String sql)
{rs = null;
try
{ rs.begin();//事务处理
while(..)
rs = stmt.executeQuery(sql);
rs.commit();
}
catch(SQLException ex)
{
rs.rollback();
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
注意:1。update data时要加事务处理
2。象楼上说的,优化SQL
|
当时俺被逼的没有办法了,只好用SQL中的union来把一片查询语句连起来,批处理不能用于查询,事务好像也是一条一条的提交,结果还不是在一个ResultSet中,我记得那个玩意好像有个getMoreResultSet方法,但还是不在一个ResultSet中,至于插入删除修改可以用批处理。