【笔记】JDBC学习笔记

前言

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>"):

关闭数据库连接

  • 遵循后开先关的原则

关闭执行语句

1
resultSet.close();

关闭sql语句

关闭静态sql语句

1
statement.close();

关闭动态sql语句

1
prepareStatement.close();

关闭数据库连接

1
connection.close();

占位符

  • 在动态sql语句中,常用?表示占位符
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);

提交事务

1
connection.commit();

回滚事务

  • Java中通常在catch代码块中进行回滚事务
1
connection.rollback();

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);

完成

参考文献

哔哩哔哩——黑马程序员
哔哩哔哩——黑马程序员