JDBC
JDBC: java database connection
需要jar包的支持:
- java.sql
- javax.sql
- mysql-conneter-java… 连接驱动(必须导入)
步骤
普通步骤
导入数据库依赖
1
2
3
4
5
6<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>加载驱动
连接数据库, 代表数据库
向数据库发送SQL的对象statement: CRUD
执行查询, 返回一个result
关闭连接
1 | public class TestJDBC { |
预编译
1 | public class TestJDBC2 { |
这里需要注意, 插入中文字符时可能会变成问号, 先查看并修改数据库的字符集:
1 | SHOW CREATE DATABASE book; //查看库的字符集 |
事物
要么都成功, 要么都失败
ACID原则: 保证数据的安全
1 | 开启事物 |
创建一个表, 模拟转账:
1 | create table account |
插入值:
1 | insert into account(name, money) VALUES ('A', 1000); |
执行:
1 | start transaction; # 开启事物 |
结果为:
没有变化的原因是没有提交事物.
添加提交语句后:
1 | start transaction; # 开启事物 |
结果达到预期, 不再贴出
在commit
前加上rollback
就能保证无论出现什么错误或者做了什么操作都能回滚到开始事物时的状态.
在JDBC中编写如下:
1 |
|
这里是利用了Java的try/catch/finally的异常处理机制, 把rollback
操作放在catch语句中, 只要try 语句中出现了异常, 那么就会执行回滚操作, 并抛出异常, 把关闭连接的操作放在finally 语句中, 这是一定会执行的.
输出结果为:
可见, 抛出了异常, 数据库的表格也没有变化
如果将故意制造的异常删去, 则能够达到要求完成转账.