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,它们的继承关系如下:
其中
-
- Statement : 用于执行静态 SQL 语句,并返回它产生的结果的对象。
- PreparedStatement:表示预编译 SQL 语句的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中。 然后可以使用该对象多次有效地执行该语句。需要注意的是,即使使用了 PreparedStatement,也只是满足了其接口的定义,具体的实现方式和内部执行的逻辑则要看实际情况,有可能 server 端并没有执行预编译。在 OceanBase JDBC 中,这往往与 URL 参数有关,后续章节将展开详细阐述。
- 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.x | 2.x | |
环境要求 | JDK 1.6 ~ 1.8 | JDK 1.8 |
开源协议 | GPL | LGPL |
初始开源项目及版本 | Mysql JDBC 5.1.40 | Maraidb JDBC 2.6.2 |
当前状态 | stable 不再开发新功能,只做bugfix | mainline 当前对外推送主要版本,新的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 持续开展,为更多的用户提供更好的使用体验。
相关文章:

OceanBase JDBC (Java数据库连接)的概念、分类与兼容性
本章将介绍 OceanBase JDBC的 概念与分类,已帮助使用 JDBC 的用户及技术人员更好的 了解JDBC,以及 OceanBase JDBC在与 MySQL 及 Oracle 兼容性方面的相关能力。 一、JDBC 基础 1.1 JDBC 的概念 JDBC 一般指 Java 数据库连接。Java 数据库连接…...
Linux服务器定时执行jar重启命令
1. sh脚本编写 appNamecvcp-weather PIDps -ef |grep java | grep $appName | grep -v grep | awk {print $2} if [ "$PID" "" ]; thensleep 1;echo "no process";elseecho "process exsits";kill -9 $PID fi sleep 2s nohup /usr/l…...

速览!Win11 22H2/23H2 11月更新补丁KB5046633发布!
系统之家11月13日报道消息,微软为Win11 22H2和23H2用户发布了11月更新补丁KB5046633。此次更新后,系统版本号提升至22621.4460和22631.4460。该补丁包含多项改进和修复,有助于提升用户的使用体验感。想了解完整内容的小伙伴,请继续…...

A day a tweet(sixteen)——The better way of search of ChatGPT
Introducing ChatGPT search a/ad.及时的/及时地 ChatGPT can now search the web in a much better way than before so you get fast, timely a.有关的(relative n.亲戚,亲属;同类事物 a.比较的;相对的) answers with link…...

【网络】HTTP 协议
目录 基本概念基于 HTTP 的系统组成HTTP 的基本性质 HTTP 请求头 & 响应头HTTP 的请求方法HTTP 的返回码HTTP 的 CookieHTTP 缓存 Cache-Control会话HTTP/1.x 的连接管理 基本概念 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一…...
git push报错 unexpected disconnect while reading sideband packet
应该是缓冲不够引起的,可以使用以下命令增加缓存: git config --global http.postBuffer 1048576000 1048576000这里的单位是Byte, 也就是1G。 亲测可以了...

JSX 语法与基础组件使用
在 React Native 中,JSX 是一种 JavaScript 的语法扩展,用于描述 UI 界面。JSX 语法类似于 HTML,但它是 JavaScript 的语法糖,可以直接在 JavaScript 代码中编写 UI 组件。本章节将介绍 JSX 语法的基础知识,以及 React…...

ReactPress:构建高效、灵活、可扩展的开源发布平台
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 在当今数字化时代,内容管理系统(CMS)已成为各类网站和应用的核心组成部分。ReactPress,作为一款融合了现代Web开发多项先进技术的开…...
emulator总结
什么是硬件仿真器 做IC设计的人应该都知道软件仿真和FPGA原型验证,可以把硬件仿真器理解为这二者之间的产物,它同时具备二者的优点。 软件仿真(simulator)全面,支持UVM、assert、coverage收集、可以很方便的dump 波形…...

【Docker】‘docker‘ 不是内部或外部命令,也不是可运行的程序 或 批处理文件
在windows 电脑上安装了 Docker Desktop,在控制台输入 docker -v提示报错 ‘docker’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 报错原因是,环境变量没配置 解决办法,在系统环境变量中配置path ,重新打开cmd 或者…...

Mysql高可用架构方案
Mysql 介绍 Mysql是典型的开源关系型数据库,是许多网站、应用程序、企业软件产品的首选数据库。 Mysql特性: 易于使用,功能强大,支持事务、触发器、存储过程 管理工具多种多样且功能丰富 可以作为千万级数据管理的大型数据库 采…...

Go,15岁了[译]
请点击上方蓝字TonyBai订阅公众号! 虽然迟到了,但绝不缺席!新任Go技术负责人Austin Clements在Go语言15岁生日后的第二天,在Go官方博客上发表了庆祝文章“Go Turns 15[2]”。在这篇文章中,Austin回顾了过去一年Go项目和…...

【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡
1. 数据同步 通过上图我们发现每个分区的数据都不一样,但是三个分区对外的数据却是一致的 这个时候如果第二个副本宕机了 但是如果是leader副本宕机了会发生什么呢? 2. 数据均衡 在线上程序运行的时候,有的时候因为上面副本的损坏ÿ…...
微擎框架php7.4使用phpexcel导出数据报错修复
在使用微擎社区版时,用phpexcel导出数据,提示错误,经过搜索后得知是php版本问题。 之前一直是用的5.6现在改成了7.4。所以才发现了这个问题。 然后去gitee上看了下微擎官方的代码,好像也没有对这个问题进行修复。 找了下&#…...

