JDBC——Java连接数据库技术
1.JDBC概述
——JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。
JDBC规范定义接口,具体的实现由各大数据库厂商来实现。
2.使用JDBC的好处
- 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
- 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库
3.JDBC开发使用到的包
package | 说明 |
---|---|
java.sql | 所有与 JDBC 访问数据库相关的接口和类 |
javax.sql | 数据库扩展包,提供数据库额外的功能。如:连接池 |
数据库的驱动 | 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类 |
4.JDBC执行流程
1. 导入驱动jar包
2. 加载和注册驱动
加载和注册驱动的方法 | 描述 |
---|---|
Class.forName(数据库驱动实现类) | 加载和注册数据库驱动,“com.mysql.jdbc.Driver” |
例如:
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException {
//抛出类找不到的异常,注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
}
}
查看com.mysql.jdbc.Driver 源代码:
public class Driver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver()); //注册数据库驱动
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
注:从 JDBC3 开始,目前已经普遍使用的版本。可以不用注册驱动而直接使用,即Class.forName这句话可以省略。
3. 建立java与数据库之间的连接
----建立连接需要用到DriverManager类中静态方法
DriverManager | 描述 |
---|---|
Connection getConnection (String url, String user, String password) | 通过连接字符串,用户名,密码来得到数据库的连接对象 |
- 方法中的参数说明
参数 | 说明 |
---|---|
user | 数据库的登录用户名 |
password | 数据库登录的密码 |
url | 不同的数据库 url是不同的,mysql 的写法jdbc:mysql://localhost:3306/数据库 |
- 连接数据库的 URL 地址格式:
协议名:子协议://服务器名或 IP 地址:端口号/数据库名
注:localhost指的是本地主机端口号,如果不是本地主机,要用IP地址
- 代码演示:
//建立数据库连接
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";
Connection coon = DriverManager.getConnection(url,user,password);
4.获取数据库操纵对象
- Connection接口的作用:具体的实现类由数据库的厂商实现,代表一个连接对象。
Connection 接口中的方法 | 描述 |
---|---|
Statement createStatement() | 创建一条 SQL 语句对象 |
- 代码演示:
//获取数据库操作对象
Statement s = coon.createStatement();
5.执行sql语句
- Statement 接口:代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所Th成结果的对象。
Statement 接口中的方法 | 描述 |
---|---|
int executeUpdate(String sql) | 用于发送 DML 语句,增删改的操作,insert、update、delete参数:SQL 语句返回值:返回对数据库影响的行数 |
ResultSet executeQuery(String sql) | 用于发送 DQL 语句,执行查询的操作。select参数:SQL 语句返回值:查询的结果集 |
- 代码演示:
//执行sql语句
s.executeUpdate("insert into salary values(1,'123.0','2620','15616')");
6.关闭连接
- 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
- 释放原则:先开的后关,后开的先关。ResultSet ->Statement -> Connection
- 放在哪个代码块中:finally 语句块中
- 代码演示:
//关闭连接
s.close();
coon.close();
5.JDBC访问数据库的步骤
另外,当我们执行的是查询语句时,返回的往往是一个结果集,此时就需要用到ResultSet接口。
ResultSet接口:
- 作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。
ResultSet 接口中的方法 | 描述 |
---|---|
boolean next() | 游标向下移动 1 行;返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false |
数据类型 getXxx() | 通过字段名,参数是 String 类型。返回不同的类型;通过列号,参数是整数,从 1 开始。返回不同的类型 |
- 常用数据类型转换表
关于Resultset使用的注意事项: - 如果光标在第一行之前,使用 rs.getXX()获取列值,报错:Before start of result set
- 如果光标在最后一行之后,使用 rs.getXX()获取列值,报错:After end of result set
- 使用完毕以后要关闭结果集 ResultSet,再关闭 Statement,再关闭 Connection
关于数据库的其他使用,请关注我的数据库工具类——JdbcUtils