平台支持的数据库参考手册

平台ORM框架目前支持以下几种数据库,并内置对应的 Provider 实现.以下 Provider 已实现驱动加载、方言解析、分页、事务、批量操作等常用功能,应用层只需切换 dbcp.properties 中的 driverClassNameurl 即可在各类数据库之间平滑迁移。

支持的数据库类型

数据库类型 Provider 类名 兼容性说明 参考文档
Oracle OracleProvider 标准 Oracle 数据库 -
MySQL MySqlProvider 标准 MySQL 数据库 -
OceanBase MySqlProvider 兼容 MySQL 语法 OceanBase 数据库使用指南
PostgreSQL PostgreSQLProvider 标准 PostgreSQL 数据库 PostgreSQL 参考手册
Dameng(达梦) DamengProvider 兼容 Oracle 语法和用法 达梦数据库(DM8)适配
GaussDB GaussDBProvider 兼容 MySQL 和 PostgreSQL GaussDB 数据库参考手册
Vastbase G100 VastbaseProvider 兼容 PostgreSQL 和 MySQL 模式 Vastbase G100 参考文档

一、MySQL 参考手册

1. 本地 JDBC 配置(文件 dbcp.properties

########DBCP##########
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/iidp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username=username
password=password
initialSize=5
maxActive=500
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 'x'
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements=true
maxOpenPreparedStatements=20

二、Oracle 参考手册

1. 本地 JDBC 配置

########Oracle########
driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:SMOMDB
username=username
password=password
validationQuery=SELECT 'x' FROM DUAL
initialSize=5
maxActive=500
minIdle=5
maxWait=6000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=select 'x'
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements=true
maxOpenPreparedStatements=20

三、PostgreSQL 参考手册

PostgreSQL 版本: 16.6
下载地址: PostgreSQL 官方下载

1. 本地 JDBC 配置

########DBCP##########
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://127.0.0.1:5432/snest?currentSchema=public&encoding=UTF-8&timezone=UTC
username=username
password=password
initialSize=5
maxActive=500
minIdle=20
filters=stat
maxWait=6000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
poolPreparedStatements=true
maxOpenPreparedStatements=50
connectionProperties=druid.stat.sql.MaxSize=100;
keepAlive=true

2. PostgreSQL 特性

2.0 标识符大小写与引号使用对比

特性 PostgreSQL MySQL
默认大小写处理 大写转小写 依赖系统与配置
保留大小写方式 双引号 " 反引号 `
字符串引号 单引号 ' 单/双引号
标识符引号 双引号 " 反引号 `
列名大小写敏感性 依赖是否加双引号 所有系统不区分

2.1 Boolean 值问题

引擎使用 CHAR(1) 代替 BOOLEAN,插入 CHAR(1),查询返回 BOOLEAN

2.2 索引名称长度限制

  • 最大 63 字节,超长自动截断并警告
  • 同一 schema 内唯一
  • 推荐命名:idx_表_列uk_表_列

2.3 Transactional DDL

PostgreSQL 支持在事务中回滚 DDL(CREATEALTERDROP 等)。
MySQL / Oracle 执行 DDL 会隐式提交当前事务。

2.4 数据类型转换规则

  • 字符串 → 数字必须显式 CAST
  • 示例:INSERT INTO t(age) VALUES (CAST('123' AS INTEGER));

2.5 事务中止错误

错误:
current transaction is aborted, commands ignored until end of transaction block

解决:
执行 ROLLBACK; 后重新开启事务。

2.6 JSON 数据类型

  • JSON:保留原始文本格式

  • JSONB:二进制,推荐生产使用

  • 创建 GIN 索引:

    CREATE INDEX idx_jsonb ON tbl USING GIN (jsonb_col);

2.7 UPDATE 列名不能带别名

-- 错误
UPDATE tenant_user_instance t
SET t."update_date" = ...

-- 正确
UPDATE tenant_user_instance t
SET update_date = ...
WHERE t.action_dimension_id = ...

2.8 SELECT AS 别名大小写

未加双引号的别名会被转为小写。
正确:

SELECT display_name AS "displayName" FROM meta_app;

2.9 Schema 概念

维度 PostgreSQL MySQL
层级 库 → schema → 表 实例 → 库 → 表
默认 schema public
跨空间访问 同一连接内可跨 schema 跨库需多连接

3. PostgreSQL 基础教程(目录)

已整理为独立页面,请参见 PostgreSQL 教程


4. PostgreSQL 高级教程(目录)

已整理为独立页面,请参见 PostgreSQL 高级教程


四、OceanBase 参考手册

1. 与 MySQL 兼容性总结及 JDBC 配置

  • 高度兼容 MySQL 5.7/8.0 SQL 语法、事务、系统表
  • JDBC 必须追加参数:
    rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE

示例:

url=jdbc:mysql://xxx.xxx.xxx.xxx:2881/test?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&characterEncoding=utf-8&socketTimeout=3000000&connectTimeout=60000&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true

2. 批量操作配置

出错时检查是否缺失上述两项参数,参考 JDBC 配置示例

3. Docker 部署

docker pull quay.io/oceanbase/oceanbase-ce
docker run -p 2881:2881 --name oceanbase \
  -e MODE=MINI -e OB_TENANT_PASSWORD=****** \
  -d quay.io/oceanbase/oceanbase-ce

连接:
obclient -uroot@sys -h127.0.0.1 -P2881 -p

4. 本地 JDBC 配置(OceanBase)

########OceanBase########
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://xxx.xxx.xxx.xxx:2881/snest?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&characterEncoding=utf-8&socketTimeout=10000&connectTimeout=30000&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
username=root
password=******
validationQuery=SELECT 1

五、GaussDB 参考手册

1. 产品概述

  • 华为云企业级分布式数据库,支持集中式与分布式两种部署
  • IIDP 仅支持 MySQL 兼容模式dbcompatibility=MYSQL

2. 部署方案

3. 兼容性说明

部署方式 兼容模式
集中式 A=Oracle,B=MySQL,PG=PostgreSQL
分布式 ORA=Oracle,MYSQL=MySQL,PG=PostgreSQL

查看兼容性:

SELECT datname, datcompatibility FROM pg_database;

4. 本地 JDBC 配置

########gaussdb########
driverClassName=com.huawei.gaussdb.jdbc.Driver
url=jdbc:gaussdb://127.0.0.1:8000,127.0.0.1:8000,127.0.0.1:8000/tpcc?currentSchema=snest_jichen&autoBalance=true&refreshCNIpListTime=3&prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
username=******
password=******
validationQuery=SELECT 1
gaussdbDeployment=Distributed

5. 不兼容项速览

  1. 唯一索引/复合唯一索引需包含分布列,否则报错
  2. INSERT ... SELECT ... WHERE NOT EXISTS 在 GTM-free 模式不支持
  3. 分布式列值不允许 UPDATE
  4. 事务回滚行为与 PostgreSQL 一致(语句级回滚)

六、Vastbase G100 参考手册

Vastbase G100 与 PostgreSQL 语法基本一致,可直接参考本文“PostgreSQL 特性”章节。

docker run -d --name vastbase \
  -e VB_USERNAME=vastbase \
  -e VB_DBCOMPATIBILITY=PG \
  -p 5432:5432 \
  vastbase:v2.2.15

本地 dbcp.properties 配置

默认兼容模式(PostgreSQL)

########DBCP##########
driverClassName=cn.com.vastbase.Driver
url=jdbc:vastbase://ip:25432/snest_jichen?currentSchema=snest_changwen
username=snest_jichen
password=******

MySQL 兼容模式

########DBCP##########
driverClassName=cn.com.vastbase.Driver
url=jdbc:vastbase://ip:25434/snest_tpcc?currentSchema=snest_changwen&db_compatibility=mysql
username=snest_changwen
password=******
dbCompatibility=mysql

七、Dameng 参考手册

1. 版本:DM8

2. Docker 安装

docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar
docker run -d -p 30236:5236 --name dm8_test \
  -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin \
  -e EXTENT_SIZE=32 -e BLANK_PAD_MODE=1 \
  -e LOG_SIZE=1024 -e UNICODE_FLAG=1 -e LENGTH_IN_CHAR=1 \
  -v /data/dm8_test:/opt/dmdbms/data \
  dm8_single:dm8_20230808_rev197096_x86_rh6_64

默认用户名/密码:SYSDBA / SYSDBA001

3. Maven 依赖

<dependency>
  <groupId>com.dameng</groupId>
  <artifactId>DmJdbcDriver18</artifactId>
  <version>8.1.3.111</version>
</dependency>

4. 本地 dbcp.properties 配置

########dameng##########
driverClassName=dm.jdbc.driver.DmDriver
url=jdbc:dm://192.168.175.193:30236/SNEST_TEST
username=SNEST_TEST
password=SNEST_TEST#123