【Java 进阶篇】深入理解 JDBC:Java 数据库连接详解
数据库是现代应用程序的核心组成部分之一。无论是 Web 应用、移动应用还是桌面应用,几乎都需要与数据库交互以存储和检索数据。Java 提供了一种强大的方式来实现与数据库的交互,即 JDBC(Java 数据库连接)。本文将深入探讨 JDBC 的各个方面,从基本概念到实际编程示例,以帮助您理解和使用 JDBC。
什么是 JDBC?
JDBC 是 Java Database Connectivity 的缩写,它是 Java 用于与关系型数据库进行交互的标准 API。JDBC 允许 Java 应用程序连接到不同的数据库管理系统(如MySQL、Oracle、PostgreSQL等),执行 SQL 查询和更新,以及处理结果集。
通过 JDBC,您可以完成以下任务:
- 连接到数据库
- 发送 SQL 查询
- 处理查询结果
- 更新数据库数据
- 管理数据库连接
JDBC 架构
在深入了解 JDBC 的使用方法之前,让我们先看看 JDBC 的架构。JDBC 架构分为两个主要部分:JDBC API 和 JDBC 驱动程序。
JDBC API
JDBC API 是 Java 提供的一组接口和类,用于连接到数据库和执行数据库操作。这些接口和类位于 java.sql
和 javax.sql
包中。
以下是 JDBC API 的一些核心接口和类:
DriverManager
:用于管理数据库驱动程序的类,负责建立数据库连接。Connection
:表示与数据库的连接,用于创建Statement
对象。Statement
:用于执行 SQL 查询的对象。PreparedStatement
:继承自Statement
,用于执行预编译的 SQL 查询,提高性能和安全性。CallableStatement
:继承自PreparedStatement
,用于执行数据库存储过程。ResultSet
:表示 SQL 查询的结果集,用于检索查询结果。
JDBC 驱动程序
JDBC 驱动程序是由数据库供应商提供的实现 JDBC API 的具体类库。每个数据库供应商都需要提供自己的 JDBC 驱动程序,以便 Java 应用程序能够与其数据库进行通信。
JDBC 驱动程序分为四种类型:
-
Type 1 驱动程序(JDBC-ODBC 桥接驱动程序):这种驱动程序通过 Java 应用程序使用 ODBC(Open Database Connectivity)来连接到数据库。不建议使用此类型,因为它依赖于本地操作系统的 ODBC 驱动程序。
-
Type 2 驱动程序(本地 API 驱动程序):这种驱动程序是使用数据库供应商的本地库来连接到数据库的。它需要在每个平台上都有一个单独的驱动程序。
-
Type 3 驱动程序(网络协议驱动程序):这种驱动程序使用中间层服务器来转发 JDBC 请求,然后与数据库通信。这种驱动程序通常是纯 Java 实现的,不需要在客户端安装特定的数据库驱动程序。
-
Type 4 驱动程序(纯 Java 驱动程序):这种驱动程序完全由 Java 编写,不需要依赖本地库。它是最常用的 JDBC 驱动程序类型。
使用 JDBC 连接到数据库
下面我们将通过一个简单的示例来演示如何使用 JDBC 连接到数据库、执行 SQL 查询并处理查询结果。
步骤 1:加载数据库驱动程序
首先,您需要加载要使用的数据库驱动程序。对于不同的数据库,驱动程序的类名也不同。以下是一些常见的数据库驱动程序类名:
- MySQL 驱动程序:
com.mysql.cj.jdbc
try {// 加载 MySQL 驱动程序Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {System.err.println("无法加载数据库驱动程序");e.printStackTrace();
}
在上面的代码中,我们使用 Class.forName()
方法来加载 MySQL 驱动程序。如果加载失败,将抛出 ClassNotFoundException
异常。
步骤 2:建立数据库连接
一旦驱动程序加载成功,我们就可以建立与数据库的连接。在这一步中,您需要提供数据库的 URL、用户名和密码。
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";try {// 建立数据库连接Connection connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {System.err.println("无法建立数据库连接");e.printStackTrace();
}
在上面的代码中,我们使用 DriverManager.getConnection()
方法来建立与数据库的连接。这个方法接受三个参数:数据库的 URL、用户名和密码。如果连接失败,将抛出 SQLException
异常。
步骤 3:执行 SQL 查询
一旦建立了数据库连接,我们就可以执行 SQL 查询了。以下是一个简单的示例,演示如何执行一个查询并获取结果。
try {// 创建 Statement 对象Statement statement = connection.createStatement();// 执行 SQL 查询String sql = "SELECT * FROM employees";ResultSet resultSet = statement.executeQuery(sql);// 处理查询结果while (resultSet.next()) {int employeeId = resultSet.getInt("employee_id");String firstName = resultSet.getString("first_name");String lastName = resultSet.getString("last_name");System.out.println("Employee ID: " + employeeId);System.out.println("First Name: " + firstName);System.out.println("Last Name: " + lastName);}// 关闭结果集和语句resultSet.close();statement.close();
} catch (SQLException e) {System.err.println("SQL 查询失败");e.printStackTrace();
}
在上面的代码中,我们首先创建了一个 Statement
对象,然后使用 executeQuery()
方法执行 SQL 查询。查询结果存储在 ResultSet
对象中,我们可以使用 resultSet.next()
方法遍历结果集中的行,并使用列名或索引检索数据。
步骤 4:关闭连接
最后,在使用完数据库连接后,要确保将其关闭以释放资源。
try {// 关闭数据库连接connection.close();
} catch (SQLException e) {System.err.println("关闭数据库连接失败");e.printStackTrace();
}
这就是一个简单的 JDBC 查询示例。当然,JDBC 还支持更复杂的查询、更新和事务处理等功能。
总结
JDBC 是 Java 与数据库交互的标准 API,允许您连接到不同的数据库管理系统,执行 SQL 查询和更新数据。本文介绍了 JDBC 的基本概念和使用方法,包括加载驱动程序、建立连接、执行查询和关闭连接。希望这篇文章能帮助您更好地理解和使用 JDBC,从而构建强大的数据库应用程序。
作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |
相关文章:

