使用 KaiwuDB JDBC 管理 KWDB
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 的官方 Java 语言连接器。它基于 PgJDBC 扩展实现,符合 JDBC 4.0、JDBC 4.1 和 JDBC 4.2 规范。如何安装可参考《一文讲透》第2期:两种 KWDB 的快速上手连接方式,本章分享如何使用用 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");
// 创建 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);}
以上就是本期的管理 KWDB 教程,更多内容可参考往期,一起玩转 KWDB 吧!