OceanBase JDBC (Java数据库连接)的概念、分类与兼容性

news2024/12/23 0:37:39

本章将介绍 OceanBase JDBC的 概念与分类,已帮助使用 JDBC 的用户及技术人员更好的 了解JDBC,以及 OceanBase JDBC在与 MySQL 及 Oracle 兼容性方面的相关能力。

一、JDBC 基础

1.1 JDBC 的概念

JDBC 一般指 Java 数据库连接。Java 数据库连接(Java Database Connectivity,简称 JDBC)是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC 本质上也是一种发送 SQL 操作数据库的 client 技术,只不过需要通过 Java 编码完成。

通俗地来讲,JDBC 是规范(接口)不是实现(类),SUN 公司提供了一套完整的标准接口。标准 JDBC 接口主要的组成部分有以下这些:

      • java.sql.Driver interface
      • java.sql.DriverManager.getConnection method
      • java.sql.Connection interface
      • java.sql.DatabaseMetaData interface
      • java.sql.Statement interface
      • java.sql.CallableStatement interface
      • java.sql.PreparedStatement interface
      • java.sql.ResultSet interface
      • java.sql.ResultSetMetaData interface
      • java.sql.SQLException class
      • java.sql.SQLWarning class
      • java.sql.Savepoint interface
      • Mapping of java.sql.Types to SQL types

不同数据库厂商对标准 JDBC 接口的实现率、实现逻辑上都存在差异,同时厂商们还可以提供标准之外的特色接口用于支持某些数据库特性。比如 MySQL 依据规范实现了 MySQL JDBC,Mairadb 根据标准实现了 Maraidb JDBC,而 Oracle 也实现了 Oracle JDBC。同理我们 OceanBase 也实现了自己的 JDBC,OceanBase JDBC,又称 OceanBase Connector/J 或者叫做 OB-JDBC。

通常,我们谈及的 JDBC 标准分为:

      • JDBC 4.0及以下:参阅 🔗。
      • JDBC 4.1:要求使用 JDK 6 或更高版本,参阅 🔗。
      • JDBC 4.2:要求使用 JDK 8 或更高版本,参阅 🔗。

     当前 OceanBase JDBC 支持 JDBC 4.1 标准,计划后续支持 JDBC 4.2 标准。

1.2 JDBC 内容

对于1.1节提到的标准 JDBC 接口,通常使用的是:Connection、Statement、PrepareStatement、CallableStatement、ResultSet 这5个接口,其他的则是辅助接口。使用流程可以大致归纳后呈现为下图:

首先通过 DriverManager 来获得一个 Connection,得到了 Connection 就代表我们获得了和 Server 端的连接,可以在这基础上操作数据库了;DatabaseMetaData 可以通过 Connection.getMetaData() 接口获得,用于获取数据库相关信息;通过 Connection 的相关接口,我们可以继而获得 Statement,这里有三种 Statement,它们的继承关系如下:

其中

    1. Statement : 用于执行静态 SQL 语句,并返回它产生的结果的对象。
    2. PreparedStatement:表示预编译 SQL 语句的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中。 然后可以使用该对象多次有效地执行该语句。需要注意的是,即使使用了 PreparedStatement,也只是满足了其接口的定义,具体的实现方式和内部执行的逻辑则要看实际情况,有可能 server 端并没有执行预编译。在 OceanBase JDBC 中,这往往与 URL 参数有关,后续章节将展开详细阐述。
    3. CallableStatement:用于执行 SQL 存储过程的接口。 JDBC API 提供存储过程 SQL 转义语法。

这三种 Statement 都可以通过特定方式获得 ResultSet,我们可以利用 ResultSet 的接口获得结果集某一列的值;ResultSetMetaData 通过 ResultSet 来获得,用于获取返回结果集的元数据信息,如结果集的列名等。

小结:这里简单介绍了使用流程,后续还会有内容还会详细讲解 OceanBase JDBC 的使用技巧哦。

