文章目录
- 前言
- 一、JDBC是什么
- 二、JDBC工作原理
- 三、下载并导入mysql的驱动
- 3.1 下载mysql-connector-java-5.1.47.jar
- 3.2 idea项目导入jar包
- 四、JDBC的使用(完整代码见文末)
- 4.1 获取数据源
- 4.2 获取连接对象
- 4.3获取执行SQL的对象
- 4.4 执行查询或者更新操作
- 4.5 遍历结果集
- 4.6 关闭资源
- 五、完整代码
- 拓展
前言
博主个人社区:开发与算法学习社区 博主个人主页:Killing Vibe的博客 欢迎大家加入,一起交流学习~~
在连接数据库之前,本文章将讲解JDBC是什么?工作原理是什么?再逐渐深入~
一、JDBC是什么
JDBC: Java操作数据库的规范
java.sql : 无论现在通过Java操作哪个具体的数据库,数据库厂商实现的驱动包都需要满足JDBC的标准(接口)
二、JDBC工作原理
JDBC为多种关系数据库提供了统一的访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库层次结构:
- 不管是啥数据库 MySQL、SQLLite、Oracle 等都得实现JDBC的接口,对于程序员来说,不管操作啥数据库都是相同的套路,只是更换了具体子类(驱动)
- MySQL也一样,它提供的Java操作数据库的驱动包必须实现JDBC标准(类似于usb标准和usb驱动)
三、下载并导入mysql的驱动
下面告诉大家如何导入mysql的驱动包
3.1 下载mysql-connector-java-5.1.47.jar
资源链接:mysql-connector-java-5.1.47.jar
拓展:*.jar 就是把一系列编译好的class文件打包压缩后的文件,其他程序引入这个jar包就有了这个包中的所有类(等于别人写好的东西直接拿来用)
3.2 idea项目导入jar包
- 右键项目(模块)名,找到打开模块设置
- 找到 库 ,然后点击加号,把下载好的jar包导入进去
- 当外部库显示如下图,表示导入完成
四、JDBC的使用(完整代码见文末)
所有Java操作关系型数据库,无论是哪种数据库,套路都是一样的,JPA,MyBatis都是JDBC的封装而已。
其实连接数据库主要就分了六个步骤:
- 获取数据源DataSource,配置连接地址,用户名,密码等
- 获取连接对象,就是发送网络请求,建立和数据库的连接Connection
- 获取执行SQL的对象PreparedStatement对象,封装的SQL语句
- 执行更新操作 executeUpdate => int 本次更新受影响的行数;执行查询executeQuery => Result结果集
- 遍历结果集 ResultSet对象,每当调用一次next方法就从结果集中取出一行数据,resultSetXX(“列名”) => 获取本行数据的具体属性值
- 操作关闭之后关闭资源,resultSet,Connection对象
4.1 获取数据源
解释一下URL里面的内容:
1.请求协议,类似于https协议,MySQL的驱动包背后都是一些网络请求,操作数据库其实就是在发起网络请求
代码语言:javascript复制jdbc:mysql://
2.配置MySQL的IP和端口号,127.0.0.1 是本机IP,3306是端口号,类似于一个程序在操作系统中的一个id。test是要想连接的数据库名称(自定义)
代码语言:javascript复制127.0.0.1:3306/test
- 连接的字符集编码格式是UTF-8, 不发起ssl请求,加密请求,不安全的连接
characterEncoding=UTF-8&useSSL=false
4.2 获取连接对象
这一步才会向数据库服务器发起请求
4.3获取执行SQL的对象
sql 语句根据自己的数据库和表来写,这里仅作示例:
4.4 执行查询或者更新操作
1.执行更新操作 executeUpdate 返回 int 本次更新受影响的行数
2.执行查询executeQuery 返回 Result结果集
示例如下:
4.5 遍历结果集
每当调用一次next方法就从结果集中取出一行数据,resultSet.XX(“列名”) => 获取本行数据的具体属性值
4.6 关闭资源
数据库属于资源操作,一定要记得关闭资源,结果集对象,连接对象
五、完整代码
完整代码如下,仅作示例,相关属性需要根据自己实际情况修改
代码语言:javascript复制import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author Dianzhi Han
* @version 1.0
* @description: TODO
* @date 2022/10/27 20:24
*/
public class JdbcTest {
public static void main(String[] args) throws SQLException {
// 1.获取数据源 - 数据具体是从哪个数据库来的
// DataSource这个接口无论哪种具体的数据库驱动都要实现此接口,具体是什么数据库名称数据库名称 DataSource
// MySQLDataSource
// SQliteDataSource
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 设置数据源的连接地址,用户名,密码等属性
// 发起TCP请求,按照指定的协议(jdbc协议)连接到数据库的服务端
// 大家根据自己的MySQL的情况,数据库的名称,密码,用户名等等需要修改
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false");
dataSource.setUser("root");
dataSource.setPassword("123");
// 2.获取数据库连接 - Connection接口的对象
// 这一步才会向数据库服务器发起请求
Connection connection = dataSource.getConnection();
// 3.执行具体的SQL语句,每个SQL语句对应一个PrepareStatement对象
String sql = "select sex from teacher where username = ?";
PreparedStatement statement = connection.prepareStatement(sql);
// 1就是将第一个?的内容替换为具体的值(此处就把name = ? => name = 孙悟空)
// set数据类型要和数据库的列属性保持一致
statement.setString(1,"孙悟空");
// 4.具体执行操作,增删改 excuteUpdate() => int 本次修改操作受影响的行数
// 查询操作 select =》 excuteQuery() => ResultSet =》 查询结果集
ResultSet resultSet = statement.executeQuery();
// 5.遍历结果集
while (resultSet.next()) {
String pass = resultSet.getString("sex");
System.out.println(pass);
}
// 6.数据库属于资源操作,一定要记得关闭资源,结果集对象,连接对象
resultSet.close();
connection.close();
}
}
拓展
- 获取数据源有两种方式,一个是DataSource(实际用到的),另一种是DriverManager(不推荐使用),关于两者的区别这里就不展开了
- 具体执行SQL的对象也有两种方式,一个是PreparedStatement对象(推荐使用),另外一个是Statement对象(不推荐使用),两者区别大家可以去网上看一下~