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 f90fa43fa26288943b5fa6c500ace6b92feb8429..748891d943536b3cb6ebd6adffd295573adee4d1 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 d5bd1bde5eb3d73ebd419652ca1fbbe3485d95c5..2a0bea15702a79b3440f95771cf56b879a814626 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 159714262e5386e00e74bb6154a20165a735c174..fa10a23634ec75182365d42ebfb79aff7b14b08f 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 c706704f67e75ce61f6f96def26c6895e8805a7a..fd4ac12ce40dc02f2b6ffbf91e33b0e0bd2398a9 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);