<MySQL> 什么是JDBC?如何使用JDBC进行编程?
目录
一、JDBC是什么?
二、JDBC常用接口和类
2.1 DataSource
2.2 Connection
2.3 Statement
2.4 ResultSet
三、JDBC的使用
3.1 获得数据库驱动包
3.2 添加到项目依赖
3.3 描述数据库服务器
3.4 建立数据库连接
3.6 执行SQL语句和接收返回数据
3.7 释放资源
一、JDBC是什么?
世界上编程语言和数据库软件繁多,数据库软件为了适应不同的编程语言,提供了不同的数据库驱动包。MySQL提供了Java语言的驱动包mysql-connector-java。
JDBC(Java Database Connectivity)就是Java数据库连接,是用于执行SQL语句的Java API,也是Java中的数据库连接规范。JDBC为Java开发人员操作数据库提供了一套标准的API,可以为多种关系型数据库软件提供统一的访问方式,其中就包括MySQL。
JDBC的优点:
JDBC编程中,对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。这使得Java语言访问数据库操作完全面向接口编程。 |
使用JDBC后,Java 程序能够与各种数据库系统进行交互,而不用限定在特定数据库厂商的API。 |
程序有良好的跨平台能力强和可移植性高。 |
二、JDBC常用接口和类
有以下常用接口和类:
接口名/类名 | 说明 |
DataSource | 数据库源,用于指定数据库地址和其他数据库相关信息。 |
Connection | 连接,用于和数据库建立连接。 |
Statement | 语句,用于将SQL语句发送到数据库。 |
ResultSet | 结果集,用于记录符合SQL语句条件的结果。 |
2.1 DataSource
数据源(DataSource),用于指定数据库地址和其他数据库相关信息,这些语句写法通常是有固定格式的。
在指定数据库源之前,需要先明确数据库软件是什么?比如使用的是 MySQL ,那么在使用 DataSource 接口创建对象时,就应该使用关于 MySQL 的实现类 MysqlDataSource 。
实现类 MysqlDataSource有以下几个常用方法:
方法 | 释义(都为字符串格式) |
setUrl | 设置服务器地址。格式为:jdbc:mysql://服务器地址:端口:/(数据库名?参数名=参数值......)(括号中根据实际需要取舍) |
setUser | 输入数据库服务器的账户名。 |
setPassword | 指定账户的密码。 |
2.2 Connection
连接(Connection),主要用于和数据库建立连接,使用的方法是 getConnection() 。
可以通过两种方式实现数据库连接(connection):
连接(connection)方式 | 说明 |
DriverManager | 驱动管理类。通过静态方法获取,需要使用“反射”机制,不做介绍(或者以后补充,啊哈) |
DataSource | 数据源接口。详见上文。 |
使用 DriverManager 连接和使用 DataSource 连接的区别:
连接(connection)方式 | 区别 |
DriverManager | 通过该类获取的 connection 连接是无法重复利用的,每次使用完后调用 close() 方法释放资源时,都是关闭物理连接。 |
DataSource | 该类提供连接池支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以重复利用的,没每次使用完数据连接,调用 close() 方法释放资源时,都是将 connection 连接对象回收。 |
2.3 Statement
语句(Statement),主要用于将SQL语句发送到数据库中,执行SQL。
JDBC API中主要提供了三种Statement对象:
Statement | 语句。用于执行不带参数的简单SQL语句。 |
PreparedStatement | 预处理语句。无论是否带参数,SQL语句都会先预编译,再传输给数据库系统,执行速度快于 Statement 对象。在实际开发中最常用。 |
CallableStatement | 可调用语句。用于执行数据库存储过程的调用。 |
PreparedStatement 对象的特点:
(1)参数化SQL查询。 |
(2)SQL语句预编译。 |
(3)性能高于 Statement 。 |
(4)可以阻止常见的SQL语句注入攻击。 |
(5)使用占位符指代参数,占位符下标从1开始。 |
(6)占位符不能使用多值,即一个占位符只能指代一个参数。 |
执行SQL的常用方法:
方法名 | 说明 |
executeQuery() | 执行方法后,返回单个结果集(ResultSet对象),通常用于select语句。 |
executeUpdate() | 执行方法后,返回一个整数值,指代受该SQL语句影响的数据行行数,通常用于update、insert、delete语句。 |
2.4 ResultSet
结果集(ResultSet),用于记录符合SQL语句条件的结果,通过一系列getXXX的方法,可以对结果集中的数据进行访问。
三、JDBC的使用
3.1 获得数据库驱动包
网址:
https://mvnrepository.com/
查找:
版本:根据自己的MySQL版本自行选择对应的包
下载:
3.2 添加到项目依赖
在项目中新建目录:
将包拷贝到目录下,并add:
之后可以正式开始JDBC编程。
3.3 描述数据库服务器
//导入的包;
import javax.sql.DataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;//创建数据源;
DataSource datasource = new MysqlDataSource();//输入数据库服务器地址;
((MysqlDataSource)datasource).setUrl("jdbc:mysql://服务器地址:端口/");//输入账户名;
((MysqlDataSource)datasource).setUser("账户名");//输入密码;
((MysqlDataSource)datasource).setPassword("密码");
创建数据源:
可以使用以下方法创建 | 说明 |
DataSource datasource = new MysqlDataSource(); | DataSource是一个接口,使用DataSource的实现类MysqlDataSource创建实例。 |
MysqlDataSource datasource = new MysqlDataSource(); | 直接使用MysqlDataSource创建实例。 |
输入数据库服务器地址:
向下转型: | DataSource接口没有setUrl、setUser、setPassword方法,向下转型为MysqlDataSource才能使用,即((MysqlDataSource)datasource)。 |
参数为字符串: | setUrl、setUser、setPassword三个方法,参数都为字符串。 |
服务器地址格式 | 说明 |
jdbc:mysql://服务器地址:端口/ | 指定服务器地址和端口,如果服务器和客户端都在本地,可以使用127.0.0.1作为服务器地址,使用默认的3306作为端口; |
在已有数据库database的情况下,也可以直接连接到数据库: | |
格式: | jdbc:mysql://服务器地址:端口/数据库名?字符集=参数...其他参数=参数....... |
3.4 建立数据库连接
//导入的包;
import java.sql.Connection;
import java.sql.SQLException;//建立连接;
Connection connection = datasource.getConnection();
建立连接:
datasource.getConnection() 方法会抛出异常,使用 throws 抛出或使用 cry/catch 捕获异常。 |
3.5 创建SQL语句对象
//导入的包;
import java.sql.PreparedStatement;//创建SQL语句对象;
//例:创建数据库;
PreparedStatement statement = connection.prepareStatement("create database if not exists 数据库名 character set 字符集名;");//例:创建数据表;
PreparedStatement statement = connection.prepareStatement("create table if not exists 表名(列名 数据类型 约束,......);");//例:参数化SQL语句,插入数据行;
PreparedStatement statement = connection.prepareStatement("insert into 表名 values(?,?)");
statement.setInt(下标,值);
statement.setString(下标,值);
使用 connection.prepareStatement() 方法将字符串转化为SQL语句对象。 | |
使用了 PreparedStatement 类,SQL语句可以参数化,如上文例子,将insert语句中需要插入的值通过占位符“?”代替,再由 PreparedStatement 类提供的一系列 setXXX 方法,对占位符的数值进行设置。 | |
setXXX 方法参数中的下标,从1开始,1就代表第一个占位符“?”号。 |
3.6 执行SQL语句和接收返回数据
增、删、改操作:
//进行增、删、改操作;//执行SQL语句并接收int型返回值;
int n = statement.executeUpdate();
增、删、改操作使用 executeUpdate() 方法: | 返回值为 int 类型,返回的是执行该语句后,受到影响的数据行行数。 |
查询操作:
//导入的包;
import java.sql.ResultSet;//进行查询操作;//执行SQl语句,并接受ResultSet结果集;
ResultSet resultSet = statement.executeQuery();//遍历结果集resultSet,得到查询的数据;
while (resultSet.next()){System.out.println(resultSet.getXXX(列下标/列名));
}
查询操作使用 executeQuery() 方法: | 返回值为 ResultSet 类型,是一个结果集,这个结果集是MySQl中的临时表。 |
想要得到结果集的数据,需要使用 resultSet.next() 方法来获得判断是否存在下一数据,并移动指针。 | |
ResultSet 类提供了一系列的 getXXX 方法来获得结果集中的数据,参数可以是数据表中列的下标,也可以是列名等。 |
3.7 释放资源
//释放资源;//关闭结果集;
resultSet.close();//关闭命令;
statement.close();//关闭连接;
connection.close();
对于对象内部持有一些计算机重要的软硬件资源的对象,应当在使用完毕后及时释放。 |
释放资源应当后创建的先释放,先创建的后释放。 |
相关文章:

