(1)数据库类型不支持异常:dbType not support : null, url jdbc:kingbase8。
解决方法:
数据源配置:
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
filters: stat,wall,slf4j
去掉filters中的wall配置,改为: filters: stat,slf4j 。
(2)数据源连接拒绝异常:com.kingbase8.util.KSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
解决方法:数据源中的url: jdbc:kingbase8:192.168.132.11:54321/test,改为:jdbc:kingbase8://192.168.132.11:54321/demo。少了“//”会读取默认配置,即:host=localhost,port=5432。
(3) 表数据字段存在空字符串,但是无法查询到该条数据。如查询语句:
select * from sys_depart where parent_id = '',没有返回查询结果。
解决方法:在客户端连接工具执行:show ora_input_emptystr_isnull,发现结果是on,即配置了“空字符串默认被转为NULL”导致查询结果异常。在kingbase.config配置文件中修改ora_input_emptystr_isnull=off,保存并重启数据库:sys_ctl restart。
(4) 数据库中存在表sys_user,人大金仓数据库存在系统表sys_user,表冲突导致代码中查询的时候查的是系统表sys_user,而不是我们建的表。
解决方法:设置普通用户忽略系统表。system登录数据库,执行:
alter system set search_path = "$USER", PUBLIC,SYS_CATALOG;
select sys_reload_conf(); #这个语句是让上面的命令生效的。
(5)mysql中某张表字段类型为tinyint(1),使用人大金仓数据迁移工具迁移后该字段类型变为BOOLEAN,导致代码中的Integer字段无法转换数据类型报错。
解决方法:方法1:代码中的Integer字段类型改为boolean,这样在mysql和人大金仓数据库都能正确映射值。方法2:人大金仓数据迁移工具迁移数据时设置tinyint类型映射转换使用tinyint类型。
(6)数据类型转换错误,字符串转为无符号整型时失败。Mysql能使用如下语句能执行成功:
SELECT max(cast(querry_no AS UNSIGNED )) AS querry_no
FROM querry_list WHERE querry_no LIKE CONCAT('test','%')
但是在人大金仓数据库中异常:com.kingbase8.util.KSQLException: 错误: 类型 "UNSIGNED" 不存在。
解决方法:修改为:SELECT max(cast(querry_no AS INTEGER)) AS querry_no
FROM querry_list WHERE querry_no LIKE CONCAT('test','%') 。
(7)字符串格式时间转换异常。字段ZHYXQ的值为:2030-05-01T07:54:10.843Z格式,需要转为:2030-05-01 07:54:10.843。Mysql执行如下语句能正常执行:
Select FROM_UNIXTIME(ZHYXQ) as ZHYXQ from sys_user;
但是在人大金仓数据库中异常:SQL 错误 [42883]: 错误: 函数 FROM_UNIXTIME(CHARACTER VARYING) 不存在。Hint: 没有匹配指定名称和参数类型的函数。
解决方法:原因为人大金仓不存在FROM_UNIXTIME函数。修改为:
Select cast(ZHYXQ as TIMESTAMP) as ZHYXQ from sys_user;
或者Select to_timestamp(ZHYXQ,'yyyy-mm-dd hh24:mi:ss.us') as ZHYXQ from sys_user。