二、JDBC Driver 分类

JDBC 驱动可以分为四类。

2.1 JDBC-ODBC bridge

JDBC-ODBC bridge,是一种数据库驱动程序实现,它使用 ODBC 驱动程序连接到数据库, 驱动程序将 JDBC 方法调用转换为 ODBC 函数调用。

本类型驱动程序的优势是,几乎可以访问任何可以使用 ODBC 的数据库系统。但是它的缺点也很明显,该驱动程序依赖于 ODBC,而 ODBC 又依赖于运行 JVM 的底层操作系统的本机库,特定的 ODBC 驱动程序并非总是在所有平台上都可用,因此,该驱动程序的便携性可移植性十分有限。

此外,使用此驱动程序会导致其他安装依赖项;需要通过 JNI 等技术调用 ODBC 接口,性能较差;不支持完整的 Java 命令集;受到 ODBC 驱动程序功能的限制。该技术不适合高交易环境。 

2.2 Native-API driver

Native-API 驱动程序,是一种使用数据库客户端库的数据库驱动程序实现,驱动程序将 JDBC 方法调用转换为数据库 API 的本机调用。 例如:Oracle OCI 驱动程序是该类型的驱动程序,在使用Oracle JDBC的时候可以通过修改 URL 的方式来使用 OCI 模式,具体可以参考文档 🔗。

Native-API driver 相比 JDBC-ODBC bridge 性能更好,但是也有一定缺陷:

    • 供应商客户端库需要安装在客户端计算机上;
    • 并非所有数据库都有客户端库;
    • 此驱动程序取决于平台,也有移植性的限制。

2.3 Network-Protocol driver (Middleware driver)

Network-Protocol 驱动程序,也称为数据库中间件的纯 Java 驱动程序, 是一种数据库驱动程序实现。它利用调用程序和数据库之间的中间层,中间层(应用程序服务器)将 JDBC 调用直接或间接转换为与供应商特定的数据库协议。

本类型驱动的优势在于:

    • 由于客户端和中间件服务器之间的通信是独立于数据库的,与平台相关的差异由中间件处理;
    • 同一个客户端 JDBC 驱动程序可以用于多个数据库,这取决于中间件配置支持的数据库数量;
    • 中间件服务器(可以是成熟的 J2EE 应用程序服务器)可以提供典型的中间件服务,如缓存(连接、查询结果等)、负载平衡、日志记录和审计。

缺点在于需要在中间层完成特定于数据库的编码,添加的中间件层可能会导致额外的延迟。

2.4 Database-Protocol driver (Thin driver)

Direct to Database Pure Java Driver,是一种数据库驱动程序实现,可将 JDBC 调用直接转换为供应商特定的数据库协议。由于数据库协议是特定于供应商的,JDBC 客户端需要单独的驱动程序,通常是供应商提供的。

本类型驱动程序的优点在于:完全用 Java 编写,因此与平台无关;JVM 可以管理应用程序到数据库连接的所有方面,方便调试;提供了比 JDBC-ODBC bridge 和 Native-API driver 更好的性能,因为它没有将调用转换为 ODBC 或数据库 API 调用的开销;与 Network-Protocol driver 的不同之处在于,协议转换逻辑不在中间件而在客户端,不需要相关软件即可工作。

缺点就是驱动程序是特定于数据库的,不同的数据库供应商使用广泛不同的(通常是专有的)网络协议,需要连接到不同类型的数据库时依赖多个驱动。

小结:以上4种 JDBC Driver 的区别和优缺点,你领会了吗?在此说明,OceanBase JDBC 属于 Database-Protocol driver,OceanBase JDBC 富客户端属于 Native-API driver。

三、OB-JDBC 的版本规划

3.1 版本对比

OceanBase JDBC 主要分为两个大的版本,包括JDBC 1.x、JDBC 2.x。两者主要的差异对比如下:

