Java学习教程,从入门到精通,JDBC驱动程序类型及语法知识点(91)

JDBC驱动程序类型及语法知识点

一、JDBC驱动程序类型

JDBC驱动程序主要有以下四种类型:

1. Type 1:JDBC - ODBC桥驱动程序(JDBC - ODBC Bridge Driver)

  • 特点:这种驱动程序是Java与ODBC(Open Database Connectivity)的桥梁。它通过调用本地的ODBC驱动程序来实现与数据库的连接。由于需要本地驱动程序的支持,所以它不是纯Java驱动程序。
  • 优点:开发简单,可以连接到任何支持ODBC的数据库。
  • 缺点:性能相对较差,因为需要在Java和本地代码之间进行转换。并且在不同的操作系统平台上需要安装不同的ODBC驱动程序,移植性较差。
  • 适用场景:适用于小型应用程序或开发阶段,当需要快速连接到数据库进行测试时。

2. Type 2:本地API驱动程序(Native API Driver)

  • 特点:这种驱动程序使用本地API(如DB2的CLI、Oracle的OCI等)来与数据库进行交互。它需要在客户端安装特定数据库的本地库。
  • 优点:性能比Type 1驱动程序好,因为直接使用数据库的本地API,减少了中间的转换环节。
  • 缺点:不是纯Java驱动程序,需要在不同的操作系统上安装不同的本地库,移植性差。并且需要对数据库的本地API有深入的了解。
  • 适用场景:适用于对性能要求较高,且开发环境和运行环境相对固定,能够安装数据库本地库的应用程序。

3. Type 3:网络协议驱动程序(Network Protocol Driver)

  • 特点:这种驱动程序通过网络协议与数据库服务器进行通信。客户端的驱动程序将JDBC调用转换为数据库服务器能够理解的网络协议,然后通过网络发送给服务器。服务器端有一个中间件(如数据库连接服务器)将网络协议转换为数据库能够理解的本地协议。
  • 优点:纯Java驱动程序,具有良好的移植性。可以在任何支持Java的平台上运行,不需要安装数据库的本地库。并且可以实现数据库连接的集中管理,便于维护和安全控制。
  • 缺点:增加了网络通信的复杂性,可能会导致性能略微下降。并且需要在服务器端部署中间件,增加了系统的复杂度。
  • 适用场景:适用于分布式应用程序,特别是当客户端和数据库服务器不在同一台机器上,且需要集中管理数据库连接时。

4. Type 4:纯Java驱动程序(Pure Java Driver)

  • 特点:这种驱动程序完全用Java编写,不需要任何本地库或中间件。它将JDBC调用直接转换为数据库能够理解的网络协议,通过网络发送给数据库服务器。
  • 优点:纯Java驱动程序,具有最好的移植性。可以在任何支持Java的平台上运行,不需要安装额外的本地库或中间件。并且性能较好,因为减少了中间环节的转换。
  • 缺点:需要数据库服务器支持特定的网络协议。并且对于一些复杂的数据库操作,可能不如Type 2驱动程序灵活。
  • 适用场景:是最常用的驱动程序类型,适用于大多数Java应用程序,特别是需要在多种操作系统平台上运行的应用程序。

二、JDBC语法知识点

1. 加载驱动程序

在使用JDBC之前,需要加载数据库驱动程序。对于Type 4驱动程序,通常使用Class.forName()方法加载驱动类。例如,对于MySQL数据库,加载驱动的代码如下:

java复制

Class.forName("com.mysql.cj.jdbc.Driver");

这行代码的作用是将MySQL的JDBC驱动类加载到JVM(Java虚拟机)中,使得后续可以通过JDBC API与MySQL数据库进行连接和交互。

2. 建立数据库连接

加载驱动程序后,需要建立与数据库的连接。使用DriverManager.getConnection()方法可以建立连接。该方法需要传入数据库的URL、用户名和密码。以MySQL数据库为例,建立连接的代码如下:

java复制

String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);

其中,url是数据库的连接字符串,指定了数据库的类型(jdbc:mysql://)、服务器地址(localhost)、端口号(3306)、数据库名称(mydatabase)以及一些连接参数(如字符编码、时区等)。usernamepassword分别是数据库的用户名和密码。DriverManager.getConnection()方法返回一个Connection对象,代表与数据库的连接。

3. 创建Statement对象

建立连接后,需要创建一个Statement对象来执行SQL语句。Statement对象可以执行静态SQL语句,即在程序编译时已经确定的SQL语句。创建Statement对象的代码如下:

java复制

Statement stmt = conn.createStatement();

这行代码通过Connection对象的createStatement()方法创建了一个Statement对象。使用Statement对象可以执行查询、更新等SQL操作。

4. 执行SQL查询语句

使用Statement对象可以执行SQL查询语句。执行查询语句的方法是executeQuery(),它返回一个ResultSet对象,代表查询结果。例如,查询users表中所有记录的代码如下:

java复制

String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);

