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

news2024/11/18 9:41:04

前言:

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.拼装sql
    String sql = "select * from account";

    //获取执行sql的对象
    Statement statement = connection.createStatement();

    //执行sql
    ResultSet 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.coloradmin.cn/o/107283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工具及方法 - Process Explorer以及类似工具,用来获取系统运行的进程信息

下载Process explorer&#xff1a; Process Explorer - Sysinternals | Microsoft Learn Process explorer简介 有没有想过哪个程序打开了一个特定的文件或目录&#xff1f;现在你可以找到了。Process Explorer向你显示关于进程打开或加载的句柄和DLL的信息。 Process Explore…

[Python图像处理] 使用 HSV 色彩空间检测病毒对象

使用 HSV 色彩空间检测病毒对象前言检测病毒对象相关链接前言 在本节中&#xff0c;我们将学习如何使用 OpenCV 在 HSV 色彩空间中使用特定颜色检测感兴趣对象。我们需要通过指定颜色值范围识别和提取感兴趣的对象&#xff0c;使用具有病毒的血细胞图像&#xff0c;我们的目标…

Python 自动化测试(五): Pytest 结合 Allure 生成测试报告

本文节选自霍格沃玆测试学院测试开发内部教材&#xff0c;进阶学习文末加群&#xff01; 测试报告在项目中是至关重要的角色&#xff0c;一个好的测试报告&#xff1a; 可以体现测试人员的工作量&#xff1b; 开发人员可以从测试报告中了解缺陷的情况&#xff1b; 测试经理可…

7.Linux实用操作(2)

文章目录零、学习目标一、进程管理1、概念2、查看进程3、查看指定进程4、关闭进程二、主机状态1、查看系统资源占用2、top命令内容详解3、top命令选项4、top交互式选项5、磁盘信息监控三、上传、下载1、上传、下载2、rz、sz命令四、压缩、解压1、压缩格式3、tar命令4、tar 命令…

后端开发浅学react

博客笔记来自于学习 柴柴老师在b站分享的react学习视频&#xff0c;仅供学习参考&#xff0c;学习视频是来自于b站的&#xff1a;柴柴_前端教书匠&#xff0c;视频链接&#xff1a;React入门到实战(2022全网最新&#xff09;_哔哩哔哩_bilibili 和 react官网 开始 – React …

谁会嫌钱多啊,最适合学生党的Python兼职攻略以及接私活经验

大家好&#xff0c;我是小八 这次我想谈谈一个非常热门的话题&#xff0c;就是如何在学习python的同时去赚钱。在这篇文章中&#xff0c;你会学习到如何通过学习python来赚取副业收入。 相信大家都对钱感兴趣吧&#xff0c;如果你和马云爸爸对钱不敢兴趣的话&#xff0c;那这…

Lambda表达式从用到底层原理

文章目录前言一、lambda函数基本使用参数列表返回类型函数体捕获列表值捕获引用捕获隐式捕获混合方式捕获修改值捕获变量的值异常说明二、lambda表达式使用的注意事项避免默认捕获模式三、lambda表达式底层实现原理采用值捕获采用引用捕获前言 lambda式作为一种创建函数对象的…

Python tkinter -- 第18章 画布控件之多边形

18.2.19 create_polygon(coords, **options) 根据 coords 给定的坐标&#xff0c;在画布上绘制一个多边形。 &#xff08;1&#xff09;coords&#xff1a;给定多边形的坐标 &#xff08;2&#xff09;options&#xff1a;选项的具体含义&#xff1a; 选项含义activedash当鼠标…

JavaEE- JVM八股文(JVM垃圾回收机制GC)

JVM垃圾回收的目标&#xff1a;主要针对内存中的堆空间进行垃圾回收。 Java中&#xff0c;大量的内存都在堆中。 程序计数器&#xff1a;固定大小&#xff0c;不涉及释放 栈&#xff1a;函数执行完毕&#xff0c;对应栈的空间就自动释放了&#xff0c;不需要垃圾回收 方法区&…

07-Golang中标识符的命名规则

Golang中标识符的命名规则标识符概念标识符的命名规则保留关键字介绍预定义标识符介绍标识符命名注意事项标识符概念 1.Golang对各种变量、方法等命名时使用的字符序列称为标识符 2.凡是自己可以起名字的地方都叫标识符 标识符的命名规则 1.由26个英文字母大小写&#xff0…

