【MySQL】JDBC编程

MySQL(七)JDBC编程

一、驱动包

1.性质

1.1底层差异性

1.2JDBC接口统一性

2.导入

2.1复制导包

2.2标记作库

二、JDBC编程

1.寻找资源

1.1URL

1.1.1网址作用

1.1.2主机IP

1.1.3端口号

1.1.4数据库名

1.1.5访问资源参数

2.访问认证

2.1身份

2.2密码

3.连接通道

4.数据传输

4.1创建传输包

4.1.1创建sql

4.1.1.1+拼接变量

4.1.1.2?替换变量

4.2发送传输包

4.2.1发送写sql

4.2.2发送读sql

4.2.2.1遍历记录

4.2.2.2读取记录

5.回收资源

5.1销毁结果集合

5.2销毁传输包

5.3销毁通道


一、驱动包

1.性质

1.1底层差异性

应用程序 都是用代码 写出来的,++不同的应用程序,其设计时的编程模范 会不同++ ,所以 为编程语言 代码操作使用层 设计给的驱动包里 类与接口的范式 也就会随着 对应上底层程序的代码 而不同


1.2JDBC接口统一性

在数据库应用程序里,++Java规定了 必须以Java设计的 数据库编程接口JDBC 来操作使用数据库++ ,所以各数据库厂商 就多设计了 底层接口 等效形式转化成 JDBC接口的 驱动程序,使得Java 用JDBC统一了 所有数据库的API接口


2.导入

任何应用程序的 编程层操作使用,都需要++将 应用程序设计好的 实现使用功能的 类与接口 通过驱动包导入 进编程项目 中 作为第三方库使用++

2.1复制导包

驱动包 复制导入 要作为第三方库的 目录

所有的.java文件 加载成 许多.class文件,所有的.class文件 整理打包好 到一个.jar压缩包文件 进行程序发布的


2.2标记作库

驱动包所处的目录 标记成 第三方库


二、JDBC编程

1.寻找资源

java 复制代码
DataSource dataSource = new MysqlDataSource();

((MysqlDataSource)dataSource).setUrl(String_URL);

mysql数据源 通过URL网址 找到mysql服务器 所在网络上的 具体资源位置

1.1URL

"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false"

1.1.1网址作用

jdbc:mysql 表明该网址 是用来给 jdbc程序操作mysql 使用的


1.1.2主机IP

127.0.0.1 是jdbc要操作的 mysql服务器的 所处主机的 网络IP地址,当jdbc应用程序 本身所处的主机 就同是mysql服务器所处的 同台主机时,使用127.0.0.1环回IP 指向应用程序自己所处的主机 即就指向了 mysql服务器主机的位置


1.1.3端口号

一台主机上 有许多的应用程序 都要操作网络,3306mysql与网络对接的 端口号


1.1.4数据库名

确定jdbc 要操作mysql服务器里的 哪个数据库


1.1.5访问资源参数

键对应填值 的形式填写参数,键值对之间 用**&**分隔

characterEncoding=utf8 --- 以utf8字符集 进行数据库与应用程序的 数据传输

useSSL=false --- 数据库与应用程序之间的网络通信 中间是否要加密


2.访问认证

2.1身份

((MysqlDataSource)dataSource).setUser(String_Ident);

mysql数据源 确定jdbc 访问数据库的身份,root 是mysql默认自带有的用户(管理员)

2.2密码

((MysqlDataSource)dataSource).setPassword(String_Passworld);

mysql数据源 确定jdbc 访问数据库的密码


3.连接通道

dataSource.getConnection();

---> return Connection

数据源 寻找并成功访问上之后,数据源 向jdbc 建立连接通道,后续在通道中进行 请求-响应 的交互


4.数据传输

4.1创建传输包

connection.prepareStatement(String_sql);

---> return PreparedStatement

在连接通道中 创建传输包,将要发送的 sql语句字符串 存储在传输包中,传输包 会进行sql语句的 预处理解析、检查 并把解析的结构化数据打包,++在应用程序这边 完成++解析检查这部分的工作,减少了mysql服务器的 开销负担

4.1.1创建sql
4.1.1.1+拼接变量
java 复制代码
String sql = "insert into student values("+id+",' "+name+" ')";

变量 可直接**+拼接进sql语句字符串,但这样会使得 可以通过在sql语句中 对变量输入非法内容 实现对数据库的攻击**,不安全

4.1.1.2?替换变量
java 复制代码
String sql = "insert into student values(?,?)";
connection.prepareStatement(sql);

preparedStatement.setDatatype(下标,变量);

使用占位符? 先替入 后规范换 的方式 可将变量安全替换进 sql字符串中,占位符的下标是从1开始的


4.2发送传输包

4.2.1发送写sql

preparedStatement.executeUpdate();

---> return int

传输包 以写的形式 将自己发送到数据库服务器 执行,返回数据库中 影响到的行数

4.2.2发送读sql

preparedStatement.executeQuery();

---> return ResultSet

传输包 以读的形式 将自己发送到数据库服务器 执行,返回 查询结果临时表的 结果集合


4.2.2.1遍历记录
java 复制代码
while (resultSet.next()) {

}

resultSet.next();

---> return boolean

从临时表的 第0个记录开始,往后 保存光标位置遍历 取得一个记录,遍历到表尾空时 返回false


4.2.2.2读取记录

result.getDatatype("col_name");

---> return Datatype

获取 遍历所处记录的 指定字段数据


5.回收资源

后获取到的资源先释放 的顺序 回收资源

5.1销毁结果集合

resultSet.close();

5.2销毁传输包

preparedStatement.close();

5.3销毁通道

connection.close();

相关推荐
2301_7807896615 小时前
渗透测试与网络安全审计的关系
网络·数据库·安全·web安全·网络安全
数据爬坡ing16 小时前
C++ 类库管理系统的分析与设计:面向对象开发全流程实践
java·运维·开发语言·c++·软件工程·软件构建·运维开发
我是海飞16 小时前
Tensorflow Lite 的yes/no语音识别音频预处理模型训练教程
python·学习·tensorflow·音视频·嵌入式·语音识别
know__ledge16 小时前
Python学习3.0使用Unittest框架运行测试用例
python·学习·测试用例
DKPT16 小时前
JVM新生代和老生代比例如何设置?
java·开发语言·jvm·笔记·学习
罗光记16 小时前
Karmada v1.15 版本发布
数据库·百度·facebook·oneapi·segmentfault
知彼解己16 小时前
JVM 运行时数据区域
java·开发语言·jvm
绝无仅有16 小时前
从拉取代码到前端运行访问:Vue 前端项目的常规启动流程
后端·面试·github
小蒜学长16 小时前
spring boot驴友结伴游网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
江团1io016 小时前
一篇文章带你彻底搞懂 JVM 垃圾收集器
java·开发语言·jvm