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

本章将介绍 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.mzph.cn/diannao/60332.shtml

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

相关文章

关于Django 模型字段 `choices`自定义数据类型的枚举——补充

文章目录 1. 处理 datetime 类型的 choices2. 处理 time 类型的 choices3. 处理 Decimal 类型的 choices4. 处理 UUID 类型的 choices5. 处理 float 类型的 choices 在 Choices 类的基础上扩展,可以将 choices 与特定数据类型(如 date 或 datetime&a…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …

如何在 Ubuntu 24.04 上安装和配置 Fail2ban ?

确保你的 Ubuntu 24.04 服务器的安全是至关重要的,特别是如果它暴露在互联网上。一个常见的威胁是未经授权的访问尝试,特别是通过 SSH。Fail2ban 是一个强大的工具,可以通过自动阻止可疑活动来帮助保护您的服务器。 在本指南中,我…

大模型论文精华—20241111

使用大型语言模型进行神经病理诊断的初步探索 研究问题 本研究探讨了大型语言模型(LLMs)在辅助医生进行神经病理学诊断中的潜在应用。具体来说,研究人员通过设计特定的问题和病例背景,询问多个流行的LLMs,并根据这些…

量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取交易数…

多商户中英双语电商系统设计与开发 PHP+mysql

随着全球电商市场的扩展,多商户平台成为了越来越多商家参与全球贸易的重要方式。为了适应不同语言用户的需求,尤其是中英双语用户的需求,设计一个支持中英双语的电商系统显得尤为重要。本文将重点探讨如何设计一个多商户中英双语电商系统&…

关于 3D Engine Design for Virtual Globes(三维数字地球引擎设计)

《3D Engine Design for Virtual Globes》是一本专注于三维虚拟地球引擎设计的专业书籍。这本书由Patrick Cozzi和Kevin Ring编写,覆盖了设计适用于虚拟球面环境的三维引擎的各个方面。虚拟地球引擎作为地理信息系统(GIS)中的一个核心组件&am…

ubuntu 20.04添加ros官方的软件源(解决下载ros软件包出现的E 无法定位软件包的问题)

ubuntu 20.04添加ros官方的软件源(解决下载ros软件包出现的E: 无法定位软件包的问题) 在 Ubuntu 20.04 上添加 ROS 官方软件源可以解决使用其他镜像源时遇到的 “E: 无法定位软件包” 的问题,主要是因为这些镜像源可能没有同步所有官方提供的…

单元测试、集成测试、系统测试有什么区别

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 单元测试、集成测试、系统测试有什么区别 1、粒度不同 集成测试bai粒度居中,单元测试粒度最小,系统du测试粒度最大。 2、测试方式不同…

CE2.【C++ Cont】练习题组2

1.数字反转 https://www.luogu.com.cn/problem/P5705 题目描述 输入一个不小于 100100 且小于 10001000,同时包括小数点后一位的一个浮点数,例如 123.4123.4 ,要求把这个数字翻转过来,变成 4.3214.321 并输出。 输入格式 一行一个…

Golang | Leetcode Golang题解之第557题反转字符串中的单词III

题目&#xff1a; 题解&#xff1a; func reverseWords(s string) string {length : len(s)ret : []byte{}for i : 0; i < length; {start : ifor i < length && s[i] ! {i}for p : start; p < i; p {ret append(ret, s[start i - 1 - p])}for i < le…

适合二开的web组态?

一、web组态的定义和背景 在深入探讨之前&#xff0c;我们先回顾一下“组态”的定义。在工业自动化领域&#xff0c;组态软件是用于创建监控和数据采集&#xff08;SCADA&#xff09;系统的工具&#xff0c;它允许工程师构建图形界面&#xff0c;实现与各种设备和机器的数据交互…

L1-4【练习7-11】 字符串逆序

输入一个字符串&#xff0c;对该字符串进行逆序&#xff0c;输出逆序后的字符串。 输入格式&#xff1a; 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出格式&#xff1a; 在一行中输出逆序后的字符串。 输入样例&#xff1a; Hello World!输…

【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据

1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件&#xff0c;这个文件中会存在hbase中的数据以kv类型显示&#xff0c;同时还会存在hbase的元数据信息&#xff0c;包括整个hfile文件的索引大小&…

使用 nsenter 进入 Docker 容器的操作

在容器化环境下&#xff0c;docker exec 通常是进入容器内部进行调试的常用方式&#xff0c;但在某些情况下&#xff0c;比如 Docker 容器管理工具出现问题&#xff0c;或者我们需要通过进程的命名空间来直接访问容器&#xff0c;nsenter 就成了一个非常有效的工具。本文将介绍…

什么是聚类分析,它在数据分析中的应用是什么

聚类分析是一种无监督学习方法&#xff0c;它旨在将数据集中的样本按照某种相似性准则自动进行分组。聚类分析的目标是将相似的样本划分为同一个簇&#xff0c;同时将不同簇之间的样本尽可能分离开。聚类分析的结果通常用簇的标签来表示&#xff0c;簇标签表示样本所属的簇。 …

MySQL 忘记 root 密码,使用跳过密码验证进行登录

MySQL 忘记 root 密码&#xff0c;使用跳过密码验证进行登录 修改 /etc/my.cnf 配置文件&#xff0c;在 [mysqld] 后面任意一行添加 skip-grant-tables vim /etc/my.cnf 重启 MySQL systemctl restart mysqld 登录 MySQL&#xff08;无 -p 选项&#xff0c;无需密码登录&…

[Linux]IO多路转接(上)

1. IO 多路转接之select 1.1 select概述 select 是系统提供的一个多路转接接口&#xff0c;其核心工作在于等待。它能够让程序同时监视多个文件描述符上的事件是否就绪&#xff0c;只有当被监视的多个文件描述符中有一个或多个事件就绪时&#xff0c;select 才会成功返回&…

推荐一款电脑清理和加速工具:Wise Care 365 Pro

Wise Care 365 Pro是一款可以清理注册表和磁盘垃圾文件&#xff0c;保护个人隐私记录&#xff0c;提高电脑使用安全的软件&#xff0c;是优化系统、提高Windows系统运行速度最好的选择!实时保护注册表不被其他程序未经许可地秘密修改。例如阻止程序更改您的浏览器主页&#xff…

代码随想录算法训练营第四十四天|Day44 动态规划

1143.最长公共子序列 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ye4y1L7CQ https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路 #define max(a, b) ((a) > (b) ? (a) : (b)) int longestCommonSu…