【Java】如何使用jdbc连接并操作MySQL,一文读懂不迷路,小白也能轻松学会
JDBC的原理
JDBC(Java Database Connectivity)是Java提供的用于连接和操作数据库的API。它允许Java应用程序与各种数据库进行交互,以下是JDBC的基本原理:
-
驱动程序管理:JDBC使用不同的数据库驱动程序来连接不同类型的数据库。每种数据库都有相应的JDBC驱动程序,负责处理Java应用程序与数据库之间的通信。常见的驱动程序类型包括:
- JDBC-ODBC桥接驱动:将JDBC调用转换为ODBC调用。
- 原生API驱动:通过特定数据库的API直接连接数据库。
- 网络协议驱动:通过中间层(如应用服务器)以网络协议访问数据库。
-
建立连接:应用程序通过
DriverManager
获取数据库连接。一般步骤包括:- 注册数据库驱动。
- 使用
DriverManager.getConnection()
方法获取连接对象。
-
执行SQL语句:获取到连接后,可以通过
Connection
对象创建Statement
或PreparedStatement
对象,来执行SQL语句。在执行过程中,SQL语句会被发送到数据库,并返回结果集。 -
处理结果:执行完SQL语句后,结果通常会以
ResultSet
对象的形式返回。开发者可以通过ResultSet
对象读取查询结果,并进行相应处理。 -
事务管理:JDBC支持对数据库的事务管理。可以通过
Connection
对象的方法来手动控制事务,比如提交、回滚等。 -
关闭资源:操作完成后,应该关闭
ResultSet
、Statement
和Connection
等资源,以防止内存泄漏。
总体来说,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、用户名和密码。
相关文章:

【Java】如何使用jdbc连接并操作MySQL,一文读懂不迷路,小白也能轻松学会
JDBC的原理 JDBC(Java Database Connectivity)是Java提供的用于连接和操作数据库的API。它允许Java应用程序与各种数据库进行交互,以下是JDBC的基本原理: 驱动程序管理:JDBC使用不同的数据库驱动程序来连接不同类型的…...

新手学习VR全景需要知道的几个问题
1.什么是720云 720云是一家专注于VR全景内容制作与展示的技术平台,提供从拍摄、编辑到发布的一站式解决方案。它的核心功能包括全景图像的制作和编辑工具,以及VR全景内容的在线展示和分享服务。720云的技术广泛应用于房地产、旅游、教育、文化展示等多个…...

上海知名泌尿外科专家常态化坐诊黄山新晨医院,让前列腺癌看得更早、更准!
继7月28日上海第四人民医院泌尿外科专家在黄山新晨医院开展义诊之后,8月9日和10日,该团队领头人周铁教授又完成了合作以来的首次坐诊,标志着双方合作从此进入常态化阶段。 周铁主任在查看患者的检查报告 周铁主任曾任中华医学会泌尿外科分会…...

Elasticsearch: 非结构化的数据搜索
r很多大数据组件在快速原型时期都是Java实现,后来因为GC不可控、内存或者向量化等等各种各样的问题换到了C,比如zookeeper->nuraft(https://www.yuque.com/treblez/qksu6c/hu1fuu71hgwanq8o?singleDoc# 《olap/clickhouse keeper 一致性协调服务》)&…...

44 个 React 前端面试问题
1.你知道哪些React hooks? useState:用于管理功能组件中的状态。useEffect:用于在功能组件中执行副作用,例如获取数据或订阅事件。useContext:用于访问功能组件内的 React 上下文的值。useRef:用于创建对跨…...
LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析 导读:该文章阐述了FSDP和DeepSpeed在实现上的差异,Accelerate如何统一它们的行为,并提供指导帮助用户在两种后端之间切换。同时也讨论了低精度优化…...
HarmonyOS应用开发学习-ArkTs声明式UI描述
ArkTs声明式UI描述 1 创建组件 声明式UI描述 ArKTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑 创建组件 根据组件构造方法的不同,创建组件包含有参数和无参…...

Redis20-通信协议
目录 RESP协议 概述 数据类型 模拟Redis客户端 RESP协议 概述 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub): 客户端(client)向服务端(server)发送一条命…...

