大金仓数据库:kingbase学习

2023-11-29 04:20

本文主要是介绍大金仓数据库:kingbase学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

kingbase学习

  • 1.简介
  • 2. 安装
  • 3. 基础使用
    • 3.1 客户端连接
    • 3.2 表数据测试
      • 3.2.1 建表
        • 创建字段备注
      • 3.2.2 数据写入测试
      • 3.2.2 json测试
        • 3.2.2.1 json查询测试
        • 3.2.2.2 json修改测试
        • 3.2.2.3 json数据迁移测试
  • 4.springboot实战
    • 4.1 maven依赖
    • 4.2 连接配置
    • 4.3 mybatis-plus测试
    • 4.4 liquibase整合
      • (1). 使用pg方式替换kingbase驱动上面
      • (2). 修改jdbc url配置
  • 参考文档

1.简介

官网: https://www.kingbase.com.cn/

2. 安装

TODO 补充 docker安装

3. 基础使用

3.1 客户端连接

使用idea自带database查询

3.2 表数据测试

3.2.1 建表

创建从10000开启自增id的用户表,username增加唯一索引

CREATE TABLE account(id          BIGINT      NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 10000),username    VARCHAR(32) NOT NULL,password    VARCHAR(32)  DEFAULT NULL,name        VARCHAR(20)  DEFAULT NULL,sex         CHAR(1)      DEFAULT NULL,phone       VARCHAR(100) DEFAULT NULL,email       VARCHAR(100) DEFAULT NULL,create_time TIMESTAMP    DEFAULT NULL,update_time TIMESTAMP    DEFAULT NULL,extend_json JSON         DEFAULT NULL,PRIMARY KEY (id),UNIQUE (username)
);
创建字段备注

TODO

3.2.2 数据写入测试

-- 插入第一行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user1', 'pass1', 'John Doe', 'M', '123456789', 'user1@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value1"}');-- 插入第二行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user2', 'pass2', 'Jane Doe', 'F', '987654321', 'user2@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value2"}');-- 插入第三行数据
INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES ('user3', 'pass3', 'Bob Smith', 'M', '555555555', 'user3@example.com', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '{"key": "value3"}');INSERT INTO account (username, password, name, sex, phone, email, create_time, update_time, extend_json)
VALUES
('user4', 'pass1', 'John Doe', 'M', '123456789', 'user1@example.com', '2022-01-01 10:00:00', '2022-01-01 10:00:00', '{"key": "value1"}'),
('user5', 'pass2', 'Jane Doe', 'F', '987654321', 'user2@example.com', '2022-01-01 11:00:00', '2022-01-01 11:00:00', '{"key": "value2"}'),
('user6', 'pass3', 'Bob Smith', 'M', '555555555', 'user3@example.com', '2022-01-01 12:00:00', '2022-01-01 12:00:00', '{"key": "value3"}');

3.2.2 json测试

3.2.2.1 json查询测试

json指定key查询

SELECT * FROM account WHERE extend_json ->> 'address' LIKE '%吕街28号%';SELECT * FROM account WHERE extend_json ->> 'address' = 'Suite 231 吕街28号, 包头, 藏 351579';

查询性能对比(100万数据)

在这里插入图片描述

  • like查询性能结果
数据库名json like SQL 查询内容耗时 (毫秒)
kingbaseSELECT * FROM account_b WHERE extend_json ->> ‘address’ LIKE ‘%吕街28号%’598
oracleSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) LIKE ‘%吕街28号%’1412
mysqlSELECT * FROM account WHERE extend_json -> ‘$.address’ LIKE ‘%吕街28号%’1947
openGaussSELECT * FROM account_b WHERE extend_json ->> ‘address’ LIKE ‘%吕街28号%’1952
dmSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) LIKE ‘%吕街28号%’4196
  • 精确查询性能结果
数据库名json equals SQL 查询内容耗时 (毫秒)
kingbaseSELECT * FROM account_b WHERE extend_json ->> ‘address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’554
oracleSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) = ‘Suite 231 吕街28号, 包头, 藏 351579’1198
mysqlSELECT * FROM account WHERE extend_json -> ‘$.address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’1326
openGaussSELECT * FROM account_b WHERE extend_json ->> ‘address’ = ‘Suite 231 吕街28号, 包头, 藏 351579’1584
dmSELECT * FROM ACCOUNT a WHERE JSON_VALUE(extend_json, ‘$.address’) = ‘Suite 231 吕街28号, 包头, 藏 351579’3992
3.2.2.2 json修改测试

测试json内部数据操作便利性: 如删除指定key,增加写入指定key, 从其他数据列提取指定数据

-- json字段中的删除指定key
update account_b set extend_json = extend_json::jsonb - 'newKey' where id = 10000;
-- json字段中增加指定key并设置值--设置字符串
update account_b set extend_json = jsonb_set(extend_json, '{address}', '"hello"'::jsonb) where id = 10000;
-- json字段中增加指定key并设置值--设置设置数字
update account_b set extend_json = jsonb_set(extend_json, '{newInt}', '1000'::jsonb) where id = 10000;
-- json字段中增加指定key并且value值从其他列提取
update account_b set extend_json = jsonb_set(extend_json, '{email}', to_jsonb(email)) where id = 10000;
3.2.2.3 json数据迁移测试
-- 模拟增加一个列
ALTER TABLE account_b ADD address VARCHAR(500);
-- 新增列提取json字段中指定key的value
update account_b set account_b.address = extend_json ->> 'address';
-- 新增列提取json字段中指定key的value, 并且移除被提取的key
update account_b set address = extend_json ->> 'address', extend_json = extend_json::jsonb - 'address'
  • 提取效果
    在这里插入图片描述
  • 提取并清理效果
    在这里插入图片描述

4.springboot实战

使用依赖版本:

<spring-boot.version>2.3.2.RELEASE</spring-boot.version>

4.1 maven依赖

        <!--人大金仓数据库驱动--><dependency><groupId>cn.com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version></dependency>

4.2 连接配置

application.yml补充kingbase连接

spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:kingbase8://192.168.8.33:54321/testdbusername: systempassword: kingbase

4.3 mybatis-plus测试

TODO

4.4 liquibase整合

liquibase基本不支持国产数据库,但是kingbase借助切换pg的驱动可以间接实现
在这里插入图片描述

(1). 使用pg方式替换kingbase驱动上面

        <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency>

(2). 修改jdbc url配置

spring:datasource:#driver-class-name: dm.jdbc.driver.DmDriver#url: jdbc:kingbase8://192.168.8.33:54321/testdbdriver-class-name: org.postgresql.Driverurl: jdbc:postgresql://192.168.8.33:54321/testdbusername: systempassword: kingbase

参考文档

  1. 官网文档:4. Liquibase注意点

这篇关于大金仓数据库:kingbase学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/431418

相关文章

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN