什么是JDBC

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

JDBC原理

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

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。 当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

模拟JDBC接口

接口在开发中的作用

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

  • 定义标准:接口可以用于定义标准,规范应该如何完成某个任务或应该具有哪些属性、方法等。
  • 隐藏实现:接口隔离了类的实现和外界的逻辑使用,使得外部无论是访问接口的常量或是接口的方法都不需要关心接口的实现。
  • 实现多态:一个类实现多个接口,在实现接口的过程中,类便会具有接口中的所有方法。这样我们就可以在实际应用中方便的实现多态的效果。
  • 扩展性和灵活性:通过接口可以为项目提供更好的扩展性和灵活性,接口定义了一个共同的标准,使得新的类可以很容易地加入到已有的系统中,而且不需要修改现有的代码。
    总的来说,Java中的接口可以让我们通过规范来编写更加标准和灵活的代码,使得代码易于维护和扩展,并通过多态的特性来提高代码的重用性和可读性。 Java接口在使用场景中,一定是存在两个角色的,一个是接口的调用者,一个是接口的实现者,接口的出现让调用者和实现者解耦合了。

编写程序模拟JDBC接口

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

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

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

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

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

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

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

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

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

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

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

java 复制代码
driver=MySQLDriver

Java代码如下:

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的本质:他就是一套接口。

相关推荐
前端 贾公子6 分钟前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
杨云龙UP7 分钟前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
yzs8724 分钟前
openGauss branch diff能力解析
数据库·oracle
CoderYanger27 分钟前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
郭小李34 分钟前
spring中@Transactional注解对事务的支持
数据库·spring·oracle
运维行者_36 分钟前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
高铭杰38 分钟前
Postgresql源码(160)新的共享内存注册机制,为动态调整shared_buffers打基础
数据库·postgresql
一条泥憨鱼42 分钟前
【Kafka】零基础学习教程
java·分布式·学习·kafka
数据库小学妹1 小时前
AI Agent连数据库怎么控权限?只读账号的4个缺口
数据库·人工智能·安全·数据库权限·审计·ai数据库·只读账号
Wang's Blog1 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友