14. JDBC
什么是JDBC:Java链接数据库
需要jar包的支持:
- java.sql
- javax.sql
- mysql-connector-java…连接驱动
实验环境搭建
CREATE TABLE users (
id INT PRIMARY KEY,
`name` VARCHAR(40),
`password` VARCHAR(40),
email VARCHAR(60),
birthday date
);
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(1,'张三','123456','zs@qq.com','2002-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(2,'李四','123456','ls@qq.com','2000-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(3,'王五','123456','ww@qq.com','2001-01-01');
SELECT * FROM users;
导入数据库依赖
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
IDEA中的数据库:
JDBC固定步骤:
- 加载驱动
- 连接数据库,代表数据库
- 向数据库发送SQL的对象Statement,PreparedStatement:CRUD
- 编写SQL
- 执行SQL
- 关闭连接
预编译SQL
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
String url = "jdbc:mysql://localhost:3306/web_jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC";
String username = "root";
String password = "123456";
//1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url, username, password);
//3. 编写sql
String sql = "insert into users(id, name, password, email, birthday) values(?,?,?,?,?);";
//4. 预编译
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1,5);//第一个占位符?赋值为1
ps.setString(2,"啦啦啦");
ps.setString(3,"123456");
ps.setString(4,"123465@qq.com");
ps.setDate(5,new Date(new java.util.Date().getTime()));
//5. 执行SQL
int i = ps.executeUpdate();
if (i>0) {
System.out.println("插入成功");
}
//6. 关闭连接释放资源 (一定)先开的后关
ps.close();
connection.close();
}
*找了小bug:*for the right syntax to use near ‘?,?,?,?)’
1、符号错误,比如 ? ,等打成中文字符。
2、执行语句时写成如下形式:
pst.executeUpdate(sql);
而占位符语句不能用带有参数的executeUpdate()方法执行。若sql语句使用写死的语句则可以使用带参的方法。
解决方案:
1、重敲错误位置的字符。
2、执行语句去掉“sql”:执行pst.executeUpdate();
事务
要么都成功,要么都失败!
ACID原则:保证数据的安全。
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 - 一致性(Consistency)
事务前后数据的完整性必须保持一致。 - 隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 - 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
开启事务
事务提交 commit()
事务回滚 rollback()
关闭事务
转账:
A:1000
B:1000
A(900) --100--> B(1100)