From 79be15f5aebd576495dad5f1b979cc1429f3979d Mon Sep 17 00:00:00 2001 From: huolibo Date: Tue, 9 Nov 2021 17:53:40 +0800 Subject: [PATCH] add schemaless use doc (#8563) --- .../taosdata/jdbc/SchemalessStatement.java | 35 ++++++++++++++++--- .../jdbc/enums/SchemalessProtocolType.java | 8 +++++ .../jdbc/enums/SchemalessTimestampType.java | 2 +- .../taosdata/jdbc/SchemalessInsertTest.java | 24 +++++++++++-- 4 files changed, 61 insertions(+), 8 deletions(-) diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/SchemalessStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/SchemalessStatement.java index f90fa43fa2..748891d943 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/SchemalessStatement.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/SchemalessStatement.java @@ -8,16 +8,35 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +/** + * @author huolibo@qq.com + * @version v1.0.0 + * @JDK: 1.8 + * @description: this class is an extension of {@link Statement}. use like: + * Statement statement = conn.createStatement(); + * SchemalessStatement schemalessStatement = new SchemalessStatement(statement); + * schemalessStatement.execute(sql); + * schemalessStatement.executeSchemaless(lines, SchemalessProtocolType, SchemalessTimestampType); + * @since 2021-11-03 17:10 + */ public class SchemalessStatement extends AbstractStatementWrapper { public SchemalessStatement(Statement statement) { super(statement); } - public void executeSchemaless(String[] strings, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException { + /** + * batch insert schemaless lines + * + * @param lines schemaless data + * @param protocolType schemaless type {@link SchemalessProtocolType} + * @param timestampType Time precision {@link SchemalessTimestampType} + * @throws SQLException execute insert exception + */ + public void executeSchemaless(String[] lines, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException { Connection connection = this.getConnection(); if (connection instanceof TSDBConnection) { TSDBConnection tsdbConnection = (TSDBConnection) connection; - tsdbConnection.getConnector().insertLines(strings, protocolType, timestampType); + tsdbConnection.getConnector().insertLines(lines, protocolType, timestampType); } else if (connection instanceof RestfulConnection) { throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_UNSUPPORTED_METHOD, "restful connection is not supported currently"); } else { @@ -25,7 +44,15 @@ public class SchemalessStatement extends AbstractStatementWrapper { } } - public void executeSchemaless(String sql, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException { - executeSchemaless(new String[]{sql}, protocolType, timestampType); + /** + * only one insert + * + * @param line schemaless line + * @param protocolType schemaless type {@link SchemalessProtocolType} + * @param timestampType Time precision {@link SchemalessTimestampType} + * @throws SQLException execute insert exception + */ + public void executeSchemaless(String line, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException { + executeSchemaless(new String[]{line}, protocolType, timestampType); } } diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessProtocolType.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessProtocolType.java index d5bd1bde5e..2a0bea1570 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessProtocolType.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessProtocolType.java @@ -1,5 +1,7 @@ package com.taosdata.jdbc.enums; +import java.util.Arrays; + public enum SchemalessProtocolType { UNKNOWN, LINE, @@ -7,4 +9,10 @@ public enum SchemalessProtocolType { JSON, ; + public static SchemalessProtocolType parse(String type) { + return Arrays.stream(SchemalessProtocolType.values()) + .filter(protocol -> type.equalsIgnoreCase(protocol.name())) + .findFirst().orElse(UNKNOWN); + } + } diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessTimestampType.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessTimestampType.java index 159714262e..fa10a23634 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessTimestampType.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/enums/SchemalessTimestampType.java @@ -1,7 +1,7 @@ package com.taosdata.jdbc.enums; public enum SchemalessTimestampType { - + // Let the database decide NOT_CONFIGURED, HOURS, MINUTES, diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SchemalessInsertTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SchemalessInsertTest.java index c706704f67..fd4ac12ce4 100644 --- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SchemalessInsertTest.java +++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SchemalessInsertTest.java @@ -1,5 +1,7 @@ package com.taosdata.jdbc; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.taosdata.jdbc.enums.SchemalessProtocolType; import com.taosdata.jdbc.enums.SchemalessTimestampType; import org.junit.After; @@ -10,10 +12,14 @@ import org.junit.Test; import java.sql.*; public class SchemalessInsertTest { - private String host = "127.0.0.1"; - private String dbname = "test_schemaless_insert"; + private final String dbname = "test_schemaless_insert"; private Connection conn; + /** + * schemaless insert compatible with influxdb + * + * @throws SQLException execute error + */ @Test public void schemalessInsert() throws SQLException { // given @@ -41,6 +47,11 @@ public class SchemalessInsertTest { statement.close(); } + /** + * telnet insert compatible with opentsdb + * + * @throws SQLException execute error + */ @Test public void telnetInsert() throws SQLException { // given @@ -71,6 +82,11 @@ public class SchemalessInsertTest { statement.close(); } + /** + * json insert compatible with opentsdb json format + * + * @throws SQLException execute error + */ @Test public void jsonInsert() throws SQLException { // given @@ -113,13 +129,15 @@ public class SchemalessInsertTest { while (rs.next()) { rowCnt++; } -// Assert.assertEquals(json.length, rowCnt); + + Assert.assertEquals(((JSONArray) JSONObject.parse(json)).size(), rowCnt); rs.close(); statement.close(); } @Before public void before() { + String host = "127.0.0.1"; final String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata"; try { conn = DriverManager.getConnection(url); -- GitLab