<MySQL> 什么是JDBC?如何使用JDBC进行编程?
目录 一、JDBC是什么? 二、JDBC常用接口和类 2.1 DataSource 2.2 Connection 2.3 Statement 2.4 ResultSet 三、JDBC的使用 3.1 获得数据库驱动包 3.2 添加到项目依赖 3.3 描述数据库服务器 3.4 建立数据库连接 3.6 执行SQL语句和接收返回数据 3.7 释放…...

基于安卓android微信小程序的装修家装小程序
项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系…...

基于SSM的小区物业管理系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

c语言免杀火绒
文章目录 前记c加载器补充知识 前记 pyinstaller pyinstaller目前已经被杀疯了,简单打包一个hello a"hello" print(a)#pyinstaller -F -w b.py -n HipsMain.exe考虑Nuitka pip uninstall nuitka pip install nuitka pip install nuitka1.8.5 这里最新…...

MyBatis #{} 和 ${} 的区别
前言: #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题,#{} 和 ${} 是MyBatis 中获取参数的两种方式,但我们在项目中大多数使用的都是 #{} 来获取参数,那么它们两个有什么区别呢? 区别 一. #{} 采用预编译 SQL&…...

计算机科学速成课
建议看看计算机科学速成课,一门很全面的计算机原理入门课程,短短10分钟可以把大学老师十几节课讲的东西讲清楚!整个系列一共41个视频,B站上有中文字幕版。 每个视频都是一个特定的主题,例如软件工程、人工智能、操作系…...

