第01章 JDBC概述

news/2025/2/27 11:14:12/文章来源:https://www.cnblogs.com/LunaNorth/p/18740569

什么是JDBC

JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
图片1.png

JDBC原理

早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司数据库服务器的API。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
图片2.png
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

模拟JDBC接口

接口在开发中的作用

Java中接口的作用主要有以下几个方面:

  1. 定义标准:接口可以用于定义标准,规范应该如何完成某个任务或应该具有哪些属性、方法等。
  2. 隐藏实现:接口隔离了类的实现和外界的逻辑使用,使得外部无论是访问接口的常量或是接口的方法都不需要关心接口的实现。
  3. 实现多态:一个类实现多个接口,在实现接口的过程中,类便会具有接口中的所有方法。这样我们就可以在实际应用中方便的实现多态的效果。
  4. 扩展性和灵活性:通过接口可以为项目提供更好的扩展性和灵活性,接口定义了一个共同的标准,使得新的类可以很容易地加入到已有的系统中,而且不需要修改现有的代码。

总的来说,Java中的接口可以让我们通过规范来编写更加标准和灵活的代码,使得代码易于维护和扩展,并通过多态的特性来提高代码的重用性和可读性。Java接口在使用场景中,一定是存在两个角色的,一个是接口的调用者,一个是接口的实现者,接口的出现让调用者和实现者解耦合了。

编写程序模拟JDBC接口

接口的制定者:SUN公司负责制定的

// SUN公司负责制定JDBC接口
public interface JDBC {// 负责连接数据库的方法void getConnection();
}

接口的实现者:各大数据库厂商分别对JDBC接口进行实现,实现类被称为驱动
MySQL数据库厂商对JDBC接口的实现:MySQL驱动

public class MySQLDriver implements JDBC{public void getConnection(){System.out.println("与MySQL数据库连接建立成功,您正在操作MySQL数据库");}
}

Oracle数据库厂商对JDBC接口的实现:Oracle驱动

public class OracleDriver implements JDBC{public void getConnection(){System.out.println("与Oracle数据库连接建立成功,您正在操作Oracle数据库");}
}

接口的调用者:要操作数据库的Java程序员(我们)

public class Client{public static void main(String[] args){JDBC jdbc = new MySQLDriver();// 只需要面向接口编程即可,不需要关心具体的实现,不需要关心具体是哪个厂商的数据库jdbc.getConnection();}
}

以上是操作MySQL数据库,如果要操作Oracle数据库的话,需要new OracleDriver():

public class Client{public static void main(String[] args){JDBC jdbc = new OracleDriver();// 只需要面向接口编程即可,不需要关心具体的实现,不需要关心具体是哪个厂商的数据库jdbc.getConnection();}
}

可能你会说,最终还是修改了java代码,不符合OCP原则呀,如果你想达到OCP,那可以将创建对象的任务交给反射机制,将类名配置到文件中,例如:
配置文件如下:

driver=MySQLDriver

Java代码如下:

import java.util.ResourceBundle;public class Client{public static void main(String[] args) throws Exception{String driverClassName = ResourceBundle.getBundle("jdbc").getString("driver");Class c = Class.forName(driverClassName);JDBC jdbc = (JDBC)c.newInstance();// 只需要面向接口编程即可,不需要关心具体的实现,不需要关心具体是哪个厂商的数据库jdbc.getConnection();}
}

最终通过修改jdbc.properties配置文件即可做到数据库的切换。这样就完全做到了调用者和实现者的解耦合。调用者不需要关心实现者,实现者也不需要关心调用者。双方都是面向接口编程。这就是JDBC的本质:它就是一套接口。

配置CLASSPATH

经过上面内容的讲解,大家应该知道JDBC开发有三个角色的参与:

  • 我们(对数据库中数据进行增删改查的Java程序员)
  • JDBC接口的制定者
  • JDBC接口的实现者(驱动)

以上三者凑齐了我们才能进行JDBC的开发。它们三个都在哪里呢?“我们”就不用多说了,写操作数据库的代码就行了。JDBC接口在哪(接口的class文件在哪)?JDBC接口实现类在哪(驱动在哪)?

JDBC接口在哪

JDBC接口在JDK中。对应的包是:java.sql.*;
JDBC API帮助文档就在JDK的帮助文档当中。
image.png
image.png

驱动在哪

驱动是JDBC接口的实现类,这些实现类是各大数据库厂家自己实现的,所以这些实现类的就需要去数据库厂商相关的网站上下载了。通常这些实现类被全部放到一个xxx.jar包中。下面演示一下mysql的驱动如何下载【下载mysql的驱动jar包】:
打开页面:https://dev.mysql.com/downloads/connector/j/
image.png
下载后:
image.png
解压:
image.png
上图中的“mysql-connector-j-8.2.0.jar”就是mysql数据库的驱动,8.2.0这个版本适用于目前最新版本的mysql数据库。可以使用解压工具打开这个jar包,看看里面是什么?
image.png
可以看到这个jar包中都是xxx.class文件,这就是JDBC接口的实现类。这个jar包就是连接mysql数据库的驱动。如果是oracle的驱动就需要去oracle的官网下载了。这里不再赘述。

如果使用文本编辑器开发

如果使用文本编辑器开发,不使用集成开发环境的话,以上的jar包就需要手动配置到环境变量CLASSPATH当中,配置如下:
如果jar包放在这里:
image.png
就需要这样配置环境变量CLASSPATH:
image.png
注意配置路径中的当前路径“.”是不能省略的。

如果使用IDEA工具开发

如果是采用集成开发工具,例如IDEA,就不需要手动配置CLASSPATH了,只需要将jar包放到IDEA中(实际上放到IDEA工具中的过程就是等同于在配置CLASSPATH)

第一步:创建lib目录,将jar包拷贝到lib目录
图片3.png

第二步:把lib包引入项目环境
图片4.png
图片5.png

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

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

相关文章

数组模拟单链表

题目代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010; int head, idx, e[N], ne[N]; // 两个值,两个数组// head:第一个节点的下标(表示头结点的下标) // idx:已经存储了几个数(到了第几个数…

ES-8.17.2版本集群搭建

前提工作准备  Linux 3台 16GB运行内存 8核 50GB磁盘  JDK17 环境配置  elasticsearch-8.17.2-linux-x86_64.tar.gz 安装包2.集群规划  在 ES 集群中,不同节点可承担不同角色: **主节点(Master Node)**:负责集群管理、节点选举、索引元数据管理。建议至少配置 3 个…

第9章 shell编程

Linux系统结构 Linux操作系统是一种开放源代码的类UNIX操作系统,它的结构分为内核、Shell和应用程序三个层次。内核层内核是Linux系统的核心部分,它负责管理系统各种硬件设备、文件系统、内存管理和进程管理等核心任务。Linux内核设计了良好的模块化结构,可以动态地加载和卸…

第2章 磁盘与文件管理

磁盘管理 windows和Linux磁盘管理的区别 windows资源管理方式系统一般安装在C盘 C盘下的"Windows"目录是操作系统的核心 C盘下的"Program Files"目录下安装软件 C盘下的"用户"目录是所有的用户,包括超级管理员也在其中 windows操作系统分为C盘、…

第3章 系统命令

系统当前时间 date命令:切换用户 su 用户名sudo 命令:表示使用超级管理员身份执行该命令,如果你当前不是管理员,希望以管理员身份执行某个命令时,使用sudo,需要输入超级管理员的密码: ​​ echo命令 输出字符串 echo "Hello, world!"这将会输出 Hello, world!…

https://avoid.overfit.cn/post/bad10ed894bd43c086e3ef9de7478bea

特征选择作为机器学习工作流程中的关键环节,对模型性能具有决定性影响。Featurewiz是一个功能强大的特征选择库,具备以下核心能力:高度自动化的特征选择,仅需少量代码即可完成。 全面的特征工程功能,不仅能够选择特征,还能生成数百个衍生特征并自动筛选最优特征组合。 实…

Redis复习-五种数据类型

String String是Redis中最常见的数据存储类型: 1.其基本编码方式是RAW,基于简单动态字符串(SDS)实现,存储上限为512mb。 2.如果存储的SDS长度小于44字节,则会采用EMBSTR编码,此时object head与SDS是一段连续空间。申请内存时只需要调用一次内存分配函数,效率更高。 3.如…

cfWGBS揭示与年龄和肌萎缩侧索硬化相关cfDNA甲基化变化及组织/细胞溯源

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 游离细胞DNA (Cell-free DNA,cfDNA)是血浆中游离的DNA片段,通常来源于正常细胞更新或病理状态下的细胞死亡。cfDNA已被广泛应用于癌症早期检测、胎儿遗传病诊断、器官移植评估等领域。然而,cfDNA在神经退行…

低代码加速智能制造,兰之天的选择是 NocoBase

兰之天借力 NocoBase,破解中小制造企业数字化转型困局,实现智能制造系统开发周期从数月压缩至数周。智能制造的挑战:数字化转型的必然趋势 在全球制造业加速迈向数字化、智能化的背景下,智能制造已成为提升企业竞争力的关键战略。根据财富商业洞察(Fortune Business Insig…

纷享销客CRM全面评测:纷享销客比销售易差异化对比

企业数字化转型热潮中,CRM是众多企业迈向数字化管理的里程碑。近年来,国产CRM在政策推动下成为大中型企业的首选,也有很多企业选择国产CRM替代国外供应商。国产CRM第一梯队中,纷享销客以其卓越的表现脱颖而出,稳坐头把交椅。IDC发布了最新数据报告《IDC China Semiannual …

ABB机器人平衡缸维修

在现代工业生产中,工业机器人扮演着至关重要的角色。其中,ABB机器人以其高精度、高可靠性而被广泛应用。然而,如同所有机械设备一样,ABB机器人也会出现故障,这就需要专业的维修。一、ABB机器人故障与平衡缸维修的重要性ABB机器人故障的出现会严重影响生产进程。机器人平衡…

python打包工具-Nuitka

nuitka将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。提高安全性和运行速度。 github:https://github.com/2267770481/cython_test 安装 pip install nuitka pip install ordered-set # 加速编译 pip install zstandard # onef…