网站首页 > 技术文章 正文
一、驱动下载及配置
- 驱动从官网下载,并放到项目下的libs文件下
- 在项目的pom文件中,注释掉mysql的驱动,增加kingbase的驱动
<!-- Mysql驱动包 -->
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- </dependency>-->
<!-- kingbase驱动包 -->
<dependency>
<groupId>com.kingbase8.jdbc</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/libs/kingbase8-8.6.0.jar</systemPath>
</dependency>
二、修改application-dev.yml配置文件
- 注释掉mysql的相关配置
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# driverClassName: com.mysql.cj.jdbc.Driver
# druid:
# # 主库数据源
# master:
# url: jdbc:mysql://yourhost:3306/yourdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root
# password: yourpassword
# # 从库数据源
# slave:
# # 从数据源开关/默认关闭
# enabled: true
# url: jdbc:mysql://yourhost:3306/yourdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root
# password: yourpassword
- 替换成kingbase的相关配置
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.kingbase8.Driver
druid:
# 主库数据源
master:
url: jdbc:kingbase8://yourhost:54321/yourdb?currentSchema=disability_assistance,SYS_CATALOG
username: yhk
password: yourpassword
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url: jdbc:kingbase8://yourhost:54321/yourdb?currentSchema=disability_assistance,SYS_CATALOG
username: yhk
password: yourpassword
三、如果配置正确的话,就可以开始启动应用进行调试,有可能遇到以下问题:
问题:Cause: com.kingbase8.util.KSQLException: 错误: 此查询块中所需的 CONNECT BY 子句
### The error may exist in com/yhk/base/mapper/AreaAddressMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT id,level,parent_code,area_code,zip_code,city_code,name,short_name,detail_name,pinyin,longitude,latitude,irs_code FROM area_address
### Cause: com.kingbase8.util.KSQLException: 错误: 此查询块中所需的 CONNECT BY 子句
解决方案:原因是因为level是kingbase的关键字不能直接用
1.打开AreaAddress.java文件,修改如下:
@NotNull(message="[层级]不能为空")
@ApiModelProperty("层级")
@TableField("`level`")
private Integer level;
2.打开AreaAddressMapper.xml文件并把所有level,加上双引号"level",举例如下:
<!--查询单个-->
<select id="queryById" resultMap="AreaAddressMap">
select
id, "level", parent_code, area_code, zip_code, city_code, name, short_name, detail_name, pinyin, longitude, latitude, irs_code
from area_address
where id = #{id}
</select>
如果没有问题的话,就可以正常启动成功了。
四、测试应用,并修改遇到的bug,可能遇到以下问题:
- 问题1:函数 sysdate() 不存在
### Error updating database. Cause: com.kingbase8.util.KSQLException: 错误: 函数 sysdate() 不存在
Hint: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
Position: 140 At Line: 2, Line Position: 39
### The error may involve com.hhh.system.mapper.SysLogininforMapper.insertLogininfor-Inline
### The error occurred while setting parameters
### SQL: insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) values (?, ?, ?, ?, ?, ?, ?, sysdate())
### Cause: com.kingbase8.util.KSQLException: 错误: 函数 sysdate() 不存在
解决方案: 把所有函数 sysdate() 都替换为kingbase的函数sysdate,以SysLogininforMapper.xml为例
<insert id="insertLogininfor" parameterType="SysLogininfor">
insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
</insert>
替换后:
<insert id="insertLogininfor" parameterType="SysLogininfor">
insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time)
values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate)
</insert>
- 问题:字段 "UNSIGNED" 不存在
springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: com.kingbase8.util.KSQLException: 错误: 字段 "UNSIGNED" 不存在
Position: 118 At Line: 1, Line Position: 118
解决方案:
convert(t2.service_period,UNSIGNED) 改为 t2.service_period
- 问题:在查询列表中必须出现SELECT DISTINCT, ORDER BY表达式
### SQL: SELECT distinct `flow_no` FROM disability_flow_process WHERE deleted=0 AND (actor_role_id <> ? AND service_type = ? AND status = ?) ORDER BY status ASC,id DESC LIMIT ?
### Cause: com.kingbase8.util.KSQLException: 错误: 在查询列表中必须出现SELECT DISTINCT, ORDER BY表达式
Position: 153 At Line: 6, Line Position: 74
; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: 错误: 在查询列表中必须出现SELECT DISTINCT, ORDER BY表达式
原因:order 的字段需要全部加到DISTINCT中去。
解决方案:distinct `flow_no` 改为 "distinct `flow_no`,`status`,`id`"
- 问题:操作符不存在: bit = integer
Caused by: com.kingbase8.util.KSQLException: 错误: 操作符不存在: bit = integer
Hint: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
需要全部把以下
eq(DisabilityFamilyMember::getIsDeleted,0));
改为
eq(DisabilityFamilyMember::getIsDeleted,Boolean.FALSE));
- 问题:mem.is_deleted为bit类型,不能直接 = 0
### SQL: SELECT count(0) FROM (SELECT mem.family_group_id, dbi.id, dbi.name, dbi.mobile, dbi.disability_certificate_number, dbi.id_card_number, dbi.disability_type, dbi.disability_level, dbi.gender, dbi.birthday, dbi.age, dbi.present_community, dbi.present_street FROM disability_family_member mem LEFT JOIN disability_base_info dbi ON mem.disability_id = dbi.id WHERE mem.is_deleted = 0 GROUP BY mem.family_group_id) table_count
### Cause: com.kingbase8.util.KSQLException: 错误: 操作符不存在: bit = integer
Hint: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
Position: 376 At Line: 1, Line Position: 376
; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: 错误: 操作符不存在: bit = integer
Hint: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
解决方案:
mem.is_deleted = 0
改为
mem.is_deleted = '0'
问题:GROUP BY 少了字段 "dbi.id"
### SQL: SELECT count(0) FROM (SELECT mem.family_group_id, dbi.id, dbi.name, dbi.mobile, dbi.disability_certificate_number, dbi.id_card_number, dbi.disability_type, dbi.disability_level, dbi.gender, dbi.birthday, dbi.age, dbi.present_community, dbi.present_street FROM disability_family_member mem LEFT JOIN disability_base_info dbi ON mem.disability_id = dbi.id WHERE mem.is_deleted = '0' GROUP BY mem.family_group_id) table_count
### Cause: com.kingbase8.util.KSQLException: 错误: 字段 "dbi.id" 必须出现在 GROUP BY 子句中或者在聚合函数中使用
Position: 51 At Line: 1, Line Position: 51
; bad SQL grammar []; nested exception is com.kingbase8.util.KSQLException: 错误: 字段 "dbi.id" 必须出现在 GROUP BY 子句中或者在聚合函数中使用
解决方案:
GROUP BY mem.family_group_id 后面dbi.id
- 问题:需要对Kingbase的相应日期函数和语法进行调整
SQL: SELECT * FROM disability_activity_user WHERE DATE(activity_start_time) = DATE(NOW() - INTERVAL 1 DAY) AND status = 1;
### Cause: com.kingbase8.util.KSQLException: 错误: 语法错误 在 "(" 或附近的
解决方法:
SELECT *
FROM disability_activity_user
WHERE activity_start_time::date = CURRENT_DATE - 1
AND status = 1;
- 问题:重复键违反唯一约束
sed by: com.kingbase8.util.KSQLException: 错误: 重复键违反唯一约束"PRIMARY_C154670D"
Detail: 键值"(id)=(389)" 已经存在
解决方法:在kstudio管理工具中,把键值调大1个数字
猜你喜欢
- 2024-10-20 常用SQL系列之(八):列值累计、占比、平均值以及日期运算等
- 2024-10-20 选读SQL经典实例笔记02_多表查询(sql语句多表查询案例)
- 2024-10-20 不知道怎么分析MySQL查询瓶颈,这款自带工具太香了,强烈推荐
- 2024-10-20 怎么找出连续5天登录的用户,大数据面试题sql
- 2024-10-20 Pandas与SQL的数据操作语句对照(pandas和sql哪个速度快)
- 2024-10-20 「Excel」筛选不重复的数据—Part1
- 2024-10-20 Excel零基础学SQL22:中式排名,美式排名,分组排名
- 2024-10-20 MySql基础使用「增删改查」20211221
- 2024-10-20 Pandas&SQL语法归纳总结,真的太全了
- 2024-10-20 Excel多条件不重复计数,4种方法,总有一种适合你
- 04-29kali2021ping 外网不通
- 04-29我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- 04-29注册下载啊
- 04-29Spring 中三种 BeanName 生成器!
- 04-29mysql学习9:创建数据库
- 04-29Linux之yum源详解
- 04-29夏日终曲/请以你的名字呼唤我/Call me by your name(无剧透)
- 04-29注释竟然还有特殊用途?一文解惑 //go:linkname 指令
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- sqlset (59)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)