上一期我们详细讲述了如何通过 KaiwuDB 开发者中心和 JDBC 两种方式连接 KWDB 数据库。今天,我们也将分享两种方式来实现 KWDB 对时序和关系数据的高效管理:
✅ 使用 KaiwuDB 开发者中心管理 KWDB
✅ 使用 KaiwuDB JDBC 连接 KWDB
使用 KaiwuDB 开发者中心管理 KWDB
KaiwuDB Developer Center(KaiwuDB 开发者中心)是专门为 KWDB 数据库系统量身定制的可视化管理工具,我们改变了传统命令行操作方式,为大家提供了可视化的数据库操作平台,即使你是数据库“小白”,也能轻松驾驭我们
今天将为大家详细介绍如何使用 KaiwuDB 开发者中心可视化工具连接 KWDB 数据库、创建 KWDB 数据库、管理数据库对象等操作。
KaiwuDB 开发者中心窗口包含菜单栏、工具栏、导航栏、对象窗口、结果窗口以及状态栏。
一、时序数据
创建时序数据库步骤:
1、在数据库导航栏,右键单击时序数据库,然后选择【新建时序数据库】。
2、在创建时序数据库窗口,填写数据库名称,设置数据库生命周期,然后单击确定。默认情况下,数据库的生命周期为 0 天,即永不过期。
3、创建成功后,新建数据库将自动显示在数据库导航区内,继承 KWDB 数据库系统的角色和用户设置。
创建时序数据表步骤:
1、在数据库导航栏,选择要操作的数据库和模式。
2、右键单击时序表,然后选择【新建时序表】。系统将自动创建名为 newtable 的表,并打开对象窗口。
3、在属性页签,填写表名,配置表的生命周期。表名的最大长度为 128 字节。默认情况下,表的生命周期为 0 天, 即永不过期。
4、在字段页签,至少添加两个字段。字段名的最大长度为 128 字节。第一个字段的数据类型必须为 timestamp 或 timestamptz 且非空。实际上,系统会将 timestamp 数据类型处理为 timestamptz 数据类型。
5、在标签页签添加标签,设置标签名称、数据类型、长度、是否为主标签以及是否非空,然后单击保存。
✔️Tips:每张时序表至少需要设置一个主标签,且主标签必须为非空标签。标签名的最大长度为 128 字节。
6、在执行修改窗口,确认 SQL 语句无误,然后单击执行。
写入数据步骤:
1、在数据库导航栏,右键单击需要编辑数据的表,然后选择编辑数据。
2、在数据页面,单击页面下方的添加新行按钮,向表中加入相应的数据。
3、如需查看对应的 SQL 语句,单击生成 SQL 语句,然后单击执行。
4、如果无需查看 SQL 语句,单击保存。
✔️Tips:
-
系统支持为指定的列写入数据,对于未指定的列,如果该列支持 NULL 值,系统将自动插入默认值 NULL。如果该列不支持 NULL 值,系统将提示 Null value in column %s violates null-null constraints.。
-
输入 TIMESTAMP 或 TIMESTAMPTZ 类型数据时,日期部分需要使用短横线(-)、空格( )或正斜杠符号(/)分割,时间部分需要使用冒号(:)分割,支持精确到微秒,例如:'2023-01-25 10:10:10.123'、'2023 01 25 10:10:10.123' 或 '2023/01/25 10:10:10.123'。
-
KWDB 支持对具有相同时间戳的数据进行去重处理。默认情况下,后写入的数据会覆盖已存在的具有相同时间戳的数据。用户可通过 SET CLUSTER SETTING ts.dedup.rule=[ merge | override | discard] 语句设置数据去重策略。有关详细信息,参见集群参数配置。
查询数据步骤:
在数据库导航栏,双击需要查看的时序表,即可查看表的属性和数据信息。
二、关系数据
创建关系数据库步骤:
1、在数据库导航栏,右键单击关系数据库,然后选择【新建关系数据库】。
2、在创建数据库窗口,填写数据库名称,然后单击确定。
3、创建成功后,新建数据库将自动显示在数据库导航栏内,继承 KWDB 数据库系统的角色和用户设置。
创建关系表步骤:
1、在数据库导航栏,选择要操作的数据库和模式。
2、右键单击表,然后选择新建表。系统将自动创建名为 newtable 的表,并打开对象窗口。
3、在对象窗口,填写表名、描述信息、添加字段,然后单击保存。
4、在执行修改窗口,确认 SQL 语句无误,然后单击执行。
写入数据步骤:
1、在数据库导航栏,右键单击需要修改的表,然后选择编辑表。
2、在属性页签,编辑字段、约束、外键、索引或权限,然后单击保存。
3、切换到数据页签,单击表格最下方的添加新行按钮,向表中加入相应的数据。
4、如需查看相应的 SQL 语句,单击生成 SQL 语句,然后单击执行。
5、如果无需查看 SQL 语句,单击保存。
查询数据步骤:
在数据库导航栏,双击要查看的表,即可查看表的属性、数据和 ER 图信息。下表列出了属性、数据和 ER 图中的信息:
页面 | 信息 |
---|---|
属性 | 表名、描述、字段、约束、外键、索引、权限和建表语句等信息。 |
数据 | 以网格和文本形式查看表内数据。 |
ER 图 | 以图形方式展示数据库实体、属性和关系之间的结构和链接。 |
使用 KaiwuDB JDBC 连接 KWDB
KaiwuDB JDBC 是 KWDB 的官方 Java 语言连接器。它基于 PgJDBC 扩展实现,符合 JDBC 4.0、JDBC 4.1 和 JDBC 4.2 规范。本章分享如何使用用 KaiwuDB JDBC 连接 KWDB 数据库,并创建数据库、管理数据库对象等。
一、时序数据
管理时序数据库步骤:
// 获取数据库连接。
Connection conn = DriverManager.getConnection("jdbc:kaiwudb://127.0.0.1:26257/defaultdb?user=root&password=123");
// 创建 statement。
Statement stmt = conn.createStatement();
// 创建 ts_db 时序数据库。
stmt.executeUpdate("create ts database ts_db");
// 使用 ts_db 时序数据库。
stmt.executeUpdate("use ts_db");
// 删除 ts_db 时序数据库。
stmt.executeUpdate("drop database ts_db");
✔️Tip:如未使用 use <db_name> 参数指定数据库,后续对表的操作都需要使用数据库名称作为前缀,例如 ts_db.record。目前,时序数据库名称不支持中文字符。
管理时序表步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 创建 record 时序表。
stmt.executeUpdate("CREATE TABLE record (RecordedTime timestamptz NOT NULL, Longitude float, Latitude float, EngineRPM int) TAGs (LicensePlate varchar(10) NOT NULL, VehicleColor varchar(10)) PRIMARY TAGS (LicensePlate)");
// 删除 record 时序表。
stmt.executeUpdate("drop table record");
✔️Tip:在创建时序表时,第一列的数据类型必须为 timestamp 或 timestamptz,且不可为空值;每张时序表设置至少一个主标签,且主标签必须为非空标签。目前,时序表名、列名和标签名不支持中文字符。
写入数据步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 按照指定的列顺序向 record 表中写入数据。
int rows1 = stmt.executeUpdate("insert into record (RecordedTime, Longitude, Latitude, EngineRPM, LicensePlate, VehicleColor) values ('2024-06-06 10:00:00', 40.2, 116.2, 3000, '京A11111', '黑')");
System.out.println("specify column name insert " + rows1 + " rows data.");
// 按照默认的列顺序向 record 表中写入数据。
int rows2 = stmt.executeUpdate("insert into record values ('2024-06-06 10:00:01', 39.3, 116.1, 0, '京A22222', '白')");
System.out.println("not specify column name insert " + rows2 + " rows data.");
查询数据步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 查询 record 表数据。
ResultSet resultSet = stmt.executeQuery("select RecordedTime as ts, LicensePlate, VehicleColor from record");
Timestamp ts = null;
String LicensePlate = null;
String VehicleColor = null;
while(resultSet.next()){
ts = resultSet.getTimestamp(1);
LicensePlate = resultSet.getString("LicensePlate");
VehicleColor = resultSet.getString("VehicleColor");
System.out.printf("%s, %s, %s\n", ts, LicensePlate, VehicleColor);
}
✔️Tip:KWDB 支持使用下标或字段名获取数据。使用下标获取数据时,返回内容从 1 开始。建议使用字段名称获取数据。
二、关系数据
管理关系数据库步骤:
// 获取数据库连接。
Connection conn = DriverManager.getConnection("jdbc:kaiwudb://127.0.0.1:26257/defaultdb?user=root&password=123");
// 创建 statement。
Statement stmt = conn.createStatement();
// 创建 rdb 关系数据库。
stmt.executeUpdate("create database rdb");
// 使用 rdb 数据库。
stmt.executeUpdate("use rdb");
// 删除 rdb 数据库。
stmt.executeUpdate("drop database rdb");
✔️ Tip:如未使用 use <db_name> 参数指定数据库,后续对表的操作都需要使用数据库名称作为前缀,例如 rdb.vehicles。
管理关系表步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 创建 vehicles 关系表。
stmt.executeUpdate("CREATE TABLE vehicles (VehicleID int4, LicensePlate varchar(10), Owner varchar(10), Model varchar(50), Year int4)");
// 删除 vehicles 关系表。
stmt.executeUpdate("drop table vehicles");
写入数据步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 按照指定的列顺序向 vehicles 表中写入数据。
int rows1 = stmt.executeUpdate("INSERT INTO vehicles (VehicleID, LicensePlate, Owner, Model, Year) VALUES (1, '京A11111', '李明', '奔驰', 2020)");
System.out.println("specify column name insert " + rows1 + " rows data.");
// 按照默认的列顺序向 vehicles 表中写入数据。
int rows2 = stmt.executeUpdate("INSERT INTO vehicles VALUES (2, '京A22222', '赵志', '别克', 2022)");
System.out.println("not specify column name insert " + rows2 + " rows data.");
查询数据步骤:
// 创建 statement。
Statement stmt = conn.createStatement();
// 查询 vehicles 表数据
ResultSet resultSet = stmt.executeQuery("select LicensePlate, Owner, Model from vehicles");
String LicensePlate = null;
String Owner = null;
String Model = null;
while(resultSet.next()){
LicensePlate = resultSet.getString("LicensePlate");
Owner = resultSet.getString("Owner");
Model = resultSet.getString("Model");
System.out.printf("%s, %s, %s\n", LicensePlate, Owner, Model);
}
✔️ Tip:KWDB 支持使用下标或字段名获取数据。使用下标获取数据时,返回内容从 1 开始。建议使用字段名称获取数据。