【Java】如何使用jdbc连接并操作MySQL,一文读懂不迷路,小白也能轻松学会

JDBC的原理

JDBC(Java Database Connectivity)是Java提供的用于连接和操作数据库的API。它允许Java应用程序与各种数据库进行交互,以下是JDBC的基本原理:

  1. 驱动程序管理:JDBC使用不同的数据库驱动程序来连接不同类型的数据库。每种数据库都有相应的JDBC驱动程序,负责处理Java应用程序与数据库之间的通信。常见的驱动程序类型包括:

    • JDBC-ODBC桥接驱动:将JDBC调用转换为ODBC调用。
    • 原生API驱动:通过特定数据库的API直接连接数据库。
    • 网络协议驱动:通过中间层(如应用服务器)以网络协议访问数据库。
  2. 建立连接:应用程序通过DriverManager获取数据库连接。一般步骤包括:

    • 注册数据库驱动。
    • 使用DriverManager.getConnection()方法获取连接对象。
  3. 执行SQL语句:获取到连接后,可以通过Connection对象创建StatementPreparedStatement对象,来执行SQL语句。在执行过程中,SQL语句会被发送到数据库,并返回结果集。

  4. 处理结果:执行完SQL语句后,结果通常会以ResultSet对象的形式返回。开发者可以通过ResultSet对象读取查询结果,并进行相应处理。

  5. 事务管理:JDBC支持对数据库的事务管理。可以通过Connection对象的方法来手动控制事务,比如提交、回滚等。

  6. 关闭资源:操作完成后,应该关闭ResultSetStatementConnection等资源,以防止内存泄漏。

总体来说,JDBC提供了一种与数据库进行交互的标准方式,使得Java程序能够高效地访问和操作各种数据库,同时保持良好的跨平台性。

JDBC优势:

  • Java语言访问数据库操作完全面向抽象接口编程。
  • 开发数据库应用不用限定在特定数据库厂商的API。
  • 程序的可移植性大大增强。

JDBC的使用

1.准备数据库驱动包,并添加到项目的依赖中

如何下载驱动包

我推荐一个官方网址:中央仓库

打开网址后在上方搜索 “mysql”

搜索完,出现以下选项,选择第二个进入。

进入该页面后,我们发现有各种版本的驱动包。

那么我们如何选择版本呢?这取决于你的MySQL版本 ,如果你的MySQL版本是8.0,那么选择8.0x系列的,如果你的MySQL版本是5.1,那么选择5.1x系列的。这里我的MySQL是5.1版本,我用5.1x系列做一个示例。

下滑找到你所需要的版本并点击,这里我下载的是5.1.49版本。

接着我们进入下一个界面,找到 “jar” 字样,点击即可下载。

 将驱动包添加到项目依赖

我们下载好驱动包就要将其添加到项目依赖了,接下来跟着我的操作。

我们打开IDEA,右击项目文件,选择新建 "Directory" 模块。

 我们一般将该模块名取为 “lib” ,用来存放第三方库。

接下来找到你的驱动包 “CTRL + C” 复制,接着到IDEA中选中 "lib" 模块 “CTRL + V” 粘贴,操作完后呈现以下状态。选择 ok 就好了。

接下来我们还有最后一步操作,右击该驱动包,选择 “Add as Library...”

最后操作完呈现以下状态既是成功了。

2.建立数据库连接

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

  • 一种是通过DriverManager(驱动管理类)的静态方法获取:
//注册数据库驱动: 加载适当的数据库驱动程序,可以通过反射方式来加载。
try {Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL数据库示例
} catch (ClassNotFoundException e) {e.printStackTrace();
}
//建立数据库连接: 使用DriverManager获取数据库连接,提供数据库的URL、用户名和密码。
String url = "jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false"; // 数据库URL,“testdb” 这里改为你要操作的数据库名,其余部分不需要改
String user = "root"; // 用户名,这个用户名一般默认是"root"
String password = "your_password"; // 密码,这里填写你自己的MySQL密码Connection connection = null;
try {connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {e.printStackTrace();
}
  • 一种是通过DataSource(数据源)对象获取,实际应用中会使用DataSource对象:
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false");// 数据库URL,“testdb” 这里改为你要操作的数据库名,其余部分不需要改
((MysqlDataSource)dataSource).setUser("root"); // 用户名,这个用户名一般默认是"root"
((MysqlDataSource)dataSource).setPassword("your_password");密码,这里填写你自己的MySQL密码
Connection connection = dataSource.getConnection();
  • 以上两种方式的区别是:

1. DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源
时,通过connection.close()都是关闭物理连接。
2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Conncetion连接对象回收。

3.创建操作命令(Statement)

Statement对象 

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。

创作操作命令有多种方式,这里我使用其中一种是开发中常用的。

String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);

