支持的数据库参考手册
平台ORM框架目前支持以下几种数据库,并内置对应的 Provider 实现.以下 Provider 已实现驱动加载、方言解析、分页、事务、批量操作等常用功能,应用层只需切换 dbcp.properties 中的 driverClassName 与 url 即可在各类数据库之间平滑迁移。
支持的数据库类型
| 数据库类型 | Provider 类名 | 兼容性说明 | 参考文档 |
|---|---|---|---|
| Oracle | OracleProvider | 标准 Oracle 数据库 | - |
| MySQL | MySqlProvider | 标准 MySQL 数据库 | - |
| OceanBase | MySqlProvider | 兼容 MySQL 语法 | OceanBase 数据库使用指南 |
| PostgreSQL | PostgreSQLProvider | 标准 PostgreSQL 数据库 | PostgreSQL 参考手册 |
| Dameng(达梦) | DamengProvider | 兼容 Oracle 语法和用法 | 达梦数据库(DM8)适配 |
| GaussDB | GaussDBProvider | 兼容 MySQL | 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(CREATE、ALTER、DROP 等)。
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. 不兼容项速览
- 唯一索引/复合唯一索引需包含分布列,否则报错
-
INSERT ... SELECT ... WHERE NOT EXISTS在 GTM-free 模式不支持 - 分布式列值不允许 UPDATE
- 事务回滚行为与 PostgreSQL 一致(语句级回滚)
六、Vastbase G100 参考手册
Vastbase G100 与 PostgreSQL 语法基本一致,可直接参考本文“PostgreSQL 特性”章节。
- 官方文档:Vastbase G100 文档中心
- Docker 安装:
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