Netty实现WebSocket Server是否开启压缩深度分析
是否开启压缩会直接影响与客户端是否能够成功握手。 一、具体分析 通常客户端发起与Websocket连接一般是以下形式。 1)包含6个必要的Header Request Headers Sec-WebSocket-Version: 13 Sec-WebSocket-Key: Nlpc0kiHFjRom5/62lj8bA Connection: Upgrade Upgrade…...
【Xrdp联机Ubuntu20.04实用知识点补充】
简单归纳了Xrdp远程连接可能会出现的问题 文章目录 一、网络篇二、Ubuntu远程联机一段时间后莫名奇妙断开Ubuntu20.04禁用休眠配置禁用挂起配置 三、refresh界面频繁刷新四、Authentication is required to create a color profile参考文章总结 一、网络篇 ip addr show eth0接…...

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”
【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时,DiskGenius检查出磁盘报错,报错信息:文件使用的簇被标记为空闲或与其它文件有交叉,…...

IDC机房服务器托管的费用组成
IDC机房服务器托管的费用,并不是只有我们所想的电费而已,还有一些其它费用组成,详细来看: 1. 机位费用: - 机位费用是根据服务器的尺寸和占用的空间来计算的。服务器通常按照U(Unit)的高度来…...
Halcon深度学习网络模型简介
HALCON为分类和语义分割提供了预训练的神经网络。当训练自定义网络时,这些神经网络是很好的起点。它们已经在一个大型图像数据集上进行了预训练。对于异常检测,HALCON提供了初始模型。 用于 3D 抓取点检测的模型 为 3D 抓取点检测提供了以下网络…...

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析
在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…...

基于集成Whisper 与 Pepper-GPT改进人机交互体验并实现顺畅通信
摘要 随着技术以令人眼花缭乱的速度发展,使人机交互更加顺畅比以往任何时候都更加重要。为了应对这一挑战,一个新领域应运而生:人机交互(HRI)。有效的人机交互被认为是实现技术效益的关键。 用户体验(UX&…...
C++设计模式精选面试题及参考答案
目录 什么是单例模式?它的应用场景是什么?如何保证单例模式线程安全? 什么是工厂方法模式?如何与简单工厂模式进行比较? 抽象工厂模式和工厂方法模式有什么区别?请给出实际应用场景。 什么是建造者模式?它和工厂模式有什么不同? 在什么情况下使用单例模式?如何在…...

Linux下的vim和gdb
vim: vim是编译功能强大,多模式的编译器。实际中vim有很多种模式,但是常用的就三种模式: 1、正常/普通/命令模式(Normal mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下…...

(蓝桥杯C/C++)——搜索
一、回溯法 1.回溯法简介 回溯法一般使用 ** DFS(深度优先搜索) ** 实现,DFS是一种遍历或搜索图、树或图像等数据结构的算法,当然这个图、树未必要存储下来(隐式处理就是回溯法),常见的是通过某种关系构造出的搜索树,搜索树一般…...

【网页设计】HTML5 和 CSS3 提高
目标 能够说出 3~5 个 HTML5 新增布局和表单标签能够说出 CSS3 的新增特性有哪些 1. HTML5 的新特性 注:该部分所有内容可参考菜鸟教程菜鸟教程 - 学的不仅是技术,更是梦想! (runoob.com) HTML5 的新增特性主要是针对于以前的不足…...

FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
继这篇博客之后 从零开始FastGPT本地部署|Windows 有同学问,不想在多个平台申请API-Key,不好管理且要付费,有木有白嫖方案呀? 答:有啊。用硅基流动。 注册方法看这篇 【1024送福利】硅基流动送2000万token啦࿰…...

https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR
问题描述 场景: https网站,请求http图片资源报错:net::ERR_SSL_PROTOCOL_ERROR 原因: Chrome 81 中,对混合内容资源加载策略进行了改变,会自动升级到 https:// ,如果无法通过 https:// 加载&am…...

攻防世界38-FlatScience-CTFWeb
攻防世界38-FlatScience-Web 点开这个here看到一堆pdf,感觉没用,扫描一下 试试弱口令先 源码里有: 好吧0.0 试试存不存在sql注入 根本没回显,转战login.php先 输入1’,发现sql注入 看到提示 访问后得源码 <?php ob_start(); ?>…...

探索 JNI - Rust 与 Java 互调实战
真正的救赎,并非厮杀后的胜利,而是能在苦难之中,找到生的力量和内心的安宁。 ——加缪Albert Camus 一、Rust Java ? Java 和 Rust 是两种现代编程语言,各自具有独特的优势,适用于不同的应用场景。 1、…...
网络安全-Linux基础(bash脚本)
文章目录 bash脚本编写基础使用的脚本解析器/bin/bash(声明)bash脚本需要拥有执行权限bash脚本语法输入与输出函数的封装条件判断语句条件符号 循环语句模块化编程 Linux进程操作查看寻找进程终止进程暂停与恢复进程后台运行 bash脚本编写系统内存资源占…...