当前位置: 首页 > news >正文

【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.sqljavax.sql 包中。

以下是 JDBC API 的一些核心接口和类:

  • DriverManager:用于管理数据库驱动程序的类,负责建立数据库连接。
  • Connection:表示与数据库的连接,用于创建 Statement 对象。
  • Statement:用于执行 SQL 查询的对象。
  • PreparedStatement:继承自 Statement,用于执行预编译的 SQL 查询,提高性能和安全性。
  • CallableStatement:继承自 PreparedStatement,用于执行数据库存储过程。
  • ResultSet:表示 SQL 查询的结果集,用于检索查询结果。

JDBC 驱动程序

JDBC 驱动程序是由数据库供应商提供的实现 JDBC API 的具体类库。每个数据库供应商都需要提供自己的 JDBC 驱动程序,以便 Java 应用程序能够与其数据库进行通信。

JDBC 驱动程序分为四种类型:

  1. Type 1 驱动程序(JDBC-ODBC 桥接驱动程序):这种驱动程序通过 Java 应用程序使用 ODBC(Open Database Connectivity)来连接到数据库。不建议使用此类型,因为它依赖于本地操作系统的 ODBC 驱动程序。

  2. Type 2 驱动程序(本地 API 驱动程序):这种驱动程序是使用数据库供应商的本地库来连接到数据库的。它需要在每个平台上都有一个单独的驱动程序。

  3. Type 3 驱动程序(网络协议驱动程序):这种驱动程序使用中间层服务器来转发 JDBC 请求,然后与数据库通信。这种驱动程序通常是纯 Java 实现的,不需要在客户端安装特定的数据库驱动程序。

  4. 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源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!&#xff…...

小说推文和短剧推广以及电影达人带货电影票

小说推文、短剧推广、电影达人(带或电影票)都可以通过“巨量推文“进行申请授权 小说推文和短剧推广是什么? 小说推文和短剧推广的逻辑其实一样,分为cpa拉新和cps分成的推广形式 cpa拉新是你推广的用户必须为新用户&#xff0c…...

朴素贝叶斯分类(下):数据挖掘十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介: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文档生成、打印功能&#xff0…...

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"…...

公众号商城小程序的作用是什么

公众号是微信平台重要的生态体系之一&#xff0c;它可以与其它体系连接实现多种效果&#xff0c;同时公众号内容创作者非常多&#xff0c;个人或企业商家等&#xff0c;会通过公众号分享信息或获得收益等&#xff0c;而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…...

关于 FOCA

目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新&#xff0c;最好收藏起来&#xff0c;总对你有好处。我们不定时发布一些 IT 内容&#xff0c;所以请关注我们。 此账号为 FOCA 唯一的官方账号&#xff0c;请勿轻易相信其他账号所发布内容。 团队 全…...

TVP专家谈腾讯云 Cloud Studio:开启云端开发新篇章

导语 | 近日&#xff0c;由腾讯云 TVP 团队倾力打造的 TVP 吐槽大会第六期「腾讯云 Cloud Studio」专场圆满落幕&#xff0c;6 位资深的 TVP 专家深度体验腾讯云 Cloud Studio 产品&#xff0c;提出了直击痛点的意见与建议&#xff0c;同时也充分肯定了腾讯云 Cloud Studio 的实…...

2023-09-27 Cmake 编译 OpenCV+Contrib 源码通用设置

Cmake 编译 OpenCV 通用设置 特点&#xff1a; 包括 Contrib 模块关闭了 Example、Test、OpenCV_AppLinux、Windows 均只生成 OpenCV_World 需要注意&#xff1a; 每次把 Cmake 缓存清空&#xff0c;否则&#xff0c;Install 路径可能被设置为默认路径Windows 需要注意编译…...

从Shadertoy到Cesium:那些GLSL移植时没人告诉你的分辨率陷阱

GLSL跨平台移植中的分辨率适配陷阱与实战解决方案 当我们将Shadertoy上令人惊艳的GLSL效果移植到Cesium等三维引擎时&#xff0c;往往会遇到一个看似简单却影响深远的问题——分辨率适配。这个问题不仅关乎视觉效果还原度&#xff0c;更直接影响着色器在不同设备上的表现一致性…...

std::unique_lock vs std::lock_guard:C++线程锁选择指南(附性能测试)

std::unique_lock vs std::lock_guard&#xff1a;C线程锁的深度抉择与实战优化 在C多线程编程中&#xff0c;锁的选择往往决定了程序的性能表现和稳定性。当我们需要在std::unique_lock和std::lock_guard之间做出选择时&#xff0c;不能简单地认为"功能多就是好"。本…...

告别卡顿!用UE5关卡流送(Level Streaming)优化你的开放世界游戏性能

告别卡顿&#xff01;用UE5关卡流送&#xff08;Level Streaming&#xff09;优化你的开放世界游戏性能 当玩家在广袤的开放世界中自由探索时&#xff0c;没有什么比突然的加载卡顿或帧率骤降更能破坏沉浸感了。作为UE5开发者&#xff0c;我们常常面临一个两难选择&#xff1a;…...

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

从.bib到.bbl&#xff1a;手把手教你搞定LaTeX参考文献的完整流程 如果你曾被LaTeX的参考文献格式折磨得焦头烂额&#xff0c;这篇文章就是为你准备的。我们将从零开始&#xff0c;完整走一遍从文献管理到最终PDF生成的每个步骤&#xff0c;特别关注那些让新手困惑的.bib、.bbl…...

OCLP-Mod:终极指南 - 让老旧Mac免费升级到最新macOS

OCLP-Mod&#xff1a;终极指南 - 让老旧Mac免费升级到最新macOS 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 你是否拥有一台被苹果官方"抛弃"的老旧Mac&#x…...

最完整的大模型算法工程师技术栈图谱(2026版)

目录 一、基础能力&#xff08;所有AI工程师的底座&#xff09; 1 编程语言 2 数据结构与算法 3 数学基础 二、深度学习基础 深度学习模型基础 三、大模型核心技术 1 Transformer架构 2 预训练 3 Tokenizer 四、大模型训练体系 1 分布式训练 2 训练优化技术 3 微…...

旧手机秒变4K摄像头:Iriun Webcam保姆级配置指南(附USB连接技巧)

旧手机秒变4K摄像头&#xff1a;Iriun Webcam保姆级配置指南&#xff08;附USB连接技巧&#xff09; 你是否曾为台式机缺少高清摄像头而烦恼&#xff1f;又或者手头闲置的安卓手机不知如何利用&#xff1f;将旧手机改造成专业级4K摄像头&#xff0c;不仅成本低廉&#xff0c;还…...

最大数(信息学奥赛一本通- P1549)(洛谷-P1198)

【题目描述】原题来自&#xff1a;JSOI 2008给定一个正整数数列 a1,a2,a3,⋯,an &#xff0c;每一个数都在 0∼p–1 之间。可以对这列数进行两种操作&#xff1a;添加操作&#xff1a;向序列后添加一个数&#xff0c;序列长度变成 n1&#xff1b;询问操作&#xff1a;询问这个序…...

SpringBoot+Vue社区老年人帮扶系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

WSABuilds社区活动:线上线下聚会与开发者大会参与指南

WSABuilds社区活动&#xff1a;线上线下聚会与开发者大会参与指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...