数据库参考手册

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

数据库配置范例汇总.md

支持的数据库类型

数据库类型 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(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