华为云桌面之下的“冰山”:技术底座x繁荣生态加速模式进化

在新兴技术迭代升级持续加速的背景下&#xff0c;很多产品类别的内涵和外延都在不断演进——虽然名字没什么变化&#xff0c;但实际所指已有云泥之别。 “云桌面”即是如此。从早期的无盘工作站&#xff0c;到VDI、IDV和VOI等技术流派的群雄并起&#xff0c;云桌面的江湖总是“…

linux第七章---管道、环境变量、常用命令

1.管道 1.1概念&#xff1a; 管道类似于文件重定向&#xff0c;可以将前一个命令的stdout重定向到下一个命令的stdin。 1.2要点&#xff1a; 管道命令仅处理stdout&#xff0c;会忽略stdeer。管道右边的命令必须要能接受stdin.多个管道命令可以串联。 1.3与文件重定向的区…

Java平衡树之查找树的详解(1)

1.平衡树 之前我们学习过二叉查找树&#xff0c;发现它的查询效率比单纯的链表和数组的查询效率要高很多&#xff0c;大部分情况下&#xff0c;确实是这样的&#xff0c;但不幸的是&#xff0c;在最坏情况下&#xff0c;二叉查找树的性能还是很糟糕。例如我们依次往二叉查找树中…

c语言预处理(万字解析)

预处理一.总体概述1.注释去除2.宏替换二.宏定义&#xff08;宏替换类型&#xff09;1.数值宏常量2.字符串宏常量3.用宏定义注释符号4.用宏定义表达式&#xff08;难点&#xff09;1.第一种情况2.第二种情况5.#undef&#xff08;宏的有效范围&#xff09;1.两个问题2.#undef的使…

FLStudio2023水果软件哪个版本好用?功能区别对比

FL Studio是一款功能非常强大的音乐创作编辑软件它就是FL Studio(水果软件)。使用FL Studio中文版可以轻松帮我们制作自己的音乐唱片&#xff0c;拥有强大且专业的编曲混音创作工具&#xff0c;有需要的朋友不要错过。 水果&#xff0c;全称Fruity Loop Studio&#xff0c;简称…

量子计算(十六):其他类型体系的量子计算体系

文章目录 其他类型体系的量子计算体系 一、离子阴量子计算 二、原子量子计算 三、核自旋量子计算 四、拓扑量子计算 其他类型体系的量子计算体系 一、离子阴量子计算 离子研量子计算在影响范围方面仅次于超导量子计算。早在2003年&#xff0c;基于离子阴就可以演示两比特…

“转行做程序员”很难?这里有4个重要建议

近几年来&#xff0c;传统行业多处于经济下行&#xff0c;加上互联网行业的赚钱效应&#xff0c;想要转行到这一行的人越来越多&#xff0c;其中程序员这个行业更是很多人梦寐以求的。 但另一方面&#xff0c;我们也发现&#xff0c;这些想要转行的同学们往往会遇到很多困扰。…

推荐今日 火火火火 的开源项目

本期推荐开源项目目录&#xff1a;1. coding-interview-university2. 前端后台管理模板3. 钉钉聊天机器人4. 基于 ChatGPT 的 Neovim 插件5. 开源的分布式社交网络平台6. 分析社交媒体内容7. 用于绘制流程图的库01coding-interview-university这是一个汇集了软件工程师面试中常…

2023跨年代码(烟花+背景音乐)

文章目录前言效果展示使用方法源码学习HTML代码CSS代码前言 时光荏苒&#xff0c;白驹过隙。2022这一年又在忙碌中度过了&#xff0c;过去的一年&#xff0c;我们同努力&#xff0c;我们共欢笑&#xff0c;每一次成功都蕴藏着我们辛勤的劳动。 新的一年即将来到&#xff0c;我…

【linuxgdb】动态链接和静态链接的区别,gdb的基础使用

目录 1.gcc/c动态链接和静态链接的区别 2.gdb的基础使用 2.2使用gdb调试 1.gcc/c动态链接和静态链接的区别 1.1查看可执行文件是动态还是静态的 格式&#xff1a;file文件名 1.2动态链接和静态链接 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的…