【Java 进阶篇】深入理解 JDBC:Java 数据库连接详解
数据库是现代应用程序的核心组成部分之一。无论是 Web 应用、移动应用还是桌面应用,几乎都需要与数据库交互以存储和检索数据。Java 提供了一种强大的方式来实现与数据库的交互,即 JDBC(Java 数据库连接)。本文将深入探讨 JDBC 的…...
Web开发-session介绍
目录 session介绍session使用场景session具体使用需要注意的是 session介绍 session 可以被看作是一种缓冲区,用于在多个请求之间存储和传递用户数据。在 Web 应用程序中,session 通常用于存储用户登录信息、购物车数据、用户偏好设置等。当用户在应用程…...

基于Qt Creator开发的坦克大战小游戏
目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!ÿ…...

小说推文和短剧推广以及电影达人带货电影票
小说推文、短剧推广、电影达人(带或电影票)都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么? 小说推文和短剧推广的逻辑其实一样,分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户,…...
朴素贝叶斯分类(下):数据挖掘十大算法之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
9.30作业
C语言基础考题(40) 选择题 20分每题2分 1、已知字母A的ASCII码为十进制数值65,且S为字符型,则执行语句SA6-3;后S中的值为 ( ) A.D B.68 C.不确定的值 D.C 2、若有定义语句:int a12;,则执…...

