Appearance
Java 接口使用介绍
java 接口使用,需要把 java SDK 包 lightning-java-api.jar 引入工程类路径。
创建连接
LDBConnect(String host, int port, int timeout, String user, String password,String db)
接口参数介绍
- host 数据库服务 IP
- port 数据库服务端口
- timeout 连接超时时长,单位是毫秒
- user 数据库用户名
- password 数据库密码
- db 数据库名
代码示例
java
public void testConnect() throws LDBException {
LDBConnect connect = new LDBConnect("192.168.2.50", 19504, 6000, "root", "root","db");
if (connect.isActive()) {
System.out.println("连接建立成功");
}
}
创建表
lightning db 表分为系统表、配置表、数据表,我们能创建的是配置表和数据表
- 配置表 是负责存放设备的静态信息
- 创表 sql 示例sql
CREATE TABLE zh_gy ( IsArray VtDouble not null default 0.0, Quality VtDouble not null default 0.0, TagValue VtDouble not null default 0.0, UaDataType VtDouble not null default 0.0, TagStringValue VtString not null default '', HostNameTag VtString not null default '' keyCol, e_date VtDateTime not null DEFAULT '2000-01-01 00:00:00' timeCol )metatable
- 创表 sql 示例
- 数据表 是负责存放设备的按时序采集产生的时序数据记录
- 创表 sql 示例sql
CREATE TABLE zh_gy ( IsArray VtDouble not null default 0.0, Quality VtDouble not null default 0.0, TagValue VtDouble not null default 0.0, UaDataType VtDouble not null default 0.0, TagStringValue VtString not null default '', HostNameTag VtString not null default '' keyCol, e_date VtDateTime not null DEFAULT '2000-01-01 00:00:00' timeCol )
- 创表 sql 示例
代码示例
java
public void createTable() throws LDBException, SQLException {
LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db");
ldbConnect.execSql(" CREATE TABLE zh_gy (\n" +
" IsArray VtDouble not null default 0.0,\n" +
" Quality VtDouble not null default 0.0,\n" +
" TagValue VtDouble not null default 0.0,\n" +
" UaDataType VtDouble not null default 0.0,\n" +
" TagStringValue VtString not null default '',\n" +
" HostNameTag VtString not null default '' keyCol,\n" +
" e_date VtDateTime not null DEFAULT '2000-01-01 00:00:00' timeCol\n" +
" )" ).close();
}
修改表结构
修改表结构,需要通过 sql 语句 alter table
- sql 示例sql
ALTER TABLE zh_gy ADD COLUMN TestColumn NOT NULL DEFAULT false
代码示例
java
public void alterTable() throws LDBException, SQLException {
LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db");
ldbConnect.execSql(" ALTER TABLE zh_gy ADD COLUMN TestColumn NOT NULL DEFAULT false" ).close();
}
删除表
删除表结构,需要使用 sql 语句 drop table
- sql 示例sql
drop table zh_gy
代码示例
java
public void dropTable() throws LDBException, SQLException {
LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db");
ldbConnect.execSql(" drop table zh_gy" ).close();
}
查询表数据
LDBConnect.execSql(String sql)
接口参数介绍
- sql 数据库 sql 语句
- 返回类型为 LDBResult
代码示例
java
public void testQuery(LDBConnect ldbConnect) throws LDBException, SQLException {
LDBResultSet resultSet = ldbConnect.execSql("select e_date from dd_tt " );
//解析结果集
ResultSetMetaData metaData = resultSet.getMetaData();
for (int i = 0; i < metaData.getColumnCount(); i++) {
System.out.printf("%s\t", metaData.getColumnName(i + 1));
}
System.out.println();
while (resultSet.next()) {
for (int i = 0; i < metaData.getColumnCount(); i++) {
System.out.printf(resultSet.getObject(i + 1) + "\t");
}
System.out.println();
}
resultSet.close();//关闭结果集
}
}
使用 memCache 碎片化写入数据
memCache 写入不走事务,适合写比较散乱碎片化高频数据
- memCache 行写入:按照行存储结构写入
代码示例
javapublic void testInsertTable() throws LDBException { LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db"); LDBTable table = new LDBTable("zh_test"); table.addColumn("IsArray", LDBConst.VtFloat64); table.addColumn("Quality", LDBConst.VtFloat64); table.addColumn("TagValue", LDBConst.VtFloat64); table.addColumn("UaDataType", LDBConst.VtFloat64); table.addColumn("TagStringValue", LDBConst.VtString); table.addColumn("HostNameTag", LDBConst.VtString); table.addColumn("e_date", LDBConst.VtDatetime); for (int i = 0; i < 100; i++) { table.bind(0, 100.0); table.bind(1, 100.0); table.bind(2, 100.0); table.bind(3, 100.0); table.bind(4, "ggggg"); table.bind(5, "hhhhh"); table.bind(6, Instant.now()); table.append(); } ldbConnect.insert(table); ldbConnect.close(); }
- memCache 列写入:按照列存储结构写入
代码示例
javapublic void testInsertSheet() throws LDBException { LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db"); LDBSheet sheet = new LDBSheet("zh_test"); sheet.addColumn("IsArray", LDBConst.VtFloat64); sheet.addColumn("Quality", LDBConst.VtFloat64); sheet.addColumn("TagValue", LDBConst.VtFloat64); sheet.addColumn("UaDataType", LDBConst.VtFloat64); sheet.addColumn("TagStringValue", LDBConst.VtString); sheet.addColumn("HostNameTag", LDBConst.VtString); sheet.addColumn("e_date", LDBConst.VtDatetime); ArrayList<Double> d0 = new ArrayList<>(), d1 = new ArrayList<>(), d2 = new ArrayList<>(), d3 = new ArrayList<>(); ArrayList<String> s4 = new ArrayList<>(), s5 = new ArrayList<>(); ArrayList<Instant> i6 = new ArrayList<>(); for (int i = 0; i < 100; i++) { d0.add(100.0); d1.add(100.0); d2.add(100.0); d3.add(100.0); s4.add("ggggg" + i); s5.add("hhhhh" + i); i6.add(Instant.now()); } sheet.bindDouble(0,d0); sheet.bindDouble(1,d1); sheet.bindDouble(2,d2); sheet.bindDouble(3,d3); sheet.bindString(4, s4); sheet.bindString(5, s5); sheet.bindTime(6, i6); ldbConnect.insert(sheet); ldbConnect.close(); }
使用事务 TX 写入数据
事务写入,可以保证数据写入不丢失,适合大批量数据写入
- 事务行写入:按照行存储结构写入
代码示例
javapublic void testInsertTableTx() throws LDBException { LDBConnect ldbConnect = new LDBConnect("192.168.2.50",19504,6000,"root","root","db"); LDBTransaction transaction = ldbConnect.createTransaction(LDBConst.INSERT); LDBTable table = new LDBTable("zh_test"); table.addColumn("IsArray", LDBConst.VtFloat64); table.addColumn("Quality", LDBConst.VtFloat64); table.addColumn("TagValue", LDBConst.VtFloat64); table.addColumn("UaDataType", LDBConst.VtFloat64); table.addColumn("TagStringValue", LDBConst.VtString); table.addColumn("HostNameTag", LDBConst.VtString); table.addColumn("e_date", LDBConst.VtDatetime); for (int i = 0; i < 100; i++) { table.bind(0, 100.0); table.bind(1, 100.0); table.bind(2, 100.0); table.bind(3, 100.0); table.bind(4, "ggggg"); table.bind(5, "hhhhh"); table.bind(6, Instant.now()); table.append(); } transaction.put(table); transaction.commit(); ldbConnect.close(); }
- 事务列写入:按照列存储结构写入
代码示例
javapublic void testInsertSheetTx() throws LDBException { LDBConnect ldbConnect = new LDBConnect("192.168.2.50", 19504, 6000, "root", "root","db"); LDBTransaction transaction = ldbConnect.createTransaction(LDBConst.INSERT); LDBSheet sheet = new LDBSheet("zh_test"); sheet.addColumn("IsArray", LDBConst.VtFloat64); sheet.addColumn("Quality", LDBConst.VtFloat64); sheet.addColumn("TagValue", LDBConst.VtFloat64); sheet.addColumn("TagStringValue", LDBConst.VtString); sheet.addColumn("UaDataType", LDBConst.VtFloat64); sheet.addColumn("HostNameTag", LDBConst.VtString); sheet.addColumn("e_date", LDBConst.VtDatetime); ArrayList<Double> d0 = new ArrayList<>(), d1 = new ArrayList<>(), d2 = new ArrayList<>(), d3 = new ArrayList<>(); ArrayList<String> s4 = new ArrayList<>(), s5 = new ArrayList<>(); ArrayList<Instant> i6 = new ArrayList<>(); for (int i = 0; i < 100; i++) { d0.add(100.0); d1.add(100.0); d2.add(100.0); d3.add(100.0); s4.add("ggggg" + i); s5.add("hhhhh" + i); i6.add(Instant.now()); } sheet.bindDouble(0, d0); sheet.bindDouble(1, d1); sheet.bindDouble(2, d2); sheet.bindString(3, s4); sheet.bindDouble(4, d3); sheet.bindString(5, s5); sheet.bindTime(6, i6); transaction.put(sheet); transaction.commit(); ldbConnect.close(); }
更新数据
更新表数据,需要使用 sql 的 update 语句
- sql 示例sql
update zh_gy set Quality =1 where HostNameTag ="geyang"
代码示例
java
public void updateTableDatas() throws LDBException {
LDBConnect ldbConnect = new LDBConnect("192.168.2.50", 19503, 6000, "root", "root","db");
LDBTransaction transaction = ldbConnect.createTransaction(LDBConst.UPDATE);
//把表 zh_gy 里所有 HostNameTag 为 geyang 的记录的 Quality 字段都改成 1
String updateSql = "update zh_gy set Quality =1 where HostNameTag =\"geyang\"";
transaction.execSql(updateSql);
transaction.commit();
ldbConnect.close();
}
删除数据
删除表数据,需要使用 sql 的 delete 语句
- sql 示例sql
delete from zh_gy where e_date < '2024-03-01'
代码示例
java
public void deleteTableDatas() throws LDBException {
LDBConnect ldbConnect = new LDBConnect("192.168.2.50", 19503, 6000, "root", "root","db");
LDBTransaction transaction = ldbConnect.createTransaction(LDBConst.DELETE);
//删除 zh_gy 表里 2024 年 3 月之前的数据
String deleteSql = "delete from zh_gy where e_date < '2024-03-01'";
transaction.execSql(deleteSql);
transaction.commit();
ldbConnect.close();
}