基于单片机的汽车安全气囊系统故障仿真设计
**单片机设计介绍, 基于单片机微波炉加热箱系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的汽车安全气囊系统的故障检测系统是一种用于检测安全气囊系统故障的智能化设备,通过单片机控…...

JPA整合Sqlite解决Dialect报错问题, 最新版Hibernate6
前言 我个人项目中,不想使用太重的数据库,而内嵌数据库中SQLite又是最受欢迎的, 因此决定采用这个数据库。 可是JPA并不支持Sqlite,这篇文章就是记录如何解决这个问题的。 原因 JPA屏蔽了底层的各个数据库差异, 但是…...

算法通关村第十关-青铜挑战快速排序
大家好我是苏麟,今天带来快速排序 . 快速排序 单边快速排序(lomuto 洛穆托分区方案) 单边循环 (lomuto分区) 要点 : 选择最右侧元素作为基准点j 找比基准点小的,i 找比基准点大的,一旦找到,二者进行交换。 交换时机: 找到小的,…...
whisper large-v3 模型文件下载链接
#源码里找到的_MODELS {"tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt","tiny": "https://openaipublic.azureedge.net/main/whisp…...

Ajax 之XMLHttpRequest讲解
一直以来都听别人说Ajax,今天终于接触到了。。。。。。。。。。 一.什么是Ajax? 答: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX 异步 JavaScript和XML&#x…...
小程序里面循环使用ref的话获取不到
文章目录 概要问题案例解决方法 概要 在小程序里面一般循环使用ref的话会获取不到 问题案例 //这个时自己封装的组件,然后循环使用 <jilianXuanzhe huoqu"huoqu" :ref"jilianXuanzhe i"></jilianXuanzhe>//如果这样使用的话获取…...

PY32F002B从压缩包到实现串口printf输出
最近学习使用芯领的PY32F002B开发板,记录学习历程供有同样需求的人参考。 本文主要讲述利用开发板实现printf语句串口输出。 开发环境的初步搭建 官方提供了一个压缩文件,文件名py32f002B_231026.zip, 链接:https://pan.baidu.c…...
音视频项目—基于FFmpeg和SDL的音视频播放器解析(八)
介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

CorelDRAW2024最新版本的图形设计软件
CorelDRAW2024是Corel公司推出的最新版本的图形设计软件。CorelDRAW是一款功能强大的矢量图形编辑工具,被广泛用于图形设计、插图、页面布局、照片编辑和网页设计等领域。 1. 新增的设计工具:CorelDRAW 2024引入了一些全新的设计工具,使用户能…...

【作业】操作系统实验一:进程和线程
文章目录 实验内容一、进程的创建1、编辑源程序2、编辑结果3、编译和运行程序4、解释运行结果 二、进程共享1、运行2、解释运行结果 三、进程终止1、运行2、解释运行结果 四、进程同步1、运行2、解释运行结果 五、Linux中子进程映像的重新装入1、运行2、解释运行结果 六、线程1…...
Linux 环境删除Conda
你可以按照以下步骤操作来删除Conda: 首先,停止所有conda环境。在终端中运行以下命令: conda deactivate然后使用以下命令获取conda安装的路径: which conda如果成功安装了conda,该命令输出的路径应该是类似于这样的&a…...

uni-app(1)pages. json和tabBar
第一步 在HBuilderX中新建项目 填写项目名称、确定目录、选择模板、选择Vue版本:3、点击创建 第二步 配置pages.json文件 pages.json是一个非常重要的配置文件,它用于配置小程序的页面路径、窗口表现、导航条样式等信息。 右键点击pages,按…...

window系统vscode 编译wvp前端代码
下载代码 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等…...

获取虎牙直播源
为了今天得LOL总决赛 然后想着下午看看 但是网页看占用高 就想起来有个直播源 也不复杂看了大概一个小时 没啥问题 进入虎牙页面只有 直接F12 网络 然后 看这个长条 一直在获取 发送 那就选中这个区间 找到都是数字这一条 如果直接访问的话会一直下载 我这都取消了 然后 打开…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...