<MySQL> 什么是JDBC?如何使用JDBC进行编程?

news2024/11/20 23:35:33

目录

一、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();
对于对象内部持有一些计算机重要的软硬件资源的对象,应当在使用完毕后及时释放。
释放资源应当后创建的先释放,先创建的后释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1225362.html

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

相关文章

利用 Pandoc + ChatGPT 优雅地润色论文,并保持 Word 公式格式:Pandoc将Word和LaTeX文件互相转化

论文润色完美解决方案:Pandoc 与 ChatGPT 的强强联合 写在最前面其他说明 一、通过 Pandoc 将 Word 转换为 LaTeX 的完整指南步骤 1: 安装 PandocWindows:macOS:Linux: 步骤 2: 准备 Word 文档步骤 3: 转换文档步骤 4: 检查并调整输出步骤 5: 编译 LaTeX 文档总结 二…

企业制作产品操作手册,真的很有必要吗?

企业制作产品操作手册通常是必不可少的。一份详细的指南可以使得用户或操作员能够了解如何正确地使用产品。然而,有些企业可能会怀疑这一做法的必要性,认为这只是一项额外的成本和劳动力投入。但是,企业产品操作手册是提高产品使用效率和用户…

【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑

作者:chlorine 专栏:c专栏 赋值运算符重载()()():实现完整的日期类(上) 我走的很慢,但我从不后退。 【学习目标】 日期(- - --)天数重载运算符 日期-日期 返回天数 对日期类函数进行优化(不符合常理的日期,负数,const成员)c中重载输入cin和输…

基于STM32的外部中断(EXTI)在嵌入式系统中的应用

外部中断(External Interrupt,EXTI)是STM32嵌入式系统中常见且重要的功能之一。它允许外部事件(例如按键按下、传感器触发等)通过适当的引脚触发中断,从而应用于各种嵌入式系统中。在STM32微控制器中&#…

Spring Boot - filter 的顺序

定义过滤器的执行顺序 1、第一个过滤器 import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; impor…

二维码智慧门牌管理系统升级解决方案:高效运营,信息尽在掌握

文章目录 前言一、升级要点二、方案优势三、应用场景四、客户案例 前言 在这个日新月异的时代,二维码智慧门牌管理系统已经成为了各行各业的标配。为了更好地满足用户需求,提升运营效率,我们推出了全新的升级解决方案。这个方案将让你轻松掌…

<C++>类和对象下|初始化列表|explicit static|友元|内部类|匿名对象|构造函数的优化

文章目录 1. 初始化列表2. explicit关键字3. 友元3.1 友元函数3.2 友元类 4. static关键字4.1 概念4.2 特性 5.内部类5.1 概念5.2 特性 6. 匿名对象7. 拷贝构造时的优化 1. 初始化列表 在类的构造函数体中,对成员属性写的操作叫做赋值,那么成员的初始化…

springBoot中starter

springBoot项目中引入starter 项目引入xxljob&#xff0c;仅需要导入对应的starter包&#xff0c;即可进行快速开发 <dependency><groupId>com.ydl</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>0.0.1-SNAPS…

Ubuntu20.04 安装微信 【优麒麟的镜像源方式安装】

缺点&#xff1a;是网页版本的嵌入&#xff0c;功能少。 推荐wine方式安装&#xff1a;Ubuntu20.04 安装微信 【wine方式安装】推荐 从优麒麟的镜像源安装原生微信 应用下载-优麒麟&#xff5c;Linux 开源操作系统 新建文件software.list sudo vi /etc/apt/sources.list.d/…

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载 WoodMart是一款出色的WooCommerce商店主题&#xff0c;它不仅提供强大的电子商务功能&#xff0c;还与流行的Elementor页面编辑器插件完美兼容。 主题文件在WoodMart Theme/woodmart.7.3.2.zip&#xff0c;核心在P…

Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)

Golang起步篇 Golang起步篇一. 安装Go语言开发环境1. Wondows下搭建Go开发环境(1). 下载SDK工具包(2). 解压下载的压缩包&#xff0c;放到特定的目录下&#xff0c;我一般放在d:/programs下(路径不能有中文或者特殊符号如空格等)(3). 配置环境变量步骤1&#xff1a;先打开环境变…

python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)

省流建议 本文针对以下需求&#xff1a; 想自动化标注一些目标不再想使用yolo想在目标检测/语意分割有所建树计算机视觉项目想玩一玩大模型了解自动化工具了解最前沿模型自定义目标P图替换… 确定好需求&#xff0c;那么我们发车&#xff01; 实现功能与结果 该模型将首先…

【SQL server】数据库、数据表的创建

创建数据库 --如果存在就删除 --所有的数据库都存在sys.databases当中 if exists(select * from sys.databases where name DBTEST)drop database DBTEST--创建数据库 else create database DBTEST on --数据文件 (nameDBTEST,--逻辑名称 字符串用单引号filenameD:\DATA\DBT…

uni-app(1)pages. json和tabBar

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

C语言进阶第十课 --------文件的操作

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

从多表连接视图对比人大金仓和Oracle

KING BASE 信息时代&#xff0c;数据是驱动业务决策和创新的核心资源。然而&#xff0c;随着数据量的不断增加&#xff0c;有效地处理和整合数据的过程变得愈发复杂。这时&#xff0c;多表连接视图悄然走进数据库世界&#xff0c;不仅能够将多个表中的数据整合在一起&#xff0…

代码随想录算法训练营第四十八天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 121. 买卖股票的最佳时机 class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 2 for _ in r…

二叉树前序,中序,后序遍历

前序遍历&#xff08;递归&#xff09;&#xff1a; 中序遍历&#xff08;递归&#xff09;&#xff1a;

2023全新付费进群系统源码 带定位完整版 附教程

这源码是我付费花钱买的分享给大家&#xff0c;功能完整。 搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;58soho.cn.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/conf…