java_第一年_JDBC(3)
事务
我们在通过JDBC连接数据库并开始交互时,默认情况下是自动提交的,有时由于为了保持业务流程的完整性、提高性能或是使用分布式事务,需要启动支持事务,此时的方法是调用Connection对象的setAutoCommit();传递布尔值false关闭默认自动提交:
conn.setAutoCommit(false);
提交事务:
conn.setAutoCommit();
数据库回滚操作:
conn.rollback();
配合数据库的回滚,我们可以先设置保存点,通过Connection对象的方法setSavepoint(String savepointName)可以定义新的保存点、releaseSavepoint(Savepoint savepointName)可以删除保存点;通过以下实例加深理解:
try{
conn.setAutoCommit(false);
stmt = conn.createStatement();
Savepoint savepoint1 = conn.setSavepoint("DELETED_1");
String SQL = "DELETE FROM employees WHERE ID =100";
stmt.executeUpdate(SQL);
conn.rollback(savepoint1);
Savepoint savepoint2 = conn.setSavepoint("DELETED_2");
SQL = "DELETE FROM employees WHERE ID =101";
stmt.executeUpdate(SQL);
conn.commit();
}catch(SQLException e){
e.printStackTrace();
}
异常
对于JDBC,要处理的异常最常见的是java.sql.SQLException。
发生异常后会将其重定向catch子句中,如果没有相应的catch子句在,则程序的执行会结束。
处理异常有以下方法:

批量处理SQL语句
需要先使用DatabaseMeteData.supportsBatchUpdates()方法来确认目标数据库是否支持批量处理,若支持则会返回true;
通过交互对象Statement中的addBatch()增加SQL语句,然后通过executeBatch()方法来批量处理,其返回一个整数数组,每个元素是相应更新语句的更新计数;可以使用clearBatch()方法来删除SQL语句,会将所有addBatch()增加的语句都删除,没法删除指定的语句
Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
String SQL = "INSERT INTO employees (id,age,first,last) VALUES(200,30,'ZHAO','XIAO')";
stmt.addBatch(SQL);
String SQL = "INSERT INTO employees (id,age,first,last) VALUES(201,35,'JIA','XIAO')";
stmt.addBatch(SQL);
int[] count = stmt.executeBatch();
conn.commit
获取自动生成的主键:
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键,这时候通常用getGeneratedKeys()方法获取主键
1. 获得数据库返回的主键
insert into book values(null,'编程珠玑',45);
2. 获得主键的步骤
conn.prepareStatement(sql,autoGeneratedKeys)
autoGeneratedKeys是一个int值 ,1代表返回生成的主键,2代表不返回生成的主键;为了方便记忆,使用 Statement.Statement.RETURN_GENERATED_KEYS,Statement.NO_GENERATED_KEYS
3.获得生成的主键
ResultSet rs=ps.getGeneratedKesy();
rs.next();
int userno= rs.getInt(1);
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE);
// ...
// 省略若干行
// ...
stmt.executeUpdate(
"INSERT INTO xxx (dataField) "
+ "values ('xxx')",
Statement.RETURN_GENERATED_KEYS); // 向驱动指明需要自动获取generatedKeys!
int autoIncKeyFromApi = -;
rs = stmt.getGeneratedKeys(); // 获取自增主键!
if (rs.next()) {
autoIncKeyFromApi = rs.getInt();
} else {
// throw an exception from here
}
rs.close();
rs = null;
System.out.println("Key returned from getGeneratedKeys():"
+ autoIncKeyFromApi);
} finally { ... }
java_第一年_JDBC(3)的更多相关文章
- java_第一年_JDBC(7)
Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...
- java_第一年_JDBC(2)
上篇说到,通过JDBC可实现java编程程序和mysql数据库进行连接并交互,而交互后所形成的结果集是通过ResultSet对象来操作的. 创建ResultSet对象: stmt = conn.cre ...
- java_第一年_JDBC(1)
JDBC(Java Data Base Connectivity),用于实现java语言编程与数据库连接的API. 数据库驱动:应用程序并不能直接使用数据库,而需要通过相应的数据库驱动程序后再操作数据 ...
- java_第一年_JDBC(6)
DataBaseMetaData对象:由Connection.getDataBaseMetaData()方法获得,可以用来获取数据库的元数据,提供的方法有: getURL():返回一个String类, ...
- java_第一年_JDBC(5)
事务概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功: 开始事务:start transaction 提交事务:commit 回滚事务:rollback 事务的四大特 ...
- java_第一年_JDBC(4)
注:该篇只是为了小白的我熟悉下JDBC的代码,练习篇 在mysql中建test测试库,并创建一张employees表,加入一些数据如下图: 通过JDBC连接对表中数据进行添加: package lzj ...
- java_第一年_JavaWeb(14)
EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...
- java_第一年_JavaWeb(13)
JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...
- java_第一年_JavaWeb(11)
自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...
随机推荐
- AI-sklearn 学习笔记(一)sklearn 一般概念
scikit-learn Machine Learning in Python Simple and efficient tools for data mining and data analysis ...
- ABBYY FineReader 14.0.107.232 Enterprise 下载和安装使用
目录 1. 按 2. 软件功能 3. 软件特色 4. 安装说明 5. 激活说明 6. 下载地址 1. 按 ABBYY FineReader 是款功能强大的OCR文字识别软件:它支持者用户进行使用文档的 ...
- Redis 复制功能详解
Redis 复制功能的几个重要方面: 1. 一个Master可以有多个Slave:2. Redis使用异步复制.从2.8版本开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replica ...
- flask之环境的搭建
一.查看ubantu上是否安装虚拟环境的包 virtualenv --version 这里显示的是:15.0.1的版本,如果没有的话, sudo pip install virtualenv sudo ...
- Oracle12c创建及删除PDB
在12C R1版本中只支持Global Shared Undo模式,所有container共享一个UNDO表空间:在12C R2引入了PDB Local Undo模式,每个container都有自己的 ...
- WIN7自带端口转发渗透小技巧
目标是WIN7 X64,且开启了防火墙,想要用他的机器去访问别的机器,又不想登陆他的系统,常规办法一般是上传一个htran,然后进行转发,但是对方有杀软,有被杀的可能性,所以我用另外一种办法达到我的目 ...
- 20180826(01)-Java数据结构
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举 (Enumeration) 位集合(BitSet) 向量 (Vector) 栈 (Sta ...
- [CSP-S模拟测试]:折纸(模拟)
题目描述 小$s$很喜欢折纸.有一天,他得到了一条很长的纸带,他把它从左向右均匀划分为$N$个单位长度,并且在每份的边界处分别标上数字$0\sim n$.然后小$s$开始无聊的折纸,每次他都会选择一个 ...
- codeforces 617 E. XOR and Favorite Number(莫队算法)
题目链接:http://codeforces.com/problemset/problem/617/E 题目: 给你a1 a2 a3 ··· an 个数,m次询问:在[L, R] 里面又多少中 [l, ...
- 相同name,取最小的id的值,mysql根据相同字段 更新其它字段
id name info1 a 1232 a 2353 a 1244 b 125 b 987相同name,取最小的id的值id name info1 a 1232 a 1233 a 1234 b 12 ...