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

news2025/1/16 8:19:25

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.coloradmin.cn/o/2277452.html

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

相关文章

nodejs 037: 前端新手教程使用引导库 Intro.js

Intro.js简介 Intro.js 是一个流行的引导库,用于提供步进式的新手教程。它可以帮助你创建用户引导,展示一些步骤和提示,逐步引导用户了解应用程序的功能。 安装方法: npm install intro.js使用方法: import introJ…

Vue篇-07

Vue UI组件库 一、移动端常用的UI组件库 1.1、Vant 1.2、Cube UI 1.3、Mint UI 二、PC端常用的UI组件库 2.1、Element UI Element - The worlds most popular Vue UI framework 安装: 按需引入: 135_尚硅谷Vue技术_element-ui按需引入_哔哩哔哩_b…

适配器模式案例

如果在这样的结构中 我们在Controller中注入,但我们后续需要修改Oss时,比如从minioService改成AliyunService时,需要改动的代码很多。于是我们抽象出一个FileService,让controller只跟fileservice耦合,这样我没只需要在…

鸿蒙UI开发——键盘弹出避让模式设置

1、概 述 我们在鸿蒙开发时,不免会遇到用户输入场景,当用户准备输入时,会涉及到输入法的弹出,我们的界面针对输入法的弹出有两种避让模式:上抬模式、压缩模式。 下面针对输入法的两种避让模式的设置做简单介绍。 2、…

Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始变量 3.2、画一条折线 3.3、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 3.1、初始变量 关键代码: data() {return {map:null,// 定义路径坐…

栈算法篇——LIFO后进先出,数据与思想的层叠乐章(上)

文章目录 前言第一章:栈的基础知识回顾1.1 栈的结构与实现1.2 栈的应用第二章:删除字符串中的所有相邻重复项2.1 题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/2.2 题目分析:2.3…

计算机的错误计算(二百一十二)

摘要 利用两个大模型计算 实验表明,两个大模型均进行了中肯的分析。另外,其中一个大模型给出了 Python代码,运行后,结果中有7位错误数字;而一个大模型进行加减运算时出错。 例1. 计算 下面是与一个大模型的对话…

VMware虚拟机安装Home Assistant智能家居平台并实现远程访问保姆级教程

目录 前言 1. 安装Home Assistant 前言 本文主要介绍如何在windows 10 上用VMware Workstation 17 Pro搭建 Home Assistant OS Host os version:Windows 10 Pro, 64-bit (Build 19045.5247) 10.0.19045 VMware version:VMware Workstation 17 Pro 1. 安装Home …

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

【开源免费】基于Vue和SpringBoot的欢迪迈手机商城(附论文)

本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)

了解 SQL 注入并通过 SQLMap 工具利用此漏洞。 任务1:介绍 SQL 注入是一个普遍存在的漏洞,长期以来一直是热门 网络安全主题。要了解这个漏洞,我们必须首先 了解什么是数据库以及网站如何与数据库交互。 数据库是可以存储、修改和 检索。它…

【数据结构-堆】力扣1792. 最大平均通过率

一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学…

USRP,FM解调程序

USRP,FM解调程序

洛谷 P1101 单词方阵刷题笔记

题目 https://www.luogu.com.cn/problem/P1101 题目要求输出包含 yizhong 所有方向排列的矩阵图 观察答案除了yizhong 均为星号 因此我们可以用bool数组来标记每个位置的状态 定义星号为无效状态 false 我们对原矩阵图 进行遍历 每当找到一个y就试一下它各个方向是否满…

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表,我们会发现需要开通WPS会员才能使用合并功能; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢? 1、首先我们要看excel后缀是 .xlsx 还是 .xls ;如果是.xlsx 那么 我们需要修改为 .xls 注…

WPF、控件模板(ControlTemplate)和数据模板(DataTemplate)

前言 在 WPF 中,控件种类丰富且功能非常完善。一个显著的优点是 WPF 提供了强大的自定义能力和灵活的用户界面表现,能够满足各种复杂的应用需求。其中,ControlTemplate 和 DataTemplate 是两个非常重要的概念,分别用于自定义控件…

Redis十大数据类型详解

Redis(一) 十大数据类型 redis字符串(String) string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…

Python Wi-Fi密码测试工具

Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点…

qml AngleDirection详解

1、概述 AngleDirection 是 QML(Qt Meta Language)中用于定义粒子发射方向的一个类,它属于 Qt Quick Particles 模块。AngleDirection 通过设置角度范围来控制粒子从发射器射出时的初始方向。这个类在创建具有特定发射模式的粒子效果时非常有…

VSCode使用纪要

1、常用快捷键 1)注释 ctrl? 单行注释, altshifta 块注释, 个人测试,ctrl? 好像也能块注释 2)开多个项目 可以先开一个新窗口,再新窗口打开另一个项目,这时就是同时打开多个项目了。 打开…