Unity Shader变体优化与故障排除技巧
在 Unity 中编写着色器时,我们可以方便地在一个源文件中包含多个特性、通道和分支逻辑。在构建时,着色器源文件会被编译成着色器程序,这些程序包含一个或多个变体。变体是该着色器在满足一组条件后生成的版本,这通常会导致线性执行…...

数据结构——时间复杂度和空间复杂度
目录 时间复杂度 什么是时间复杂度 常见时间复杂度类型 如何计算时间复杂度 空间复杂度 什么是空间复杂度 常见的空间复杂度类型 如何计算空间复杂度 时间复杂度和空间复杂度是评估算法性能的两个重要指标。 时间复杂度 什么是时间复杂度 时间复杂度描述了算法执行所需…...

(echarts) 饼图设置滚动图例
(echarts) 饼图设置滚动图例 效果: 代码: // 图例 legend: {type: scroll,orient: vertical,right: 10,top: 20,bottom: 20,data: data.legendData},参考:官网-可滚动的图例 https://echarts.apache.org/examples/zh/editor.html?cpie-leg…...

Java spring SSM框架--mybatis
一、介绍 Spring 框架是一个资源整合的框架,可以整合一切可以整合的资源(Spring 自身和第三方),是一个庞大的生态,包含很多子框架:Spring Framework、Spring Boot、Spring Data、Spring Cloud…… 其中Spr…...
Python知识点:如何使用Arduino与Python进行物联网项目
Arduino和Python是物联网(IoT)项目中常用的两种技术。Arduino是一个开源的硬件平台,而Python是一种高级编程语言,它们可以结合使用来创建各种智能设备和系统。以下是使用Arduino和Python进行物联网项目的一般步骤: 确定项目需求: …...

论文复现_从 CONAN 中收集 TPL 数据集
1. 概述 CONAN:Conan是一个用于C项目的开源包管理工具。 它的主要目标是简化C项目的依赖关系管理过程,使开发人员能够更轻松地集成、构建和分享C库。 其中有一些比较独特的功能,例如:版本管理、第三方库管理等。 TPL 数据集&…...
使用Docker将Java项目打包并部署到CentOS服务器的详细教程。
当然,让我们将上述步骤进一步细化,以便更好地理解整个过程。 前提条件 一个Java项目CentOS服务器,并且已安装DockerJava项目可以正常在本地运行具有服务器访问权限 ———————————————————————————————————…...

嘉立创eda布线宽度
https://prodocs.lceda.cn/cn/pcb/route-routing-width/#%E5%B8%83%E7%BA%BF%E5%AE%BD%E5%BA%A6...

硬件面试经典 100 题(31~50 题)
31、多级放大电路的级间耦合方式有哪几种?哪种耦合方式的电路零点偏移最严重?哪种耦合方式可以实现阻抗变换? 有三种耦合方式:直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重,变压器耦合的电路可以实现…...
5G:下一代无线通信技术的全面解析
随着科技的不断进步,移动通信技术也在飞速发展。从2G到4G,我们见证了无线网络的巨大变革,而现在,5G已经悄然来临。作为下一代无线通信技术,5G不仅将带来更快的速度和更低的延迟,还将开启全新的应用场景和商…...
关于refresh_token
前文介绍过jwt的一般使用场景,用户登录成功后获得jwt,其中包含用户相关信息,主要是在前端要用到的属性(比如姓名、应用角色[这个前端后都用得着]等)、在后端要用到的属性(比如登录IP、终端唯一标识…...

Linux网络:基于OS的网络架构
Linux网络:OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统,讲解计算机网络的设计理念,帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...