前言
大概了解了什么是JDBC后,接下来再具体了解一下几个常用API功能.后面就可以使用这些API执行SQL语句
mysql驱动包
按照上面文章的步骤操作完成后,比较"硬核"的准备工作就OK了,接下来就来了解一下常用的API
API使用
注册驱动/获得连接
注册驱动
注册驱动语句可省略
- JDBC规范定义了驱动接口:
java.sql.Driver
- mysql8以前, mysql驱动包提供了实现类
com.mysql.jdbc.Driver
- mysql8+, mysql驱动包的实现类改为
com.mysql.cj.jdbc.Driver
加载注册驱动的方式 | 描述 |
---|---|
Class.forName(数据库驱动实现类) | 加载和注册数据库驱动 |
// 代码示例
public class JDBCTest01(){
public static void main(String[] args){
// 注册驱动(基于mysql8.0)(可省略)
Class.forName("com.mysql.jdbc.Driver");
}
}
获得连接
Connection
接口代码一个连接对象.具体的实现类由数据库的厂商实现- 使用
DriverManager
类的静态方式getConnection
可以获得数据库的连接
获得连接的静态方法 | 说明 |
---|---|
Connection getConnection(String url, String user, String password) | 通过连接字符串, 用户名, 密码 来获取数据库连接对象 |
String url
: mysql URL的格式jdbc:mysql://localhost:3306/数据库名称?其余参数
String user
: 登录数据库的用户名(一般是root)String password
: 登录数据库的密码
[注]
参考Java MySQL连接 | 菜鸟编程
// 代码示例
public class SqlConnection {
public static void main(String[] args) throws Exception{
// 1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2.获取连接 url, 用户名, 密码
//"jdbc:mysql://localhost:3306/grasg?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
String DATABASE = "grasg";
String USER = "root";
String PASSWORD = "316426";
String url = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
Connection con = DriverManager.getConnection(url,USER,PASSWORD);
System.out.println(con);
}
}
// 运行结果: com.mysql.cj.jdbc.ConnectionImpl@3c947bc5
获取语句执行平台
通过
Connection
的createStatement
方法,获取sql语句执行对象.(语句执行对象可以理解为"有权利执行sql的对象")Connection接口中的方法 说明 Statement createStatement()
创建SQL语句执行对象 Statement
: 代表一条语句对象,用于发送SQL语句给服务器,然后执行静态SQL语句并返回它所生成的结果Statement类 常用方法 说明 int executeUpdate(String sql)
执行insert,update,delete语句.返回int类型,代表受影响的行数 ResultSet executeQuery(String sql)
执行select语句,返回ResultSet结果集对象
// 代码示例
public class SqlCreateTable {
public static void main(String[] args) throws Exception{
// 1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取连接
String USER = "root";
String PASSWORD = "316426";
String DATABASE = "lianxi01";
String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3. 获取语句执行平台
// 通过Connection的createStatement方法获取sql语句执行对象
Statement sqlState = conn.createStatement();
// 4. 创建表
String sql = "CREATE TABLE test_01(id int, name varchar(20),age int);";
int i = sqlState.executeUpdate(sql);
System.out.println("获影响的行数为 = " + i);
System.out.println("SQL语句执行成功!");
// 5.关闭流(后创建的先关闭)
sqlState.close();
conn.close();
}
}
处理结果集(ResultSet接口)
只有在进行select查询操作时,才需要处理结果集
ResultSet接口方法 | 说明 |
---|---|
boolean next() | 游标向下一行; 返回boolean类型,如果还有下一条记录,返回true,否则返回false |
xxx getXxx(String or int) | 参数是String类型:表示通过<列名/字段名>获取数据; 参数是int类型:表示通过<列号/第几列>获取数据,从1开始 |
// 代码示例
public class SqlSelect {
public static void main(String[] args){
Connection conn = null;
Statement sqlExecute = null;
ResultSet resultSet = null;
try {
// 1.注册驱动 - 可以省略
//Class.forName("com.mysql.cj.jdbc.Driver");
// 2.连接数据库并获取连接
String USER = "root";
String PASSWORD = "316426";
String DATABASE = "lianxi01";
String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
conn = DriverManager.getConnection(URL,USER,PASSWORD);
// 3.获取语句执行平台(Statement对象)
sqlExecute = conn.createStatement();
// 4.执行select语句,返回的是一个ResultSet对象
String sql = "select * from test_01;";
resultSet = sqlExecute.executeQuery(sql);
// 5.处理结果集
/*System.out.println(resultSet.next());
int id = resultSet.getInt("id");
System.out.println("id = " + id);
String name = resultSet.getString("name");
System.out.println("name = " + name);
int age = resultSet.getInt("age");
System.out.println("age = " + age);*/
int id;
String name;
int age;
while(resultSet.next()){
id = resultSet.getInt("id");
name = resultSet.getString("name");
age = resultSet.getInt("age");
System.out.println("id = " + id + ", name = " + name + ", age = " + age);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
// 6.关闭流对象
try {
resultSet.close();
sqlExecute.close();
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
System.out.println("一切都关了!");
}
}
释放资源
- 需要释放的对象:
ResultSet
结果集(只有在执行select查询操作时才出现结果集,才需要关闭),Statement
对象,Connection
对象 - 释放原则: 先创建的后关,后创建的先关.
Result => Statement => Connection
- 放在
final
块中
步骤总结
- 获取驱动
- 获取连接
- 获取语句执行平台,即Statement对象
- 处理结果集(只在查询时处理)
- 关闭对象,释放资源
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。