1.x2.x
环境要求JDK 1.6 ~ 1.8JDK 1.8
开源协议GPLLGPL
初始开源项目及版本Mysql JDBC 5.1.40Maraidb JDBC 2.6.2
当前状态stable 不再开发新功能,只做bugfixmainline 当前对外推送主要版本,新的feature也在此添加
兼容性mysql 兼容性较强,oracle兼容性弱mysql兼容性相对1.x弱,oracle 兼容性强于1.x,且对OB4.0 做了兼容

3.2 迭代策略

如图所示,截至 2022-10-12 当前 OceanBase JDBC 的版本中,1.x 最新版本为1.1.10.4,JDBC 1.x 当前为 stable 状态,不再进行大的 feature 的更新,只做 bugfix,且不推荐新的客户使用1.x,除非客户的 JDK 为1.6或1.7且无法升级替换。JDBC 2.x 作为当前的主要输出版本,推荐新客户使用。

其中:

  • 4位的版本号为 bugfix 版本,一般是为某个客户专门提供的,比如2.2.7.x 对应的是山东移动,2.2.10.x 对应的江苏移动。
  • 2.3.0 是富客户端的 feature 分支,目前已合并回主分支,2.4.1及之后的版本均包含该功能。
  • 2.4.x 加入了 OB 4.0 相应的新 feature,我们在版本号上与之对齐。

3.3 兼容性

驱动兼容性的目标,是让使用 Oracle(Oracle-JDBC)/ MySQL(MySQL-JDBC)的业务不改动代码或尽可能少地改动代码,来迁移到 OceanBase 上。

因此,OceanBase JDBC 兼容性工作主要涉及两个方面:数据类型的兼容、接口的兼容。数据类型和接口又包括两类:标准 JDBC 定义的基本类型和接口,Oracle-JDBC 扩展的类型和接口。我们的工作重点主要是数据类型的兼容、基本接口的兼容。

在兼容目标上,OB-Server 对齐 MySQL-Server 5.7.25 和 Oracle-Server 11g;OB-JDBC 对齐 MySQL-JDBC 5.1.40 和 ojdbc6 11.2.0.4,也对 MySQL-JDBC 8.x 和 ojdbc8 的部分行为进行了兼容。兼容性工作将会在 OceanBase 持续开展,为更多的用户提供更好的使用体验。

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

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

相关文章

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系; 平时在dev环境开发时,会把自己的本地服务也注册上去,但是这样的话,在客户端调用时请求可能会打到自己本地,对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

Go/Golang语言各种数据类型内存字节占用大小和最小值最大值

具体请前往:Go/golang语言基本数据类型字节大小和取值范围(最小值~最大值)

力扣104 : 二叉树最大深度

补:二叉树的最大深度 描述: 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 何解? 树一般常用递归:递到叶子节点开始倒着处理

Android GPU纹理数据拷贝

在 Android 开发中读取纹理数据有以下几种方法: glReadPixelsImageReaderPBO(Pixel BufferObject) HardwareBuffer 1. glReadPixels glReadPixels 是 OpenGL ES 的 API,通常用于从帧缓冲区中读取像素数据,OpenGL ES…

畅捷通T+ RecoverPassword.aspx

用友 畅捷通T RecoverPassword.aspx 存在未授权管理员密码修改漏洞,攻击者可以通过漏洞修改管理员账号密码登录后台 #漏洞影响版本 12.0,12.1.12.2.12.3 13.0 15.0 16.0 18.0 补丁号291都影响 19.0 补丁号167之前也有影响 对于老版本畅捷通已经…

最全最简单理解迭代器

1. 迭代器的基础概念(iterator) 1.1 本质 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 1.2 作用: 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。容器提供迭代…

python数据写入excel文件