sql变量存储了要执行的SQL查询语句。stmt.executeQuery(sql)方法执行查询语句,并将结果存储在ResultSet对象rs中。通过遍历ResultSet对象,可以获取查询结果中的每一行数据。

5. 处理查询结果

获取到ResultSet对象后,需要遍历它来处理查询结果。使用ResultSet对象的next()方法可以移动到结果集的下一行,getXXX()方法(如getString()getInt()等)可以获取指定列的值。例如,处理查询结果的代码如下:

java复制

while (rs.next()) {int id = rs.getInt("id");String username = rs.getString("username");String email = rs.getString("email");System.out.println("ID: " + id + ", Username: " + username + ", Email: " + email);
}

while循环中,rs.next()方法逐行遍历结果集。每次循环时,使用rs.getInt("id")rs.getString("username")rs.getString("email")等方法获取当前行的idusernameemail列的值,并将它们打印出来。

6. 执行SQL更新语句

除了查询语句,还可以使用Statement对象执行SQL更新语句,如插入、更新、删除等操作。执行更新语句的方法是executeUpdate(),它返回一个整数,表示受影响的行数。例如,插入一条记录到users表的代码如下:

java复制

String sql = "INSERT INTO users (username, email) VALUES ('kimi', 'kimi@example.com')";
int rowsAffected = stmt.executeUpdate(sql);
System.out.println("Affected rows: " + rowsAffected);

sql变量存储了要执行的SQL插入语句。stmt.executeUpdate(sql)方法执行更新语句,并返回受影响的行数,存储在rowsAffected变量中。最后,将受影响的行数打印出来。

7. 关闭资源

在完成数据库操作后,需要关闭打开的资源,包括ResultSetStatementConnection对象。关闭资源可以释放数据库连接和系统资源,避免资源泄露。关闭资源的代码如下:

java复制

if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}
}
if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}
}
if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}
}

在关闭资源时,需要先判断资源对象是否为null,然后在try代码块中调用close()方法关闭资源。如果在关闭资源时发生SQLException异常,使用catch代码块捕获并打印异常信息。

三、案例代码

以下是一个完整的JDBC案例代码,演示了如何使用JDBC连接MySQL数据库,执行查询和更新操作,并处理查询结果。

