Maven 依赖
https://mvnrepository.com/artifact/mysql/mysql-connector-java
1 | <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> |
注册驱动(MySQL 8.0 跳过)
1 | // MySQL 8.0 以上版本 |
1 | // MySQL 8.0 以下版本 |
MySQL 8 以上可以不用注册
实测第一次运行还是得注册,最好加上
DriverManager类中有这样的注释:
1 | * <P>Applications no longer need to explicitly load JDBC drivers using <code>Class.forName()</code>. Existing programs |
所以不用注册也能使用
连接数据库
1 | static final String DB_URL = "jdbc:mysql://localhost:3306/DATABASE_NAME?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"; |
useSSL=false
禁用安全链接
打开链接:
1 | static final String USER = "root"; |
执行
Statement stmt = connection.createStatement();
获取执行sql的对象
int count = stmt.executeUpdate(String sql)
返回受影响的行数
释放资源
1 | statement.close(); |
Connection
获取执行对象:
Statement createStatement()
获取普通执行SQL对象
PreparedStatement prepareStatement(sql)
预编译SQL的SQL执行对象,防止SQL注入
CallableStatement prepareCall(sql)
执行存储过程的对象(存储过程 并不常用)
事务管理:
对MySQLD 一系列操作,完全执行和不执行,二选一
开启:
setAutoCommit(boolean autoCommit)
参数:true 自动提交;false 手动提交,即开启事务
提交COMMIT:
commit()
回滚ROLLBACK:
rollback()
Statement 执行语句
int executeUpdate(sql);
DML DDL 语句(增删改)。
返回受影响的行数,DDL(Data Definition Language)语句执行成功也可能返回0
ResultSet executeQuery(sql);
DQL 语句(查询)
ResultSet
封装DQL查询语句的结果
ResultSet 对象的可滚动性
Statement createStatement()
默认不可滚动
Statement createStatement(int rsType, int rsConcurrenty) throws SQLException
rsType参数,添加到ResultSet接口中指示其对象类型:TYPE_FORWARD_ONLY
:(默认)创建不可滚动的结果集TYPE_SCROLL_INSENSITIVE
:指定ResultSet游标能够在两个方向移动。
在处理ResultSet期间对ResultSet底层数据的改变不会反映在ResultSet中,除非程序再次查询数据库TYPE_SCROLL_SENSITIVE
:指定ResultSet游标能够在两个方向移动。
在处理ResultSet期间对ResultSet底层数据的改变会立即反映在ResultSet中
rsConcurrenty参数,用于指定结果集是只读的还是可更新的:CONCUR_READ_ONLY
(默认)指定不能更新ResultSet(即对ResultSet内容的更改不会通过ResultSet的更新方法反映在数据库中)CONCUR_UPDATABLE
指定能够更新ResultSet(即对ResultSet内容的更改会通过ResultSet的更新方法反映在数据库中)
method
boolean next()
将光标从当前位置(默认在数据行的上一行)向下移动一行
返回 是否为有效行
xxx getXxx(int num, String name)
获取数据,参数是 列的编号(从1开始)、列的名称
last()
可滚动状态下,指针到最后一行
beforeFirst()
指针回到开始位置