PreparedStatement批量处理和事务
- PreparedStatement批量处理和事务代码如下:
- /*
- * PreparedStatement:
- 1.addBatch() 将一组参数添加到 PreparedStatement对象内部
- 2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
- *
- */
- public class PreparedStatementCommitAndRollback {
- public static void main(String args[]) {
- Connection con = null;
- PreparedStatement pstm = null;
- try {
- // 1. 建立与数据库的连接
- con = JDBCUtil.getConnection();
- // 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) 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
- pstm.executeBatch();
- System.out.println("插入成功!");
- // 若成功执行完所有的插入操作,则正常结束
- con.commit();//2,进行手动提交(commit)
- System.out.println("提交成功!");
- con.setAutoCommit(true);//3,提交完成后回复现场将Auto commit,还原为true,
- } catch (SQLException e) {
- try {
- // 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态
- if(!con.isClosed()){
- con.rollback();//4,当异常发生执行catch中SQLException时,记得要rollback(回滚);
- System.out.println("插入失败,回滚!");
- con.setAutoCommit(true);
- }
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- }finally{
- JDBCUtil.closePreparedStatement(pstm);
- JDBCUtil.closeConnection(con);
- }
- }
- }
- 这是Statement的代码,同上:
- stm = con.createStatement();
- 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将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
- */
- stm.executeBatch();
PreparedStatement批量处理和事务相关推荐
- PreparedStatement批量执行sql
2019独角兽企业重金招聘Python工程师标准>>> 案例: 工具方法: public static Connection getConnection(){try {Class.f ...
- JDBC:PreparedStatement 插入BLOB类型的数据,PreparedStatement 批量处理,Connection 事务处理
JDBC:PreparedStatement 插入BLOB类型的数据,PreparedStatement 批量处理,Connection 事务处理 每博一文案 村上春树说: 你要做一个不动声色的大人了 ...
- mysql preparedstatement 批量update,PreparedStatement的批量更新的有关问题(只执行最后一条插入语句)...
PreparedStatement的批量更新的问题(只执行最后一条插入语句) 本帖最后由 zhrubin 于 2014-07-07 10:47:41 编辑 后台是MySql,大家有没有碰到添加了很多a ...
- PreparedStatement批量处理的一个Framework(原创)
场景: 批量进行DML操作,但涉及的表不同,不能使用executeBatch() 需求: (1)如果DML中有一个错误时,要全部回滚: (2)如果全部正确,要全部执行: 解决方案: package j ...
- java jdbc 批量更新_java – JDBC PreparedStatement,批量更新和生成的密钥
我在批处理中使用jdbc preparedStatement并尝试获取由此创建的生成密钥时出现问题. 代码 : PreparedStatement stmt = null; ... connectio ...
- 多线程的SqlBulkCopy批量导入、事务和SqlBulkCopy使用的数据集中自定义映射字段的注意事项
class Program { static volatile bool result; static void Main(string[] args) { DataSet ds = ExportDa ...
- php prepare 批量,PreparedStatement批处理
PreparedStatement批量更新关键代码 无 import java.sql.Connection;import java.sql.PreparedStatement; //...Strin ...
- mysql 消息队列_一个简单的 MySQL 批量事务消息队列
基于 MySQL 的批量事务消息队列 消息队列本质上是一个存储介质,通常是链表结构,不同的进程或线程可以向消息队列中写入或读取消息.消息队列的使用场景有很多,比如异步处理任务.应用解耦.流量削锋等等. ...
- java事务以及批量更新
java事务以及批量更新 1.概念简介 事务是一步或多部数据库操作序列组成的逻辑单元,这系列操作要么全部执行,要么全部放弃执行. 2.注意 一个事务可以由一组DML组成或者一个DDL语句或者一个D ...
- JDBC高级特性(一)结果集,批量更新
一.ResultSet的高级特性 1 可滚动ResultSet 1)向前和向后滚动 滚动特性 在JDBC初期版本号中, ResultSet仅能向前滚动 在JDBC兴许版本号中, ResultSet默认 ...
最新文章
- 09_Mybatis开发Dao方法——mapper代理开发规范
- thymeleaf报错:Could not load content for xxx /css/bootstrap.min.css.map:HTTP error: status
- 【C++20】vs2019使用modules的实际操作
- lamp/lnmp实例
- Android 高级Drawable资源---复合Drawable----变换Drawable
- 听一听蚂蚁金服机器学习算法中台周俊谈共享智能技术实践:如何降低数据共享的难度?
- sklearn.fit_两个小时后仍在运行吗? 如何控制您的sklearn.fit。
- Quick BI v3.0版本全新起航——2018杭州云栖大会
- linux pe大小,lvm中的pe默认是4M 最大能支持多大 1T?2T
- 无代理备份和应用程序感知
- # 2017-2018-1 20155224 《信息安全系系统设计基础》第四周MyOD
- 双非二本院校,北京211,字节跳动 → 一个新秀的六年
- luogu1970 花匠
- 计算机故障基本维修方法,11种打印机常见故障维修方法
- php微信消息通知,php实现微信小程序消息通知
- 转 为什么数码相机可以拍出彩色照片?
- 这是一个只有一句话的木MA
- Google 搜素技巧分享
- 电路设计布线技巧十规则
- 普元应用服务器高可靠方案
热门文章
- 我是如何在GitHub上开源一个项目的(截图说明) (VS2010可以安装git插件)
- 《剑指offer》面试题20——顺时针打印矩阵(C++)
- 洛谷——【数据结构1-1】线性表
- 林草资源调查监测数据下载
- 算法笔记-----归并排序
- Flutter之Dialog 简单使用
- Android RecyclerView之SnapHelper原理解析(一)
- java线程知识点拾遗(CAS)
- linux shell写日志,Linux shell编程之文件内容写入和日志记录
- android流媒体架构,基于Android平台的流媒体播放器的设计与实现