更新时间:2025-09-12 GMT+08:00
分享

基于GaussDB JDBC开发

JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。

M-Comaptibility数据库支持基于GaussDB JDBC的开发,具体使用方法参见《开发指南》中的“应用程序开发 > 基于JDBC开发”章节,部分功能和GaussDB存在差异,具体参见“GaussDB JDBC连接M-Compatibility数据库使用约束”。

GaussDB JDBC连接M-Compatibility数据库使用约束

  1. 使用DriverManager.getConnection(String url, Properties info)方法创建数据库连接时,info参数不支持如下属性:binaryTransfer、binaryTransferEnable、binaryTransferDisable;
  2. 使用DriverManager.getConnection(String url, Properties info)方法创建数据库连接时,当开启info参数mCompatible后,部分功能和行为会产生变更,变更兼容MySQL JDBC 5.1版本驱动,具体变更请参见《开发指南》中“应用程序开发 > 基于JDBC开发 > 开发步骤 > 连接数据库 > 连接参数参考”章节。
  3. 其他不支持的GaussDB特性,具体参见M-Compatibility数据库不支持的GaussDB特性
  4. 在使用GaussDB JDBC连接数据库,在PBE场景执行参数绑定时,推荐按照表1 各个数据类型推荐的JDBC写入方式中的JDBC写入方式进行绑定,否则可能导致实际的操作符选择与GSQL执行时不一致。

表1 各个数据类型推荐的JDBC写入方式

数值数据类型

MYSQL数据类型

DRS JDBC写入方式

整数类型

BOOL

prepStatement.setBoolean

BOOLEAN

prepStatement.setBoolean

TINYINT[(M)][UNSIGNED]

prepStatement.setShort/prepStatement.setInt

SMALLINT[(M)][UNSIGNED]

prepStatement.setShort/prepStatement.setInt

MEDIUMINT[(M)][UNSIGNED]

prepStatement.setInt/prepStatement.setInt

INT[(M)][UNSIGNED]

prepStatement.setInt/prepStatement.setLong

INTEGER[(M)][UNSIGNED]

prepStatement.setInt/prepStatement.setLong

BIGINT[(M)][UNSIGNED]

prepStatement.setLong/prepStatement.setBigDecimal

任意精度类型

DECIMAL[( M[,D])][UNSIGNED]

prepStatement.setBigDecimal

NUMERIC[(M[,D])][UNSIGNED]

prepStatement.setBigDecimal

DEC[(M[,D])][UNSIGNED]

prepStatement.setBigDecimal

FIXED[(M[,D])]

prepStatement.setBigDecimal

FLOAT[(M,D)][UNSIGNED]

prepStatement.setFloat(index, Float.parseFloat(val))

FLOAT(p)[UNSIGNED]

prepStatement.setFloat(index, Float.parseFloat(val))

DOUBLE[(M,D)][UNSIGNED]

prepStatement.setDouble

DOUBLE PRECISION[(M,D)]

prepStatement.setDouble

REAL[(M,D)][UNSIGNED]

prepStatement.setDouble

日期与时间数据类型

DATE

prepStatement.setDate

DATETIME[(fsp)]

prepStatement.setString/prepStatement.setTimestamp(1970/1/1 0:00:00)

TIMESTAMP[ (fsp)]

prepStatement.setString/prepStatement.setTimestamp

TIME[(fsp)]

prepStatement.setString

YEAR

prepStatement.setDate

字符串数据类型

CHAR[(M)]

prepStatement.setObject(index, val, 1);

VARCHAR(M)

prepStatement.setString

TINYTEXT

prepStatement.setString

TEXT

prepStatement.setString

MEDIUMTEXT

prepStatement.setString

LONGTEXT

prepStatement.setString

ENUM('value1','value2',...)

prepStatement.setString

SET('value1','value2',...)

prepStatement.setString

二进制数据类型

BINARY[(M)]

prepStatement.setBytes(index, val);

VARBINARY(M)

prepStatement.setBytes(index, val);

TINYBLOB

prepStatement.setBlob(index,PGBlob);

BLOB

prepStatement.setBlob(index,PGBlob);

MEDIUMBLOB

prepStatement.setBlob(index,PGBlob);

LONGBLOB

prepStatement.setBlob(index,PGBlob);

BIT[(M)]

prepStatement.setBigDecimal

JSON 数据类型

JSON

prepStatement.setString

  1. 使用getGeneratedKeys方法获取批量插入的自增值时,返回的结果是由数据库驱动根据首条自增值、自增步长以及插入的条目数决定。如果在批量插入操作中用户指定了自增列的值,那么返回的结果可能与预期的结果存在差异。
  2. 当GUC参数m_err_sql_dialect的值为"MySQL"时,可以启用错误码替换功能,将GaussDB内核的错误码和SQLSTATE替换为M-Compatibility模式数据库的错误码和SQLSTATE。

相关文档