jar更改
maven pom.xml文件
新增
<dependency>
<groupId>kingbase</groupId>
<artifactId>kingbase8</artifactId>
<version>8.2.0</version>
</dependency>
版本变更
<dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.3.Final</version> </dependency> <dependency> <groupId>org.hibernate.dialect</groupId> <artifactId>hibernate-dialect</artifactId> <version>4.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>
配置文件更改
dbconfig.properties
jdbc.driverClassName=com.kingbase8.Driver hibernate.dialect=org.hibernate.dialect.Kingbase8Dialect jdbc.url.zxlhdata=jdbc:kingbase8://127.0.0.1:54321/DB_USER?currentSchema=DRMS_USER_423 jdbc.username.zxlhdata=SYSTEM jdbc.password.zxlhdata=123456 jdbc.dbType=kingbase
链接参数说明
jdbc.url.zxlhdata=jdbc:kingbase8://IP:端口/数据库名称?currentSchema=当前模式名
spring-mvc-hibernate.xml
新增一项
<property name = "driverClassName" value = "${jdbc.driverClassName}" />
修改一项
<prop key="hibernate.dialect">org.hibernate.dialect.Kingbase8Dialect</prop>
自定义或重新函数
-- 新增date_format、YEARWEEK、GROUP_CONCAT、YEAR函数 -- 重写to_char、SYSDATE 函数 -- 每个函数名前都添加了模式名,如果不加模式名默认会添加到PUBLIC模式下,jdbc指定模式名的情况下会找不到函数 CREATE or REPLACE FUNCTION "DRMS_USER_423"."date_format"(anyelement,TEXT) RETURNS TEXT AS BEGIN IF $2='%Y' THEN RETURN to_char($1,'YYYY'); ELSEIF $2='%Y-%m-%d' THEN RETURN to_char($1,'YYYY-MM-DD'); ELSEIF $2='%Y-%m' THEN RETURN to_char($1,'YYYY-MM'); ELSEIF $2='%m' THEN RETURN to_char($1,'MM-DD'); ELSEIF $2='%d' THEN RETURN to_char($1,'DD'); ELSEIF $2='%Y-%m-%d %H:%i:%s' THEN RETURN to_char($1,'YYYY-MM-DD HH24:MI:SS'); ELSEIF $2='%Y-%m-%d %h:%i:%s' THEN RETURN to_char($1,'YYYY-MM-DD HH24:MI:SS'); END IF; RETURN to_char($1,'YYYY-MM-DD'); END; CREATE or REPLACE FUNCTION "DRMS_USER_423"."to_char"(anyelement,TEXT) RETURNS TEXT AS BEGIN IF $2='%Y' THEN RETURN to_char($1,'YYYY'); ELSEIF $2='%Y-%m-%d' THEN RETURN to_char($1,'YYYY-MM-DD'); ELSEIF $2='%Y-%m' THEN RETURN to_char($1,'YYYY-MM'); ELSEIF $2='%m' THEN RETURN to_char($1,'MM-DD'); ELSEIF $2='%d' THEN RETURN to_char($1,'DD'); ELSEIF $2='%Y-%m-%d %H:%i:%s' THEN RETURN to_char($1,'YYYY-MM-DD HH24:MI:SS'); ELSEIF $2='%Y-%m-%d %h:%i:%s' THEN RETURN to_char($1,'YYYY-MM-DD HH24:MI:SS'); END IF; RETURN to_char($1,'YYYY-MM-DD'); END; -- YEARWEEK() CREATE or REPLACE FUNCTION "DRMS_USER_423"."YEARWEEK"(anyelement) RETURNS TEXT AS BEGIN RETURN 'SELECT EXTRACT(year FROM TIMESTAMP $1)||EXTRACT(week FROM TIMESTAMP $1)'; END; -- 自定义实现SYSDATE() CREATE or REPLACE FUNCTION "DRMS_USER_423"."SYSDATE"() RETURNS TEXT AS BEGIN RETURN to_char(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS'); END; -- 自定义实现GROUP_CONCAT(列名) CREATE or REPLACE FUNCTION "DRMS_USER_423"."GROUP_CONCAT"(anyelement) RETURNS TEXT AS BEGIN RETURN wm_concat($1); END; -- 自定义实现year(时间) CREATE or REPLACE FUNCTION "DRMS_USER_423"."year"(anyelement) RETURNS TEXT AS BEGIN RETURN to_char($1,'YYYY'); END; -- 自定义实现subtring_index(原字符串、分隔字符、保留几个串) CREATE or REPLACE FUNCTION "DRMS_USER_423"."substring_index"(text,text,INTEGER) RETURNS TEXT AS BEGIN IF instrb($1, $2, 1,$3)>0 THEN RETURN left($1,(instrb($1, $2, 1,3)-1)); END IF; RETURN ''; END;
java Web项目代码更改
1、sql中包含`符号需要替换掉 2、group by按照标准sql书写 3、convert(group_ver,SIGNED)函数需要改成cast(group_ver as DECIMAL) kingbase里面没有signed、unsigned类型 所以针对这个类型的转换统一转成cast(group_ver as DECIMAL) 这个函数几个数据库都适用 4、需要注意的一点在mysql中排序的时候null默认是最小的,在kingbase里面null默认是排序最大值 6、其他待发现的问题处理,处理完事归集到文档中来。。。 7、在转换cast的时候出现很多cast(*** as signed 或者是unsigned int 的形式,这种统一成DECIMAL 三个库都支持,kingbase 没有signed或者unsigned类型) 8、select * from t_b_cul_depot where deltag<>'1' and is_use='1' and superid='' and depot_type = '0' order by sort asc superid='' 这种写法有问题 没有判断null的情况这种情况在代码里面有不少 9、left join 问题 mysql 支持LEFT JOIN (TABLE1,TABLE2,TABLE3) ON TABLE1.ID= TABLE2.ID … kingbase不支持需要单独处理成类似如下这种形式 ddSql.append(" LEFT JOIN "); ddSql.append(" t_b_cul_core_bdata" + isVer + " ON "); if("_ver".equals(isVer)) { ddSql.append(" "+detailTableName+".CID = t_b_cul_core_bdata_ver.CID "); ddSql.append(" and "+detailTableName+".DATA_VER = t_b_cul_core_bdata_ver.DATA_VER "); ddSql.append(" LEFT JOIN t_b_cul_core_mdata_ver ON t_b_cul_core_bdata_ver.id = t_b_cul_core_mdata_ver.id "); ddSql.append(" LEFT JOIN t_b_cul_core_odata_ver ON t_b_cul_core_mdata_ver.id = t_b_cul_core_odata_ver.id "); }else { ddSql.append(" "+detailTableName+".CID = t_b_cul_core_bdata.ID "); ddSql.append(" LEFT JOIN t_b_cul_core_mdata ON t_b_cul_core_bdata.id = t_b_cul_core_mdata.id "); ddSql.append(" LEFT JOIN t_b_cul_core_odata ON t_b_cul_core_mdata.id = t_b_cul_core_odata.id "); } 10、sql查询过程中自定义的别名不要出现数据库关键字。例:select js.字段名 as year ,多见于统计年份 11、kingbase数据库char存储是按照定长存储,不够的自动填充空字符,sql查询出来之后会带上缺少的空字符,比对的时候会出问题,变长字符串没有这个问题 12、kingbase 分组查询不能将上级查询结果放到子查询中作为条件
kingbase迁移mysql修改
1、 修改配置文件spring-mvc-hibernate.xml 有两个地方,jdbc和hibernate 删除一项 <property name = "driverClassName" value = "${jdbc.driverClassName}" /> 修改一项 <prop key="hibernate.dialect">org.hibernate.dialect.Kingbase8Dialect</prop>这个改成mysql对应的 org.hibernate.dialect.MySQLDialect 2、 然后就是pom文件修改版本 hibernate-commons-annotations 版本 改成4.0.1.Final hibernate-core 版本 4.1.1.Final 去掉hibernate-dialect hibernate-jpa-2.1-api 名称 改为 hibernate-jpa-2.0-api 版本改为 1.0.1.Final (这个有多个地方)
解决金仓数据库的查询不出来筛选条件为空字符串的记录的问题
从mysql数据库中迁移到kingbase后,<>'0' 的条件不能查询到为null的数据,需要将ora_input_emptystr_isnull 设置为 off
在客户端连接工具执行如下语句,发现结果是on,即配置了服务识别空字符串自动为空的设置
show ora_input_emptystr_isnull
修改安装路径下的/data/kingbase.conf,添加如下配置
ora_input_emptystr_isnull = on
保存,重启数据库服务即可
//重启数据库指令 //在安装目录/Server/bin/下执行 sys_ctl restart - D /你的data路径
查看数据库兼容语法
show database_mode;
本文由 admin 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2024-04-08 15:23:51