当前位置: 首页 > news >正文

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 持续开展,为更多的用户提供更好的使用体验。

相关文章:

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

本章将介绍 OceanBase JDBC的 概念与分类,已帮助使用 JDBC 的用户及技术人员更好的 了解JDBC,以及 OceanBase JDBC在与 MySQL 及 Oracle 兼容性方面的相关能力。 一、JDBC 基础 1.1 JDBC 的概念 JDBC 一般指 Java 数据库连接。Java 数据库连接&#xf…...

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. 数据均衡 在线上程序运行的时候,有的时候因为上面副本的损坏&#xff…...

微擎框架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 抓取点检测提供了以下网络&#xf…...

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

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

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...