statement与preparedStatement批量操作(转)
原⽂:blog.csdn/etttttss/article/details/16819547
PreparedStatement:
批量更新sql语句1) addBatch()将⼀组参数添加到PreparedStatement对象内部。
2) executeBatch()将⼀批参数提交给数据库来执⾏,如果全部命令执⾏成功,则返回更新计数组成的数组。
Statement:
1) addBatch(String sql)⽅法会在批处理缓存中加⼊⼀条sql语句。
2) executeBatch()执⾏批处理缓存中的所有sql语句。
注意:PreparedStatement中使⽤批量更新时,要先设置好参数后再使⽤addBatch()⽅法加⼊缓存。批量更新中只能使⽤更改、删除或插⼊语句
package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
/**//*
*1,⾸先把Auto commit设置为false,不让它⾃动提交
*2,进⾏⼿动提交(commit)
*3,提交完成后回复现场将Auto commit,还原为true,
*4,当异常发⽣执⾏catch中SQLException时,记得要rollback(回滚);
* */
public class StatementCommitAndRollbackTest {
public static void main(String args[]) {
Connection con = null;
Statement stm = null;
try {
con = ConnectionBao();
stm = ateStatement();
con.setAutoCommit(false);
// 若不出现异常,则继续执⾏到try语句完,否则跳转到catch语句中
stm.addBatch("insert into student values(23,'tangbao','⾼数',100)");
stm.addBatch("insert into student values(24,'王定','c#',98)");
stm.addBatch("insert into student values(25,'王国云','java',90)");
stm.addBatch("insert into student values(26,'溜出','英语',89)");
stm.addBatch("insert into student values(27,'wqde','java',63)");
/**//*
* int[] executeBatch() throws
* SQLException将⼀批命令提交给数据库来执⾏,如果全部命令执⾏成功,则返回更新计数组成的数组。
*/
System.out.println("插⼊成功!");
// commit:若成功执⾏完所有的插⼊操作,则正常结束
conmit();
System.out.println("提交成功!");
con.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
try {
//rollback: 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态
if (!con.isClosed()) {
System.out.println("提交失败,回滚!");
con.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
} finally {
JDBCConAndClo.closeStatement(stm);
JDBCConAndClo.closeConnection(con);
}
}
}
}
PreparedStatement批量处理和事务代码如下:
package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
/**//*
* PreparedStatement:
1.addBatch() 将⼀组参数添加到 PreparedStatement对象内部
*/
public class PreparedStatementCommitAndRollbackTest {
public static void main(String args[]) {
Connection con = null;
PreparedStatement pstm = null;
try {
// 1. 建⽴与数据库的连接
con = ConnectionBao();
// 2. 执⾏sql语句
// 1).先创建PreparedStatement语句(发送slq请求):
pstm = con.prepareStatement("insert into student values(?,?,?,?)");
con.setAutoCommit(false);//1,⾸先把Auto commit设置为false,不让它⾃动提交
// 2) 设置sql语句1
pstm.setInt(1, 33);
pstm.setString(2,"wangqin");
pstm.setString(3, "c++");
pstm.setDouble(4, 78.5);
// 3) 将⼀组参数添加到此 PreparedStatement 对象的批处理命令中。
pstm.addBatch();
// 2) 设置sql语句2
pstm.setInt(1, 34);
pstm.setString(2,"wuytun");
pstm.setString(3, "c");
pstm.setDouble(4, 77);
// 3) 将⼀组参数添加到此 PreparedStatement 对象的批处理命令中。
pstm.addBatch();
/
/ 2) 设置sql语句3
pstm.setInt(1, 31);
pstm.setString(2,"tetet");
pstm.setString(3, "c++");
pstm.setDouble(4, 90);
// 3) 将⼀组参数添加到此 PreparedStatement 对象的批处理命令中。
pstm.addBatch();
// 2) 设置sql语句4
pstm.setInt(1, 32);
pstm.setString(2,"liug");
pstm.setString(3, "c");
pstm.setDouble(4, 50);
// 3) 将⼀组参数添加到此 PreparedStatement 对象的批处理命令中。
pstm.addBatch();
// 4) 将⼀批参数提交给数据库来执⾏,如果全部命令执⾏成功,则返回更新计数组成的数组。
System.out.println("插⼊成功!");
// 若成功执⾏完所有的插⼊操作,则正常结束
conmit();//2,进⾏⼿动提交(commit)
System.out.println("提交成功!");
con.setAutoCommit(true);//3,提交完成后回复现场将Auto commit,还原为true,
} catch (SQLException e) {
e.printStackTrace();
try {
// 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态
if(!con.isClosed()){
System.out.println("插⼊失败,回滚!");
con.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
JDBCConAndClo.closePreparedStatement(pstm);
JDBCConAndClo.closeConnection(con);
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论