[GWCTF 2019]枯燥的抽奖
参考 https://www.cnblogs.com/AikN/p/15764428.html [GWCTF 2019]枯燥的抽奖-CSDN博客 打开环境 笑死我了,怎么那么像我高中校长 查看源代码 看到check.php,去访问一下 ok看到源代码了 因为上次做过,看到这个我就想到用php_mt_seed逆推…...
vue3中sync修饰符的使用
props是子组件与父组件进行通信的常用方式,使用步骤主要有以下几个: 1. 在子组件中定义props要从父组件接收的变量(变量的类型必须写明,默认值可选) // 这里以 document.vue 子组件为例 // 通过 defineProps 宏的方…...
Qt全屏显示与退出
仿照 按Escape键退出程序中的实现,我们在程序开始的时候全屏显示,按esc键的时候退出全屏。 showFullScreen 全屏显示只需要调用QWidget类(QMainWindow也是一个QWidget类)的 showFullScreen() 成员函数即可。 退出全屏&#x…...

OpenCV之直线曲线拟合
直线拟合fitLine void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); points:二维点的数组或vector line:输出直线,Vec4f (2d)或Vec6f (3d)的vector distType:距离类型 param:距离参数 reps:径向的精度参数 a…...

2023年哪款PDF虚拟打印机好用?
PDF文档想必大家都不陌生,在工作中经常会用到该格式的文档,那么有哪些方法能制作PDF文档呢?一般都是借助PDF虚拟打印机的,那么有哪些好用的软件呢? pdfFactory不仅为用户提供了丰富的PDF文档生成、打印功能࿰…...

Redis各数据类型特定的命令和用法 1.0版本
目录 一、Sring数据类型1.1 概述1.2 set/get/append/strlen命令1.3 incr/decr/incrby/decrby 命令1.4 getset命令1.5 setex命令1.6 setnx命令1.7 mset/mget/msetnx命令 二、List数据类型2.1 概述2.2 lpush/lpushx/lrange命令2.3 lpop/llen命令2.4 lrem/lset/lindex/ltrim命令2.…...

卫星图像应用 - 洪水检测 使用DALI进行数据预处理
这篇文章是上一篇的延申。 运行环境:Google Colab 1. 当今的深度学习应用包含由许多串行运算组成的、复杂的多阶段数据处理流水线,仅依靠 CPU 处理这些流水线已成为限制性能和可扩展性的瓶颈。 2. DALI 是一个用于加载和预处理数据的库,可…...

为什么字节大量用GO而不是Java?
见字如面,我是军哥。 我看很多程序员对字节编程语言选型很好奇,为此我还特地问了在字节的两位4-1的技术大佬朋友,然后加上自己的思考,总结了一下就以下 2 个原因: 1、 选型上没有历史包袱 字节的早期的程序员大多来自于…...

Hive SQL初级练习(30题)
前言 Hive 的重要性不必多说,离线批处理的王者,Hive 用来做数据分析,SQL 基础必须十分牢固。 环境准备 建表语句 这里建4张表,下面的练习题都用这些数据。 -- 创建学生表 create table if not exists student_info(stu_id st…...

NSSCTF做题(6)
[HCTF 2018]Warmup 查看源代码得到 开始代码审计 <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist ["source">"source.php","hint"…...

公众号商城小程序的作用是什么
公众号是微信平台重要的生态体系之一,它可以与其它体系连接实现多种效果,同时公众号内容创作者非常多,个人或企业商家等,会通过公众号分享信息或获得收益等,而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…...
关于 FOCA
目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新,最好收藏起来,总对你有好处。我们不定时发布一些 IT 内容,所以请关注我们。 此账号为 FOCA 唯一的官方账号,请勿轻易相信其他账号所发布内容。 团队 全…...

TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章
导语 | 近日,由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕,6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品,提出了直击痛点的意见与建议,同时也充分肯定了腾讯云 Cloud Studio 的实…...
2023-09-27 Cmake 编译 OpenCV+Contrib 源码通用设置
Cmake 编译 OpenCV 通用设置 特点: 包括 Contrib 模块关闭了 Example、Test、OpenCV_AppLinux、Windows 均只生成 OpenCV_World 需要注意: 每次把 Cmake 缓存清空,否则,Install 路径可能被设置为默认路径Windows 需要注意编译…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...