A. jdbcTemplate 批量更新sql 语句怎么写
//应用场景:
如以下SQL :
String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)";
该语句为向to_order_return_info表中插入新记录
但如需要N条数据插入 正常的方案为 执行N次插入数据操作
jdbc 支持批量SQL 可以进行同数据批量操作 以及混合数据批量操作
Spring 对jdbc进行了封装 同样支持批量操作
以下为同数据(插入到统一个表中的数据) 批量操作:
需要用到batchUpdate();方法
和BatchPreparedStatementSetter接口
实现getBatchSize();以及setValues 方法
getBatchSize();返回批量条数 也就是执行多少次增删改操作;
setValues(PreparedStatement ps, int i)
该方法会自动通过i遍历List 取出相应的增删改数据!
B. jdbc一次批量处理多少条数据
作为一个替代方案,可以试试使用Statement 的批量处理特性看看能否同时执行所有的SQL以提高速度。 存储过程的最简单的形式就是包含一系列SQL语句的过程,将这些语句放在一起便于在同一个地方管理也可以提高速度。Statement 类可以包含一系列SQL语句,因此允许在同一个数据库事务执行所有的那些语句而不是执行对数据库的一系列调用。 使用批量处理功能涉及下面的两个方法: · addBatch(String) 方法 · executeBatch方法 如果你正在使用Statement 那么addBatch 方法可以接受一个通常的SQL语句,或者如果你在使用PreparedStatement ,那么也可以什么都不向它增加。executeBatch 方法执行那些SQL语句并返回一个int值的数组,这个数组包含每个语句影响的数据的行数。如果将一个SELECT语句或者其他返回一个ResultSet的SQL语句放入批量处理中就会导致一个SQLException异常。 关于java.sql.Statement 的简单范例可以是: Statement stmt = conn.createStatement(); stmt.insert(DELETE FROM Users); stmt.insert(INSERT INTO Users VALUES(rod, 37, circle)); stmt.insert(INSERT INTO Users VALUES(jane, 33, triangle)); stmt.insert(INSERT INTO Users VALUES(freddy, 29, square)); int[] counts = stmt.executeBatch(); PreparedStatement 有些不同,它只能处理一部分SQL语法,但是可以有很多参数,因此重写上面的范例的一部分就可以得到下面的结果: // 注意这里没有DELETE语句 PreparedStatement stmt = conn.prepareStatement(INSERT INTO Users VALUES(?,?,?));
C. jdbctemplate 批量执行sql怎么实现的
//应用场景: 如以下SQL : String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)"; 该语句为向to_order_return_info表中插入新记录 但如需要N条数据插入 正常的方案为 执行N次插入数据操作 jdbc ...
D. java程序中批量执行sql时为什么 批量过大时,整体性能降低
java程序中批量执行sql时为什么 批量过大时,整体性能降低
直接用JDBC发送sql语句的话 Connection不是setAutoCommit(false)这招来批量提交么?
楼主担心出问题 他正好有Connection rollback()来回滚事务
进入背包成功 玩家钱币减少失败 回滚之后进入背包操作也会取消
当事务结束后commit()手动提交 数据库驱动都已经封装好了
如果使用框架 比如Hibernate直接把事务操作抽取成Transaction类 操作起来更加方便和安全
E. 我用JAVA编写了一个批量执行SQL语句的方法,
建表的时候有表确实会报错,这就看你想怎么处理了。
你可以不作处理,也就是直接用那个已经存在的表,这时SQL语句可以是这样的:create table if not exists TABLE_NAME()。。
也可以把已经存在的表删掉,再执行你的建表语句,这时你可以这样写:
drop table TABLE_NAME if exists;然后再
create table TABLE_NAME()。。。
F. java 在Oracle怎么一次执行多条sql语句,求大神!
批了执行SQL最好的办法是采用事务机制。具体网络下Java事务,以下是抄来的简单例子。
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事务的默认提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事务
con.setAutoCommit(true);//恢复JDBC事务的默认提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滚JDBC事务
exc.printStackTrace();
dbc.close();
return-1;
}
}
不过仔细看楼主的设计,没必要采用多条SQL。直接String拼成update XSB set XM='FF', ZF='rj' where XH ='101102'就可以了
G. JDBC 操作中 是否有一种高效的 批量查询的方式
对,就是addBatch(); 这个方法。
一次性发多条sql语句。
H. jdbc可以支持批量查询么
哥们对于你的疑惑jdbc提供了相应的方法来支持批量操作:例如 :
JDBC的批量处理语句包括下面两个方法:
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;
通常我们会遇到两种批量执行SQL语句的情况:
1 多条SQL语句的批量处理;
2 一个SQL语句的批量传参;
针对第一种情况我们以前的做法可能是创建多个Statement,然后挨个execute,或者干脆写个PL/SQL;写过程是个明智的做法,但是我们还可以利用JDBC的批量处理语句进行处理,如下:
Statement st = conn.createStatement();
st.addBatch(sql1);
st.addBatch(sql2);
st.addBatch(sqln);
st.executeBatch();
我们只创建一次Statement,然后addBatch多条SQL,最后一起执行就可以了,这种用法不多,感觉还不如写个PL/SQL!
但是第二种情况利用JDBC的批量处理语句就比较常见了,这一般用于PreparedStatement,执行同一条语句,只是要传多条参数,多用于批量增、删、改!以前我们习惯使用下面循环的方式进行传参。
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<N;i++)...{
pst.setInt(1,i);
pst.executeQuery();}
如果我们使用了JDBC的批量处理语句,就可以像下面那样处理:
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=100;i<1101;i++)...{
pst.setInt(1,i);
pst.addBatch();}pst.executeBatch();
前者是每传一次参就要执行一次,而后者只执行一次!我做了一个测试,在批量处理的条数很少的时候二者的效率差别不是很大,但是超过50条,就有了差距,随着条数的增多就越明显!所以当我们遇到批量处理的时候,一定要优先考虑JDBC的批量处理语句。
注意:1 第一种情况不可以添加查询SQL,因为executeBatch()返回的是int [],如果把返回ResultSet的SQl加入会引起异常;
2 第二种情况可以适用于没有返回参数的存储过程,如果存储过程有返回参数,是不可以使用批量处理的!
I. java oracle 批量执行sql语句和存储过程,并且要在一个事务里面怎么写啊,谢谢
你把批量执行sql语句和存储过程,否放入一个大的存储过程里,然后在这个大的存储过程中提交事务,就所有的都会纳入事务管理当中。
J. java:sql语句批量执行
public static List<List<Map<String, Object>>> getData() {
List<List<Map<String, Object>>> data = new LinkedList<List<Map<String, Object>>>();
data.add(SQLHelper.executeQuery("select * from a"));
data.add(SQLHelper.executeQuery("select * from b"));
data.add(SQLHelper.executeQuery("select * from c"));
data.add(SQLHelper.executeQuery("select * from d"));
return data;
}