前言
JDBC学习笔记
准备工作
加载驱动
低版本mysql
1
| Class.forName("com.mysql.jdbc.Driver");
|
高版本mysql
- 5.x以后的版本可以省略
Class.forName()
,JDBC会自动注册驱动
1
| Class.forName("com.mysql.cj.jdbc.Driver");
|
创建字符串连接
<database>
:数据库名
低版本mysql
1
| Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/<database>", "root", "123456");
|
高版本mysql
serverTimezone=UTC
:添加时区配置
useSSL=false
:禁用安全连接,以达到压制IDEA的控制台警告提示的目的
useServerPrepStmts=true
:开启动态SQL语句
1
| Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/<database>?serverTimezone=UTC", "root", "123456");
|
简写
- 如果连接的是本机,且使用的是默认端口号3306,那么可以省略域名和端口号
1
| Connection connection = DriverManager.getConnection("jdbc:mysql:///<database>?serverTimezone=UTC", "root", "123456");
|
sql语句
静态sql语句
1
| Statement statement = connection.createStatement();
|
动态sql语句
1
| PrepareStatement prepareStatement = connection.prepareStatement();
|
执行sql语句
- DDL:对数据库和数据表的增删改查操作
- DML:对数据的增删改操作
- DQL:对数据的查询操作
<sql>
:sql语句
执行DDL操作的语句
- 返回成功执行的行数,如果执行失败返回0
- 可以是对数据表的操作,也可以是对数据库的操作
1
| int rows = statement.executeUpdate("<sql>");
|
执行DML操作的语句
- 返回成功执行的行数,如果执行失败返回0,如果是删除数据库也会返回0,通常只要DDL语句不报错就是执行成功了
1
| int result = statement.executeUpdate("<sql>");
|
执行查询语句
1
| ResultSet resultSet = statement.executeQuery("<sql>");
|
处理结果集
返回int类型
<int>
:字段索引,从1开始
<string>
:字段名
1 2
| rs.getInt("<int>"); rs.getInt("<string>"):
|
返回String类型
1 2
| rs.getString("<int>"); rs.getString("<string>"):
|
关闭数据库连接
关闭执行语句
关闭sql语句
关闭静态sql语句
关闭动态sql语句
1
| prepareStatement.close();
|
关闭数据库连接
占位符
1
| String sql = "INSERT INTO <table> (username, password, nickname) values(?, ?, ?)";
|
替换占位符
<parameterIndex>
:参数下标,从1开始
<x>
:相对应数据类型的值
1 2 3 4 5 6 7
| prepareStatement.setByte(<parameterIndex>, <x>); prepareStatement.setShort(<parameterIndex>, <x>); prepareStatement.setInt(<parameterIndex>, <x>); prepareStatement.setLong(<parameterIndex>, <x>); prepareStatement.setDouble(<parameterIndex>, <x>); prepareStatement.setFloat(<parameterIndex>, <x>); prepareStatement.setString(<parameterIndex>, <x>);
|
JDBC中的事务
开启事务
- 因为JDBC中默认事务是开启状态,所以当关闭JDBC自动提交事务后,实质上就是开启事务
1
| connection.setAutoCommit(false);
|
提交事务
回滚事务
JDBC设置隔离级别
1
| Connection.setTransactionIsolation(int level);
|
设置隔离级别为 读未提交
1 2 3
| Connection.setTransactionIsolation(1);
Connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
|
设置隔离级别为 读已提交
1 2 3
| Connection.setTransactionIsolation(2);
Connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
|
设置隔离级别为 可重复读
1 2 3
| Connection.setTransactionIsolation(4);
Connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
|
设置隔离级别为 串行化
1 2 3
| Connection.setTransactionIsolation(8);
Connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
|
不使用事务
1 2 3
| Connection.setTransactionIsolation(0);
Connection.setTransactionIsolation(Connection.TRANSACTION_NONE);
|
完成
参考文献
哔哩哔哩——黑马程序员
哔哩哔哩——黑马程序员