java复制

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class JdbcExample {public static void main(String[] args) {// 数据库连接信息String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";String username = "root";String password = "123456";Connection conn = null;Statement stmt = null;ResultSet rs =

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

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

相关文章

Linux C 使用ZBar库解析二维码和条形码

1. 编译zbar库 下载 zbar 库源码,这里需要注意下,如果识别的二维码中有中文的话,会出现乱码,一般二维码里中文为UTF-8编码,zbar会默认给你把UTF-8转换为ISO8859-1。有两种解决办法,一是自己再转换一下编码…

【北京迅为】iTOP-4412全能版使用手册-第七十九章 Qt网络编程

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

用python实战excel和word自动化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现excel和word自动化--批量处理 前言--需求快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格&#xf…

uniapp 预加载分包,减少loading

在 uniapp 中,可以通过配置 pages.json 文件中的 preloadRule 属性来实现页面预加载功能。以下是具体操作步骤: 1. 在 pages.json 中配置 preloadRule preloadRule 用于指定哪些页面需要预加载,以及预加载时机。下面是一个示例配置&#xf…

C++ 智能指针、内存泄露、野指针、悬空指针

智能指针、内存泄露、野指针、悬空指针 内存泄露野指针 、悬空指针野指针悬空指针 智能指针std::unique_ptr创建 指向内存空间其它方法 std::shared_ptr 内存泄露 概念: 内存无法释放 举例: int* p new int[100]; int a{}; p &a;new了一个长度为…

介绍PyTorch张量

介绍PyTorch张量 介绍PyTorch张量 PyTorch张量是我们在PyTorch中编程神经网络时将使用的数据结构。 在编程神经网络时,数据预处理通常是整个过程的第一步,数据预处理的一个目标是将原始输入数据转换为张量形式。 torch.Tensor​类的实例 PyTorch张量…

【R安装】R语言的详细安装及环境配置(2024年11月)

目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】,进入下载界面: 选择…

Docker官网安装

1.官网 官方文档 https://www.docker.com/ Docker Hub官网 镜像 https://hub.docker.com/ 2.Docker 的三要素 1、镜像 2、容器 3、仓库 小总结 3.Docker 平台架构图 (架构版本) 4.安装Docker CentOS | Docker Docs 1.确定你是CentOS7及以上版本 …

寒假第一次牛客周赛 Round 76回顾

AC数&#xff1a;2&#xff08;A、C&#xff09; B 思路&#xff1a; 等价于求&#xff1a; 数量最多的字符 #include<stdio.h> int main() {int n,num;int a[26]{0};//用于存储字母 a 到 z 的出现次数。scanf("%d",&n);char s[n];scanf("%s",s)…

GARCH指导的神经网络在金融市场波动性预测中的应用

“GARCH-Informed Neural Networks for Volatility Prediction in Financial Markets” 论文地址&#xff1a;https://arxiv.org/pdf/2410.00288v1 摘要 波动性作为衡量风险的关键指标&#xff0c;广泛应用于金融投资的定价中。GARCH模型及其变体是用于股票波动性预测的传统工…

STM32-笔记43-低功耗

一、什么是低功耗&#xff1f; 低功耗‌是指通过优化设计和采用特定的技术手段&#xff0c;降低电子设备在运行过程中消耗的能量&#xff0c;从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行&#xff0c;旨在减少所有器件的功率损耗&am…

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像&#xff0c;这个镜像可以是从docker拉取&#xff0c;例如&#xff1a;现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…

【Ubuntu 24.04】虚拟机常见问题解决

1.24开启3D加速黑屏 参考文章&#xff1a;Ubuntu24开机黑屏&#xff0c;VMware卡死&#xff0c;虚拟机繁忙解决方案 没有3D加速就没有动画&#xff0c;所以我们需要开启3D加速&#xff0c;但是直接开启3D加速会黑屏 由于Ubuntu24内部的图形加速驱动异常&#xff0c;因此需要更新…

辅助云运维

为客户提供运维支持&#xff0c;保障业务连续性。 文章目录 一、服务范围二、服务内容三、服务流程四、 服务交付件五、责任分工六、 完成标志 一、服务范围 覆盖范围 云产品使用咨询、问题处理、配置指导等&#xff1b; 云产品相关操作的技术指导&#xff1b; 云相关资源日常…

灵活妙想学数学

灵活妙想学数学 题1&#xff1a;海星有几只&#xff1f; 一共有12只海洋生物&#xff0c;分别是5只脚的海星&#xff0c;8只脚的章鱼和10只脚的鱿鱼&#xff0c;这些海洋动物的脚一共有87只&#xff0c;每种生物至少有1只&#xff0c;问海星有几只&#xff1f; 解&#xff1a…

Java中的并发工具类:让多线程编程更轻松

Java中的并发工具类&#xff1a;让多线程编程更轻松 1. 引言&#xff1a;多线程编程的“痛” 多线程编程是Java开发中的一大难点&#xff0c;尤其是在高并发场景下&#xff0c;稍有不慎就会遇到线程安全问题、死锁、性能瓶颈等问题。比如&#xff1a; public class Counter …

Vue3使用vue-count-to数字滚动模块报错解决方案

小伙伴们是不是遇到了vue3项目使用vue-count-to出现报错的问题 报错如下&#xff1a; TypeError: Cannot read properties of undefined (reading _c) 这个错误信息具体是说没读取到_c的属性 具体不清楚是什么原因&#xff0c;排查还得去看源码&#xff0c;所以我们来解决&a…

idea上git log面板的使用

文章目录 各种颜色含义具体的文件的颜色标签颜色&#x1f3f7;️ 节点和路线 各种颜色含义 具体的文件的颜色 红色&#xff1a;表示还没有 git add 提交到暂存区绿色&#xff1a;表示已经 git add 过&#xff0c;但是从来没有 commit 过蓝色&#xff1a;表示文件有过改动 标…

一分钟学习数据安全——数据安全的核心概念CIA以及安当解决方案

数据安全三要素是指保密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;和可用性&#xff08;Availability&#xff09;&#xff0c;它们是信息安全领域的核心概念&#xff0c;旨在确保信息的安全和可信度。这边文章用一分钟的时间&#…

Electron 开发者的 Tauri 2.0 实战指南:文件系统操作

作为 Electron 开发者&#xff0c;我们习惯了使用 Node.js 的 fs 模块来处理文件操作。在 Tauri 2.0 中&#xff0c;文件系统操作被重新设计&#xff0c;采用了 Rust 的安全特性和权限系统。本文将帮助你理解和重构这部分功能。 文件操作对比 Electron 的文件操作 在 Electr…