主要思路:数据 转DataFrame后写入excel文件 一、数据格式为字典形式1 k e , v [‘1’, ‘e’, 0.83, 437, 0.6, 0.8, 0.9, ‘好’] 1、这种方法使用了 from_dict 方法,指定了 orient‘index’ 表示使用字典的键作为行索引,然…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…

docker之容器设置开机自启(4)

命令语法: docker update --restartalways 容器ID/容器名 选项: --restart参数 no 默认策略,在容器退出时不重启容器 on-failure 在容器非正常退出时(退出状态非0),才会重启容器 …

机器学习:决策树——ID3算法、C4.5算法、CART算法

决策树是一种常用于分类和回归问题的机器学习模型。它通过一系列的“决策”来对数据进行分类或预测。在决策树中,每个内部节点表示一个特征的测试,每个分支代表特征测试的结果,而每个叶节点则表示分类结果或回归值。 决策树工作原理 根节点&…

Angular 和 Vue2.0 对比

前言 :“业精于勤,荒于嬉;行成于思,毁于随” 很久没写博客了,大多记录少进一步探查。 Angular 和 Vue2.0 对比: 一.概念 1.1 Angular 框架: 是一款由谷歌开发的开源web前端框架(核…

Python酷库之旅-第三方库Pandas(208)

目录 一、用法精讲 971、pandas.MultiIndex.set_levels方法 971-1、语法 971-2、参数 971-3、功能 971-4、返回值 971-5、说明 971-6、用法 971-6-1、数据准备 971-6-2、代码示例 971-6-3、结果输出 972、pandas.MultiIndex.from_arrays类方法 972-1、语法 972-2…

[Linux]:IO多路转接之epoll

1. IO 多路转接之epoll 1.1 epoll概述 epoll是Linux内核为处理大规模并发网络连接而设计的高效I/O多路转接技术。它基于事件驱动模型,通过在内核中维护一个事件表,能够快速响应多个文件描述符上的I/O事件,如可读、可写、异常等,…

Spring Security 认证流程,长话简说

一、代码先行 1、设计模式 SpringSecurity 采用的是 责任链 的设计模式,是一堆过滤器链的组合,它有一条很长的过滤器链。 不过我们不需要去仔细了解每一个过滤器的含义和用法,只需要搞定以下几个问题即可:怎么登录、怎么校验账户、认证失败…

API 接口进行多分支管理的方法

原文链接:API 接口进行多分支管理的方法

链表类算法【leetcode】

链表的定义 面试时,需要自己手写... // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 }; 【构造函数可以省略,C默认生成一个构造函数…

重构开发之道,Blackbox.AI为技术注入智能新动力

本文目录 一、引言二、Blackbox.AI实战体验2.1 基于网页界面生成前端代码进行应用开发2.2 与AI助手实现实时智能对话2.3 重塑大型文件交互方式2.4 链接Github仓库进行对话编程 三、总结 一、引言 在生产力工具加速进化的浪潮中,Blackbox.AI开始崭露头角&#xff0c…

【STM32F1】——9轴姿态传感器JY901与IIC通信

【STM32F1】——9轴姿态传感器JY901与IIC通信 一、简介 本篇主要对9轴姿态传感器JY901的调试过程进行总结,实现了以下功能。 IIC通信采集+串口收发:使用STM32F103C8T6的GPIO口模拟IIC,从JY901读取数据,并通过USART1串口发送到PC。二、JY901介绍 电压:3.3-5V量程:X/Z轴 …

Linux网络——自定义协议与序列化

一、协议 协议是一种 " 约定 ". socket api 的接口 , 在读写数据时 , 都是按 " 字符串 " 的方式来发送接收的。如 果我们要传输一些 " 结构化的数据 ",依然可以通过协议。 其实,协议就是双方约定好的结构化的数据。…

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建 (1)虚拟机 ubuntu 要使用桥接模式,不能使用其他模式 (2)通过网线将PC和开发板网口直连:这样的连接,开发板是无法连接外网的 (3&#xff…