JDBC编程步骤、JDBC API详解和数据库连接池

news/2024/11/19 11:32:53/

前言:

JDBC 就是使用Java语言操作关系型数据库的一套API ,全称:( Java DataBase Connectivity ) Java 数据库连接。官方(sun公司)定义的一套操作所有关系型数据库的规则,即

接口各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

JDBC的好处:

各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发可随时替换底层数据库,访问数据库的Java代码基本不变。

ab49fae5146b45eda752400147fc1611.png

使用JDBC需要由数据库厂商提供驱动包,可以在中央仓库下载好驱动包导入项目。

中央仓库地址:https://mvnrepository.com/search?q=mysqlhttps://mvnrepository.com/search?q=mysql

JDBC编程步骤

JDBC编写代码具体步骤:

1.创建工程,导入驱动jar包

db8fc337f53e4bb0944c167f7da7d63e.png

037e6de9dc764e55978e28e2f80433fa.png 

2.注册驱动

7600a490c07441d7b0ed3ea809ba9765.png

3.获取连接

c0d8d596a1ee4deebed50bbf60f39fc3.png 4.拼装sql语句

c129c935c542456ca60793e8c4b73c15.png

 5.获取执行sql对象并填充占位符

3ce19ba398274810a766dc0ce98aa5f5.png

 6.执行sql

ecc4f7969e1743188295032608b2aee4.png

7.处理结果

8.释放资源

注意:mysql 5 以后注册驱动可以省略了。

JDBC编程示例:

public static void main(String[] args) throws Exception {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接String url = "jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf8&useSSL=false";String username = "root";String password = "1234";Connection connection = DriverManager.getConnection(url,username,password);//3.拼装sqlString sql = "select * from account";//获取执行sql的对象Statement statement = connection.createStatement();//执行sqlResultSet ret = statement.executeQuery(sql);List<Account> list = new ArrayList<>();while (ret.next()){Account account = new Account();account.setId(ret.getInt(1));account.setName(ret.getString(2));account.setMoney(ret.getString(3));list.add(account);}System.out.println(list);//释放资源ret.close();statement.close();connection.close();
}

JDBC API详解

DriverManager

DriverManager(驱动管理类)作用:注册驱动和获取数据库连接。

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");

查看Driver类源码:

e8643d3c2fed4888b4efb8e1937450ad.png

在该类中的静态代码块中已经执行了 DriverManager 对象的registerDriver() 方法进行驱动的注册了,那么我们只需要加载 Driver 类,该静态代码块就会执行。而 Class.forName("com.mysql.jdbc.Driver"); 就可以加载Driver 类。MySQL 5之后的驱动包,可以省略注册驱动的步骤自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类。

2.获取连接

Connection connection = DriverManager.getConnection(url,username,password);

url是连接路径,user是用户名,password是密码。

关于url连接路径:

语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…

示例:jdbc:mysql://127.0.0.1:3306/db1

如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对配置 useSSL=false 参数,禁用安全连接方式,解决警告提示。

Connection

Connection(数据库连接对象)作用:获取执行 SQL 的对象和管理事务。

关于事务管理示例:

5eb5b85815424513817c584d15789103.png

 

MySQL的事务管理:

开启事务:BEGIN; / START TRANSACTION;

提交事务:COMMIT;

回滚事务:ROLLBACK;

MySQL默认自动提交事务

JDBC 事务管理:Connection接口中定义了3个对应的方法

开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务

提交事务:commit()

回滚事务:rollback()

Statement

Statement作用:执行SQL语句。

Int  executeUpdate(sql):执行修改、插入、删除语句

返回值:(1) 返回修改插入语句影响的行数 (2) 删除语句执行后,执行成功也可能返回0

ResultSet executeQuery(sql):执行查询语句

返回值: ResultSet 结果集对象

ResultSet

ResultSet(结果集对象)作用:封装了DQL查询语句的结果。

示例:

3ece44b52a9e4cf1b45c10449e8b21a5.png

PreparedStatement

PreparedStatement作用:预编译SQL语句并执行,预防SQL注入问题。

关于SQL注入,SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

示例:

3956d69b0c694327917ab2cecc78981e.png

 PreparedStatement 好处:预编译SQL,性能更高;防止SQL注入,将敏感字符进行转义。

PreparedStatement 原理:

在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)执行时就不用再进行这些步骤了,速度更快。如果sql模板一样,则只需要进行一次检查、编译,后序语句直接就可以执行了。

数据库连接池

数据库连接池是个容器,负责分配、管理数据库连接(Connection)。它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

好处:资源重用、提升系统响应速度、避免数据库连接遗漏。

 c1f6ed3c46f84014acf0fe2fe04bb27e.png

 

数据库连接池实现:

标准接口:DataSource,官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。

以下为德鲁伊Driud数据库连接池使用步骤:

1.导入jar包 druid-1.1.12.jar(中央仓库下载)

2.定义配置文件

2a31e4ca900341d586f10b809b20379a.png

 3.加载配置文件

 

 

4.获取数据库连接池对象

5.获取连接

......

代码示例:

4f03a37c011f4e18be06e0cebf7e4c1d.png

现在已经有了一些库和框架,对JDBC进行了进一步的封装,使用起来就非常方便了,比如MyBatis。但是框架一直在变更,JDBC是恒定的,所以掌握JDBC编程还是很有意义的。 

 


http://www.ppmy.cn/news/5575.html

相关文章

数据管理篇之数据质量

第15章 数据质量 1.数据质量保障原则 完整性 准确性 一致性 及时性 2.数据质量方法概述 消费场景知晓 &#xff08;1&#xff09;数据资产定义 分为五个等级&#xff1a; ① 毁灭性质&#xff08;A1&#xff09;&#xff0c;数据一旦出错&#xff0c;将会引起重大资产损失&a…

通过 Request 请求获取真实 IP 地址以及对应省份城市

title: 通过 Request 请求获取真实 IP 地址以及对应省份城市和系统浏览器信息 date: 2022-12-16 16:20:26 tags: GeoIP2UserAgentUtils categories:开发实践 cover: https://cover.png feature: false 1. 获取真实 IP 地址 1.1 代码 代码如下&#xff0c;这里的 CommonUtil.…

六、http模块

HTTP —— 超文本传输协议&#xff0c;用于规范客户端浏览器和服务端以何种格式进行通信和数据交互&#xff1b;HTTP由请求和响应构成的&#xff0c;是一个标准的客服端服务器模型。 HTTP请求响应过程 先简单的来了解以下HTTP的请求响应过程&#xff1a;1.地址解析&#xff1a…

vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)

大家好&#xff0c;我是雄雄。 前言 我们在分享公众号信息到微信或者群中的时候&#xff0c;会出现一个小卡片&#xff0c;如下所示&#xff1a; 但是呢&#xff0c;这种小卡片只能走微信的接口来实现&#xff0c;比如我们从公众号、小程序中分享的内容可以是这样的。如果我们…

python接口自动化测试 - mock模块基本使用介绍

mock简介 py3已将mock集成到unittest库中为的就是更好的进行单元测试简单理解&#xff0c;模拟接口返回参数通俗易懂&#xff0c;直接修改接口返回参数的值官方文档&#xff1a;unittest.mock --- 模拟对象库 — Python 3.11.1 文档 mock作用 解决依赖问题&#xff0c;达到解…

5万字企业数字化运营管理平台软件开发框架项目技术方案

目录 1 项目总体概述 项目总体技术方案保障 系统设计 系统体系结构设计 系统指标保障 系统质量 系统健壮性 系统应具备安全性 系统易用性 系统可维护性 系统完备性 系统可扩展性 系统可测试性 系统可移植性 系统可追踪性 系统易安装性 2 项目技术方案 2.1 系统…

git diff 命令6种使用场景

目录 一、背景&目标 二、git三个区了解 三、git diff 6种场景介绍 3.1 工作区和暂存区差异对比 3.2 工作区和版本库之间差异 3.3 暂存区和版本库之间差异对比 3.4 本地版本库之间提交记录对比 3.5 不同分支对比 3.6 不同分支下同一文件对比 四、git diff 中 -x1,y…

【夜读】2022年最后10天,致自己!

昨日的烦恼&#xff0c;清零 人生这本书&#xff0c;翻过这一页&#xff0c;才能书写下一章。 想想这一年&#xff0c;你是不是曾为了些小事&#xff0c;把心情弄得一团糟&#xff1a;也许是工作中的一次失误&#xff0c;又或是聊天时的一次争执。 2022年的最后10天&#xff0c…