4.执行SQL语句

主要掌握两种执行SQL的方法:

  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句。
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。

第一种:执行update、insert、delete语句。

int i = statement.executeUpdate();//返回影响了i行
System.out.println(i);//打印影响i行

第二种:执行select语句。

//处理结果集: 遍历ResultSet对象,获取查询结果。
try {while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("ID: " + id + ", Name: " + name);}
} catch (SQLException e) {e.printStackTrace();
}

ResultSet对象

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

5.释放资源(关闭结果集,命令,连接)

try {if (resultSet != null) resultSet.close();if (statement != null) statement.close();if (connection != null) connection.close();
} catch (SQLException e) {e.printStackTrace();
}

JDBC使用步骤总结

1. 创建数据库连接Connection
2. 创建操作命令Statement
3. 使用操作命令来执行SQL
4. 处理结果集ResultSet
5. 释放资源

整个代码示例

整合以上步骤,下面是一个完整的JDBC示例代码:

首先需要你在MySQL中创建一个 school 数据库和一个 student 表,并且插入多条数据。

create database school charset utf8;
use school;
create table student (
id int primary key,
name varchar(20) not null);
insert into student values (1,'张三'),(2,'李四'),(3,'王五');

 上面的代码是在MySQL客户端执行的语句。

import java.sql.*;public class JdbcExample {public static void main(String[] args) {// 建立数据库连接String url = "jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8&useSSL=false";String user = "root";String password = "your_password";Connection connection = null;try {connection = DriverManager.getConnection(url, user, password);Statement statement = connection.createStatement();// 执行SQL查询String sql = "SELECT * FROM student";ResultSet resultSet = statement.executeQuery(sql);// 处理结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("ID: " + id + ", Name: " + name);}// 关闭资源resultSet.close();statement.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (connection != null) connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}

这个示例展示了如何使用JDBC连接MySQL数据库、执行查询并处理结果。请根据实际情况修改数据库URL、用户名和密码。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兼容并蓄,高效集成:EasyCVR视频综合接入能力助力多元化项目需求

随着视频技术的不断进步,视频监控、视频直播、执法记录仪、语音可视对讲、无人机等视频资源的应用场景日益丰富。这些视频资源不仅在数量上快速增长,而且在质量、格式、编码标准等方面也呈现出多样化的特点。因此,为了有效整合这些资源&#…

2024年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 列表 fruit = [‘西瓜’, ‘菠萝’, ‘哈密瓜’, ‘葡萄’],以下哪个选项,可以获取列表最后一个元素?( ) A:fruit[len(fruit)] B:fruit[len(fruit) - 1] C:fruit[len(fruit) + 1] D:fr…

echarts学习:绘制地图

前言 经过之前一段时间的磨砺,我具备了基本的使用echarts绘制图表的能力。但是在最近这几个月里我接连遇到了几个棘手的任务,这大大的提升了我的echarts水平。其中我遇到的第一个高难度任务就是使用echarts绘制如下的地图: 简单的分析一下&a…

Android studio 引入Json文件

Xcode引入json文件非常简单,没想到Android Studio是有讲究的,必须指定位置。 跟 lib 同一级目录下 创建一个assets(如果不存在就创建) future: DefaultAssetBundle.of(context).loadString(assets/appcenter.json),针对我这个路…

使用Leaks定位iOS内存泄漏问题并解决

使用Leaks定位iOS内存泄漏问题并解决 前言 内存泄漏问题一直是程序开发中最令人头疼的问题,特别是C/C。虽然C/C在C11之后引入了许多新特性,包括智能指针,自动类型推导等,但C中动态内存的分配和释放仍然需要程序员来显式地进行。…

【网络协议】精讲TCP通信原理!

前言 TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16 而端口号为 80&…

CSS设置文本超出显示省略号

一、单行文本显示省略号 <div class"box"><p>测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本…

C# 静态方法和实例方法

一、静态成员&#xff0c;实例成员&#xff0c;静态方法&#xff0c;实例方法 静态成员就是用static修饰的字段&#xff1b; 实例成员就是没有被static修饰的字段&#xff1b; 静态方法就是用static修饰的方法&#xff1b; 实例方法就是没有被static修饰的方法&#xff1b;…

无人机之如何避免飞行错误篇

在无人机飞行中&#xff0c;飞手可能会遇到各种问题&#xff0c;这些问题不仅会影响飞行效果&#xff0c;还可以带来安全隐患。以下是一些常见的错误及避免方法&#xff0c;帮助飞手提高飞行稳定性和安全性&#xff1a; 一、校准传感器 IMU&#xff08;惯性测量单位&#xff0…

HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求

引言 在现代Web开发中&#xff0c;HTTP请求的高效性和可靠性对于应用的整体性能至关重要。ASP.NET Core提供了HttpClient类&#xff0c;它是一个强大且灵活的工具&#xff0c;可以用来发送HTTP请求并处理响应。然而&#xff0c;如何在ASP.NET Core中实现高效的HTTP请求&#x…

【Linux】手把手教你从零上手Vim编辑器

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 &#x1f4cc;写在前面 &#x1f4cc;Vim是什么 &#x1f4cc;手把手教你开始使用Vim &#x1f38f;使用Vim编辑第一个程序 &#x1f38f;Normal(命令模…

Ilya Sutskever 2023年伯克利大学演讲回顾:无监督学习与GPT的数学基础

引言 在2023年&#xff0c;OpenAI联合创始人之一的Ilya Sutskever在伯克利大学进行了一次极具影响力的演讲。这场演讲虽然内容复杂晦涩&#xff0c;但却被认为是人工智能发展历史上的一个重要里程碑。在演讲中&#xff0c;Sutskever深入探讨了无监督学习的数学依据&#xff0c…

CocoaPods 官宣进入维护模式,不在积极开发新功能,未来将是 Swift Package Manager 的时代

昨天 CocoaPods 官宣现在项目**处于维护模式 **&#xff0c;简单来说&#xff0c;就是 CocoaPods 不会再像以前一样积极投入资源进行开发&#xff0c;所谓维护模式&#xff0c;就是让项目处于「可用」的状态&#xff0c;而此时距离 CocoaPods 的出现&#xff0c;也过去了有 13 …

树莓派4 AV没有视频输出

使用AV接口输出&#xff0c;没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite&#xff1a; dtoverlayvc4-kms-v3d,composite默认情况下&#xff0c;输出 NTSC 复合视频。要选择不同的模式&#xff0c;请在…

Bug定义及生命周期(七)

BUG 定义 软件的bug&#xff0c;软件程序的漏洞或缺陷 – 常见&#xff0c;首先发现 软件可改进的细节&#xff0c;或与需求文档存在差异的功能实现等 测试工程师&#xff1a;发现bug&#xff0c;定位bug&#xff0c;提交bug&#xff0c;回归bug 类型 确定bug类型&#xff…

【中国数据库前世今生】数据存储管理的起源与现代数据库发展启蒙

记录开启本篇的目的: 作为1名练习时长2年半的DBA&#xff0c;工作大部分时间都在和数据库打交道&#xff0c;包括Oracle,Mysql,Postgresql,Opengauss等国内外数据库。但是对数据库的发展史却知之甚少。 正好腾讯云开发者社区正在热播:【纪录片】中国数据库前世今生,借此机会了解…

【云备份】学习Json

文章目录 1.Json数据类型基础数据类型复合数据类型JSON数据类型的应用 2.学习jsoncpp库利用json实现序列化利用json实现反序列化 1.Json数据类型 json 是一种数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。json数据交换格式是将多种数据对象组织…

MATLAB中lsqr函数用法

目录 语法 说明 示例 线性系统的迭代解 使用指定了预条件子的 lsqr 提供初始估计值 使用函数句柄代替数值矩阵 lsqr函数的功能是求解线性系统 - 最小二乘法。 语法 x lsqr(A,b) x lsqr(A,b,tol) x lsqr(A,b,tol,maxit) x lsqr(A,b,tol,maxit,M) x lsqr(A,b,tol,m…

【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性 windowIcon表示窗口的图标 当我们使用默认的windowIcon的时候&#xff0c;其窗口的图标如下&#xff1a; API说明 windowIcon() 获取到控件的窗⼝图标. 返回 QIcon 对象. setWindowIcon(const QIcon& icon) 设置控件的窗⼝图标. 在Qt中&…

【STM32 FreeRTOS】任务

使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行&#xff0c;不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点&#xff0c;应用程序中只能执行一个任务&#xff0c;实时 RTOS 调度器负责决定所要执行的任务。因此&#xff0c; R…