基于GaussDB JDBC开发
JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。
M-Comaptibility数据库支持基于GaussDB JDBC的开发,具体使用方法参见《开发指南》中的“应用程序开发 > 基于JDBC开发”章节,部分功能和GaussDB存在差异,具体参见“GaussDB JDBC连接M-Compatibility数据库使用约束”。
GaussDB JDBC连接M-Compatibility数据库使用约束
- 使用DriverManager.getConnection(String url, Properties info)方法创建数据库连接时,info参数不支持如下属性:binaryTransfer、binaryTransferEnable、binaryTransferDisable;
- 使用DriverManager.getConnection(String url, Properties info)方法创建数据库连接时,当开启info参数mCompatible后,部分功能和行为会产生变更,变更兼容MySQL JDBC 5.1版本驱动,具体变更请参见《开发指南》中“应用程序开发 > 基于JDBC开发 > 开发步骤 > 连接数据库 > 连接参数参考”章节。
- 其他不支持的GaussDB特性,具体参见M-Compatibility数据库不支持的GaussDB特性。
- 在使用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 |
- 使用getGeneratedKeys方法获取批量插入的自增值时,返回的结果是由数据库驱动根据首条自增值、自增步长以及插入的条目数决定。如果在批量插入操作中用户指定了自增列的值,那么返回的结果可能与预期的结果存在差异。
- 当GUC参数m_err_sql_dialect的值为"MySQL"时,可以启用错误码替换功能,将GaussDB内核的错误码和SQLSTATE替换为M-Compatibility模式数据库的错误码和SQLSTATE。