metas = TDengine.FetchFields(res);
+ for (int j = 0; j < metas.Count; j++)
+ {
+ TDengineMeta meta = (TDengineMeta)metas[j];
+ DebugPrint("index:" + j + ", type:" + meta.type + ", typename:" + meta.TypeName() + ", name:" + meta.name + ", size:" + meta.size + "\n");
+ }
+
+ IntPtr rowdata;
+ StringBuilder builder = new StringBuilder();
+
+ while ((rowdata = TDengine.FetchRows(res)) != IntPtr.Zero)
+ {
+ queryRows++;
+ for (int fields = 0; fields < fieldCount; ++fields)
+ {
+ TDengineMeta meta = metas[fields];
+ int offset = IntPtr.Size * fields;
+ IntPtr data = Marshal.ReadIntPtr(rowdata, offset);
+
+ builder.Append("---");
+
+ if (data == IntPtr.Zero)
+ {
+ builder.Append("NULL");
+ continue;
+ }
+
+ switch ((TDengineDataType)meta.type)
+ {
+ case TDengineDataType.TSDB_DATA_TYPE_BOOL:
+ bool v1 = Marshal.ReadByte(data) == 0 ? false : true;
+ builder.Append(v1);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_TINYINT:
+ byte v2 = Marshal.ReadByte(data);
+ builder.Append(v2);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_SMALLINT:
+ short v3 = Marshal.ReadInt16(data);
+ builder.Append(v3);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_INT:
+ int v4 = Marshal.ReadInt32(data);
+ builder.Append(v4);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_BIGINT:
+ long v5 = Marshal.ReadInt64(data);
+ builder.Append(v5);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_FLOAT:
+ float v6 = (float)Marshal.PtrToStructure(data, typeof(float));
+ builder.Append(v6);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_DOUBLE:
+ double v7 = (double)Marshal.PtrToStructure(data, typeof(double));
+ builder.Append(v7);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_BINARY:
+ string v8 = Marshal.PtrToStringAnsi(data);
+ builder.Append(v8);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_TIMESTAMP:
+ long v9 = Marshal.ReadInt64(data);
+ builder.Append(v9);
+ break;
+ case TDengineDataType.TSDB_DATA_TYPE_NCHAR:
+ string v10 = Marshal.PtrToStringAnsi(data);
+ builder.Append(v10);
+ break;
+ }
+ }
+ builder.Append("---");
+
+ VerbosePrint(builder.ToString() + "\n");
+ builder.Clear();
+ }
+
+ if (TDengine.ErrorNo(res) != 0)
+ {
+ Console.Write("Query is not complete, Error {0:G}",
+ TDengine.ErrorNo(res), TDengine.Error(res));
+ }
+
+ TDengine.FreeResult(res);
+ }
+ }
+
+ public void CloseConnection()
+ {
+ if (this.conn != IntPtr.Zero)
+ {
+ TDengine.Close(this.conn);
+ }
+ }
+
+ // Main entry
+ static void Main(string[] args)
+ {
+ PrintHelp(args);
+
+ TDengineTest tester = new TDengineTest();
+ tester.ReadArgument(args);
+
+ tester.InitTDengine();
+ tester.ConnectTDengine();
+
+ if (tester.isInsertOnly == false)
+ {
+ tester.dropDatabase();
+ tester.CreateDb();
+
+
+ if (tester.useStable == true)
+ {
+ tester.CreateStable();
+ }
+
+ tester.CreateTablesByThreads();
+ }
+
+ Stopwatch watch = Stopwatch.StartNew();
+ tester.InsertByThreads();
+ watch.Stop();
+ double elapsedMs = watch.Elapsed.TotalMilliseconds;
+
+ Console.WriteLine("C# taosdemo: Spent {0} seconds to insert {1} records with {2} record(s) per request: {3} records/second",
+ elapsedMs / 1000,
+ tester.recordsPerTable * tester.numOfTables,
+ tester.batchRows,
+ (tester.recordsPerTable * tester.numOfTables * 1000) / elapsedMs);
+
+ tester.DebugPrintFormat("query command:{0}\n", tester.query);
+ if (tester.query != "NONE")
+ {
+ watch = Stopwatch.StartNew();
+ tester.ExecuteQuery();
+ watch.Stop();
+ elapsedMs = watch.Elapsed.TotalMilliseconds;
+ Console.WriteLine("C# taosdemo: Spent {0} seconds to query {1} records.\n",
+ elapsedMs/1000,
+ tester.recordsPerTable * tester.numOfTables
+ );
+ }
+ tester.CloseConnection();
+
+ Console.WriteLine("End.");
+ }
+
+ public class InsertDataThread
+ {
+ public long id { set; get; }
+ public long start { set; get; }
+ public long end { set; get; }
+ public string dbName { set; get; }
+ public IntPtr conn { set; get; }
+ public string tablePrefix { set; get; }
+ public string stablePrefix { set; get; }
+ public long recordsPerTable { set; get; }
+ public long batchRows { set; get; }
+ public long numOfTables { set; get; }
+ public bool verbose { set; get; }
+ public bool debug { set; get; }
+ public bool order { set; get; }
+ public short rateOfOutorder { set; get; }
+
+ private void VerbosePrintFormat(string format, params object[] parameters)
+ {
+ if (verbose == true)
+ {
+ Console.Write(format, parameters);
+ }
+ }
+
+ private void VerbosePrint(string str)
+ {
+ if (verbose == true)
+ {
+ Console.Write(str);
+ }
+ }
+
+ private void DebugPrintFormat(string format, params object[] parameters)
+ {
+ if (debug == true)
+ {
+ Console.Write(format, parameters);
+ }
+ }
+
+ private void DebugPrint(string str)
+ {
+ if (debug == true)
+ {
+ Console.Write(str);
+ }
+ }
+
+ public void ThreadMain()
+ {
+ VerbosePrintFormat("InsertDataThread {0} from {1} to {2}\n", id, start, end);
+ StringBuilder sql = new StringBuilder();
+
+ DateTime now = DateTime.Now;
+ int h = now.Hour;
+ int m = now.Minute;
+ int s = now.Second;
+
+ long baseTimestamp = 1609430400000; // 2021/01/01 0:0:0
+ VerbosePrintFormat("beginTime is {0} + {1}h:{2}m:{3}s\n", baseTimestamp, h, m, s);
+ long beginTimestamp = baseTimestamp + ((h*60 + m) * 60 + s) * 1000;
+ Random random = new Random();
+
+ long rowsInserted = 0;
+
+ long i = 0;
+ while (i < recordsPerTable)
+ {
+ for (long table = start; table <= end; ++table)
+ {
+ long inserted = i;
+
+ sql.Clear();
+ sql.Append("INSERT INTO ").
+ Append(this.dbName).Append(".").Append(this.tablePrefix).Append(table).
+ Append(" VALUES");
+ if (recordsPerTable < batchRows)
+ {
+ batchRows = recordsPerTable;
+ }
+ for (int batch = 0; batch < batchRows; ++batch)
+ {
+ long writeTimeStamp = beginTimestamp + i + batch;
+ int rnd = 100;
+ if (this.order == false)
+ {
+ rnd = random.Next(1, 100);
+ if (rnd <= this.rateOfOutorder)
+ {
+ writeTimeStamp = writeTimeStamp + rnd * 10000;
+ DebugPrint("### ");
+ }
+ DebugPrintFormat("order:{0} rnd:{1} timestamp:{2}\n", this.order, rnd, writeTimeStamp);
+ }
+ else
+ {
+ DebugPrintFormat("order:{0} timestamp:{1}\n", this.order, writeTimeStamp);
+ }
+
+ sql.Append("(")
+ .Append(writeTimeStamp)
+ .Append(", 1, 2, 3,")
+ .Append(i + batch)
+ .Append(", 5, 6, 7, 'abc', 'def')");
+
+ }
+ IntPtr res = TDengine.Query(this.conn, sql.ToString());
+ if (res == IntPtr.Zero)
+ {
+ VerbosePrint(sql.ToString() + " failure, reason: " + TDengine.Error(res) + "\n");
+ }
+
+ inserted += this.batchRows;
+
+ int affectRows = TDengine.AffectRows(res);
+ rowsInserted += affectRows;
+
+ TDengine.FreeResult(res);
+ if (table == end)
+ {
+ i = inserted;
+ }
+ }
+ }
+
+ }
+ }
+
+ public class CreateTableThread
+ {
+ public long id { set; get; }
+ public long start { set; get; }
+ public long end { set; get; }
+ public string dbName { set; get; }
+ public IntPtr conn { set; get; }
+ public string tablePrefix { set; get; }
+ public string stablePrefix { set; get; }
+ public bool verbose { set; get; }
+ public bool debug { set; get; }
+ public bool useStable { set; get; }
+
+ private void VerbosePrintFormat(string format, params object[] parameters)
+ {
+ if (verbose == true)
+ {
+ Console.Write(format, parameters);
+ }
+ }
+
+ private void VerbosePrint(string str)
+ {
+ if (verbose == true)
+ {
+ Console.Write(str);
+ }
+ }
+
+ private void DebugPrintFormat(string format, params object[] parameters)
+ {
+ if (debug == true)
+ {
+ Console.Write(format, parameters);
+ }
+ }
+
+ public void ThreadMain()
+ {
+ VerbosePrintFormat("CreateTable {0} from {1} to {2}\n", id, start, end);
+
+ StringBuilder sql = new StringBuilder();
+
+ for (long tableId = start; tableId <= end; tableId++)
+ {
+ sql.Clear();
+ sql = sql.Append("CREATE TABLE IF NOT EXISTS ").
+ Append(this.dbName).Append(".").Append(this.tablePrefix).Append(tableId);
+ if (useStable == true)
+ {
+ sql = sql.Append(" USING ").Append(this.dbName).Append(".").Append(this.stablePrefix).
+ Append(" TAGS(").Append(tableId).Append(")");
+ }
+ else
+ {
+ sql = sql.Append("(ts timestamp, v1 bool, v2 tinyint, v3 smallint, v4 int, v5 bigint, v6 float, v7 double, v8 binary(10), v9 nchar(10))");
+ }
+ IntPtr res = TDengine.Query(this.conn, sql.ToString());
+ if (res != IntPtr.Zero)
+ {
+ VerbosePrint(sql.ToString() + " success\n");
+ }
+ else
+ {
+ VerbosePrint(sql.ToString() + " failure, reason: " + TDengine.Error(res) + "\n");
+ CleanAndExitProgram(1);
+ }
+ TDengine.FreeResult(res);
+ }
+
+ }
+ }
+ }
+}
diff --git a/tests/examples/JDBC/JDBCDemo/pom.xml b/tests/examples/JDBC/JDBCDemo/pom.xml
index 98f908b77e8d3bfa03eebf8560205b0424720f1f..d075fc8f2ad480535075b79efc15c55d9bb799a5 100644
--- a/tests/examples/JDBC/JDBCDemo/pom.xml
+++ b/tests/examples/JDBC/JDBCDemo/pom.xml
@@ -5,17 +5,12 @@
4.0.0
com.taosdata.jdbc
- jdbcChecker
+ JDBCDemo
SNAPSHOT
jar
+
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 3.0.0
-
-
org.apache.maven.plugins
maven-assembly-plugin
@@ -23,7 +18,7 @@
- com.taosdata.example.JdbcChecker
+ com.taosdata.example.JDBCDemo
@@ -49,6 +44,7 @@
8
+
@@ -56,18 +52,8 @@
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.12
-
-
- log4j
- log4j
- 1.2.17
-
-
- junit
- junit
- 4.13.1
- test
+ 2.0.15
+
diff --git a/tests/examples/JDBC/JDBCDemo/readme.md b/tests/examples/JDBC/JDBCDemo/readme.md
index e348e458fe938c4f2381c448f3c15e60af27040e..da638a0bcc485cb3d73f75b59348ec260cc871d2 100644
--- a/tests/examples/JDBC/JDBCDemo/readme.md
+++ b/tests/examples/JDBC/JDBCDemo/readme.md
@@ -1,29 +1,37 @@
-# How to Run the JDBC Demo Code On A Linux OS
+# How to Run the JDBC Demo Code On Linux OS
TDengine's JDBC demo project is organized in a Maven way so that users can easily compile, package and run the project. If you don't have Maven on your server, you may install it using
-sudo apt-get install maven
+```
+sudo apt-get install maven
+```
## Install TDengine Client
Make sure you have already installed a tdengine client on your current develop environment.
Download the tdengine package on our website: ``https://www.taosdata.com/cn/all-downloads/`` and install the client.
-## How to run jdbcChecker
-mvn clean compile exec:java -Dexec.mainClass="com.taosdata.example.JdbcChecker" -Dexec.args="-host localhost"
-
-## How to run jdbcTaosDemo
+## Run jdbcDemo using mvn plugin
run command:
- mvn clean compile exec:java -Dexec.mainClass="com.taosdata.example.jdbcTaosdemo.JdbcTaosdemo"
+```
+mvn clean compile exec:java -Dexec.mainClass="com.taosdata.example.JdbcDemo"
+```
+
and run with your customed args
-mvn clean compile exec:java -Dexec.mainClass="com.taosdata.example.jdbcTaosdemo.JdbcTaosdemo" -Dexec.args="-host localhost"
+```
+mvn clean compile exec:java -Dexec.mainClass="com.taosdata.example.JdbcDemo" -Dexec.args="-host [HOSTNAME]"
+```
## Compile the Demo Code and Run It
+To compile taos-jdbcdriver, go to the source directory ``TDengine/src/connector/jdbc`` and execute
+```
+mvn clean package -Dmaven.test.skip=true
+```
To compile the demo project, go to the source directory ``TDengine/tests/examples/JDBC/JDBCDemo`` and execute
-
-
+```
mvn clean package assembly:single
-
+```
-The ``pom.xml`` is configured to package all the dependencies into one executable jar file.
+To run JDBCDemo.jar, go to ``TDengine/tests/examples/JDBC/JDBCDemo`` and execute
+```
+java -Djava.ext.dirs=../../../../src/connector/jdbc/target:$JAVA_HOME/jre/lib/ext -jar target/JDBCDemo-SNAPSHOT-jar-with-dependencies.jar -host [HOSTNAME]
+```
-To run it, go to ``examples/JDBC/JDBCDemo/target`` and execute
-java -jar jdbcChecker-SNAPSHOT-jar-with-dependencies.jar -host localhost
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcChecker.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCDemo.java
similarity index 59%
rename from tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcChecker.java
rename to tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCDemo.java
index 4be71c52214c348ed7b41c3e763de0d908514907..e569de10cf7894aa04fc3cb5bdb8354b581d5a93 100644
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcChecker.java
+++ b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCDemo.java
@@ -1,56 +1,77 @@
package com.taosdata.example;
-import com.taosdata.jdbc.TSDBDriver;
-
import java.sql.*;
import java.util.Properties;
-public class JdbcChecker {
+public class JDBCDemo {
private static String host;
- private static String dbName = "test";
- private static String tbName = "weather";
+ private static String driverType = "jni";
+ private static final String dbName = "test";
+ private static final String tbName = "weather";
private Connection connection;
- /**
- * get connection
- **/
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if ("-host".equalsIgnoreCase(args[i]) && i < args.length - 1)
+ host = args[++i];
+ if ("-driverType".equalsIgnoreCase(args[i]) && i < args.length - 1) {
+ driverType = args[++i];
+ if (!"jni".equalsIgnoreCase(driverType) && !"restful".equalsIgnoreCase(driverType))
+ printHelp();
+ }
+ }
+
+ if (host == null) {
+ printHelp();
+ }
+
+ JDBCDemo demo = new JDBCDemo();
+ demo.init();
+ demo.createDatabase();
+ demo.useDatabase();
+ demo.dropTable();
+ demo.createTable();
+ demo.insert();
+ demo.select();
+ demo.dropTable();
+ demo.close();
+ }
+
private void init() {
+ // get connection
try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
+ String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
+ if (driverType.equals("restful")) {
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
+ } else {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ }
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ properties.setProperty("host", host);
+ properties.setProperty("charset", "UTF-8");
+ properties.setProperty("locale", "en_US.UTF-8");
+ properties.setProperty("timezone", "UTC-8");
System.out.println("get connection starting...");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+ connection = DriverManager.getConnection(url, properties);
if (connection != null)
System.out.println("[ OK ] Connection established.");
} catch (ClassNotFoundException | SQLException e) {
- throw new RuntimeException("connection failed: " + host);
+ e.printStackTrace();
}
}
- /**
- * create database
- */
private void createDatabase() {
String sql = "create database if not exists " + dbName;
exuete(sql);
}
- /**
- * use database
- */
private void useDatabase() {
String sql = "use " + dbName;
exuete(sql);
}
- /**
- * select
- */
- private void checkSelect() {
+ private void select() {
final String sql = "select * from test.weather";
executeQuery(sql);
}
@@ -79,40 +100,21 @@ public class JdbcChecker {
}
}
- private String formatString(String str) {
- StringBuilder sb = new StringBuilder();
- int blankCnt = (26 - str.length()) / 2;
- for (int j = 0; j < blankCnt; j++)
- sb.append(" ");
- sb.append(str);
- for (int j = 0; j < blankCnt; j++)
- sb.append(" ");
- sb.append("|");
- return sb.toString();
- }
-
-
- /**
- * insert
- */
- private void checkInsert() {
+ private void insert() {
final String sql = "insert into test.weather (ts, temperature, humidity) values(now, 20.5, 34)";
exuete(sql);
}
- /**
- * create table
- */
private void createTable() {
final String sql = "create table if not exists " + dbName + "." + tbName + " (ts timestamp, temperature float, humidity int)";
exuete(sql);
}
- private final void printSql(String sql, boolean succeed, long cost) {
+ private void printSql(String sql, boolean succeed, long cost) {
System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
}
- private final void exuete(String sql) {
+ private void exuete(String sql) {
try (Statement statement = connection.createStatement()) {
long start = System.currentTimeMillis();
boolean execute = statement.execute(sql);
@@ -120,7 +122,7 @@ public class JdbcChecker {
printSql(sql, execute, (end - start));
} catch (SQLException e) {
e.printStackTrace();
-
+
}
}
@@ -135,39 +137,15 @@ public class JdbcChecker {
}
}
- private void checkDropTable() {
+ private void dropTable() {
final String sql = "drop table if exists " + dbName + "." + tbName + "";
exuete(sql);
}
- public static void main(String[] args) {
- for (int i = 0; i < args.length; i++) {
- if ("-host".equalsIgnoreCase(args[i]) && i < args.length - 1) {
- host = args[++i];
- }
- if ("-db".equalsIgnoreCase(args[i]) && i < args.length - 1) {
- dbName = args[++i];
- }
- if ("-t".equalsIgnoreCase(args[i]) && i < args.length - 1) {
- tbName = args[++i];
- }
- }
-
- if (host == null) {
- System.out.println("Usage: java -jar JDBCConnectorChecker.jar -host ");
- return;
- }
-
- JdbcChecker checker = new JdbcChecker();
- checker.init();
- checker.createDatabase();
- checker.useDatabase();
- checker.checkDropTable();
- checker.createTable();
- checker.checkInsert();
- checker.checkSelect();
- checker.checkDropTable();
- checker.close();
+ private static void printHelp() {
+ System.out.println("Usage: java -jar JdbcDemo.jar -host -driverType ");
+ System.exit(0);
}
+
}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/JdbcTaosdemo.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/JdbcTaosdemo.java
deleted file mode 100644
index 259985ec9f4708b9317575fd97919adcc82d7161..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/JdbcTaosdemo.java
+++ /dev/null
@@ -1,357 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo;
-
-import com.taosdata.example.jdbcTaosdemo.domain.JdbcTaosdemoConfig;
-import com.taosdata.example.jdbcTaosdemo.task.CreateTableTask;
-import com.taosdata.example.jdbcTaosdemo.task.InsertTableDatetimeTask;
-import com.taosdata.example.jdbcTaosdemo.task.InsertTableTask;
-import com.taosdata.example.jdbcTaosdemo.utils.ConnectionFactory;
-import com.taosdata.example.jdbcTaosdemo.utils.SqlSpeller;
-import com.taosdata.example.jdbcTaosdemo.utils.TimeStampUtil;
-import org.apache.log4j.Logger;
-
-import java.sql.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class JdbcTaosdemo {
-
- private static Logger logger = Logger.getLogger(JdbcTaosdemo.class);
- private final JdbcTaosdemoConfig config;
- private Connection connection;
-
- public JdbcTaosdemo(JdbcTaosdemoConfig config) {
- this.config = config;
- }
-
- public static void main(String[] args) {
- // parse config from args
- JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
-
- boolean isHelp = Arrays.asList(args).contains("--help");
- if (isHelp) {
- JdbcTaosdemoConfig.printHelp();
- return;
- }
- if (config.getHost() == null) {
- JdbcTaosdemoConfig.printHelp();
- return;
- }
-
- JdbcTaosdemo taosdemo = new JdbcTaosdemo(config);
- // establish connection
- taosdemo.init();
- // drop database
- taosdemo.dropDatabase();
- // create database
- taosdemo.createDatabase();
- // use db
- taosdemo.useDatabase();
- // create super table
- taosdemo.createSuperTable();
- // create sub tables
- taosdemo.createTableMultiThreads();
-
- boolean infinite = Arrays.asList(args).contains("--infinite");
- if (infinite) {
- logger.info("!!! Infinite Insert Mode Started. !!!");
- taosdemo.insertInfinite();
- } else {
- // insert into table
- taosdemo.insertMultiThreads();
- // select from sub table
- taosdemo.selectFromTableLimit();
- taosdemo.selectCountFromTable();
- taosdemo.selectAvgMinMaxFromTable();
- // select last from
- taosdemo.selectLastFromTable();
- // select from super table
- taosdemo.selectFromSuperTableLimit();
- taosdemo.selectCountFromSuperTable();
- taosdemo.selectAvgMinMaxFromSuperTable();
- //select avg ,max from stb where tag
- taosdemo.selectAvgMinMaxFromSuperTableWhereTag();
- //select last from stb where location = ''
- taosdemo.selectLastFromSuperTableWhere();
- // select group by
- taosdemo.selectGroupBy();
- // select like
- taosdemo.selectLike();
- // select where ts >= ts<=
- taosdemo.selectLastOneHour();
- taosdemo.selectLastOneDay();
- taosdemo.selectLastOneWeek();
- taosdemo.selectLastOneMonth();
- taosdemo.selectLastOneYear();
-
- // drop super table
- if (config.isDeleteTable())
- taosdemo.dropSuperTable();
- taosdemo.close();
- }
- }
-
-
- /**
- * establish the connection
- */
- private void init() {
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- connection = ConnectionFactory.build(config);
- if (connection != null)
- logger.info("[ OK ] Connection established.");
- } catch (ClassNotFoundException | SQLException e) {
- logger.error(e.getMessage());
- throw new RuntimeException("connection failed: " + config.getHost());
- }
- }
-
- /**
- * create database
- */
- private void createDatabase() {
- String sql = SqlSpeller.createDatabaseSQL(config.getDbName(), config.getKeep(), config.getDays());
- execute(sql);
- }
-
- /**
- * drop database
- */
- private void dropDatabase() {
- String sql = SqlSpeller.dropDatabaseSQL(config.getDbName());
- execute(sql);
- }
-
- /**
- * use database
- */
- private void useDatabase() {
- String sql = SqlSpeller.useDatabaseSQL(config.getDbName());
- execute(sql);
- }
-
- /**
- * create super table
- */
- private void createSuperTable() {
- String sql = SqlSpeller.createSuperTableSQL(config.getStbName());
- execute(sql);
- }
-
- /**
- * create table use super table with multi threads
- */
- private void createTableMultiThreads() {
- try {
- final int tableSize = config.getNumberOfTable() / config.getNumberOfThreads();
- List threads = new ArrayList<>();
- for (int i = 0; i < config.getNumberOfThreads(); i++) {
- Thread thread = new Thread(new CreateTableTask(config, i * tableSize, tableSize), "Thread-" + i);
- threads.add(thread);
- thread.start();
- }
- for (Thread thread : threads) {
- thread.join();
- }
- logger.info("<<< Multi Threads create table finished.");
- } catch (InterruptedException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- * insert data infinitely
- */
- private void insertInfinite() {
- try {
- final long startDatetime = TimeStampUtil.datetimeToLong("2005-01-01 00:00:00.000");
- final long finishDatetime = TimeStampUtil.datetimeToLong("2030-01-01 00:00:00.000");
-
- final int tableSize = config.getNumberOfTable() / config.getNumberOfThreads();
- List threads = new ArrayList<>();
- for (int i = 0; i < config.getNumberOfThreads(); i++) {
- Thread thread = new Thread(new InsertTableDatetimeTask(config, i * tableSize, tableSize, startDatetime, finishDatetime), "Thread-" + i);
- threads.add(thread);
- thread.start();
- }
- for (Thread thread : threads) {
- thread.join();
- }
- logger.info("<<< Multi Threads insert table finished.");
- } catch (InterruptedException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- private void insertMultiThreads() {
- try {
- final int tableSize = config.getNumberOfTable() / config.getNumberOfThreads();
- final int numberOfRecordsPerTable = config.getNumberOfRecordsPerTable();
- List threads = new ArrayList<>();
- for (int i = 0; i < config.getNumberOfThreads(); i++) {
- Thread thread = new Thread(new InsertTableTask(config, i * tableSize, tableSize, numberOfRecordsPerTable), "Thread-" + i);
- threads.add(thread);
- thread.start();
- }
- for (Thread thread : threads) {
- thread.join();
- }
- logger.info("<<< Multi Threads insert table finished.");
- } catch (InterruptedException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- private void selectFromTableLimit() {
- String sql = SqlSpeller.selectFromTableLimitSQL(config.getDbName(), config.getTbPrefix(), 1, 10, 0);
- executeQuery(sql);
- }
-
- private void selectCountFromTable() {
- String sql = SqlSpeller.selectCountFromTableSQL(config.getDbName(), config.getTbPrefix(), 1);
- executeQuery(sql);
- }
-
- private void selectAvgMinMaxFromTable() {
- String sql = SqlSpeller.selectAvgMinMaxFromTableSQL("current", config.getDbName(), config.getTbPrefix(), 1);
- executeQuery(sql);
- }
-
- private void selectLastFromTable() {
- String sql = SqlSpeller.selectLastFromTableSQL(config.getDbName(), config.getTbPrefix(), 1);
- executeQuery(sql);
- }
-
- private void selectFromSuperTableLimit() {
- String sql = SqlSpeller.selectFromSuperTableLimitSQL(config.getDbName(), config.getStbName(), 10, 0);
- executeQuery(sql);
- }
-
- private void selectCountFromSuperTable() {
- String sql = SqlSpeller.selectCountFromSuperTableSQL(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectAvgMinMaxFromSuperTable() {
- String sql = SqlSpeller.selectAvgMinMaxFromSuperTableSQL("current", config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectAvgMinMaxFromSuperTableWhereTag() {
- String sql = SqlSpeller.selectAvgMinMaxFromSuperTableWhere("current", config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastFromSuperTableWhere() {
- String sql = SqlSpeller.selectLastFromSuperTableWhere("current", config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectGroupBy() {
- String sql = SqlSpeller.selectGroupBy("current", config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLike() {
- String sql = SqlSpeller.selectLike(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastOneHour() {
- String sql = SqlSpeller.selectLastOneHour(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastOneDay() {
- String sql = SqlSpeller.selectLastOneDay(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastOneWeek() {
- String sql = SqlSpeller.selectLastOneWeek(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastOneMonth() {
- String sql = SqlSpeller.selectLastOneMonth(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
- private void selectLastOneYear() {
- String sql = SqlSpeller.selectLastOneYear(config.getDbName(), config.getStbName());
- executeQuery(sql);
- }
-
-
- private void close() {
- try {
- if (connection != null) {
- this.connection.close();
- logger.info("connection closed.");
- }
- } catch (SQLException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- * drop super table
- */
- private void dropSuperTable() {
- String sql = SqlSpeller.dropSuperTableSQL(config.getDbName(), config.getStbName());
- execute(sql);
- }
-
- /**
- * execute sql, use this method when sql is create, alter, drop..
- */
- private void execute(String sql) {
- try (Statement statement = connection.createStatement()) {
- long start = System.currentTimeMillis();
- boolean execute = statement.execute(sql);
- long end = System.currentTimeMillis();
- printSql(sql, execute, (end - start));
- } catch (SQLException e) {
- logger.error("ERROR execute SQL ===> " + sql);
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- private static void printSql(String sql, boolean succeed, long cost) {
- System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
- }
-
- private void executeQuery(String sql) {
- try (Statement statement = connection.createStatement()) {
- long start = System.currentTimeMillis();
- ResultSet resultSet = statement.executeQuery(sql);
- long end = System.currentTimeMillis();
- printSql(sql, true, (end - start));
- printResult(resultSet);
- } catch (SQLException e) {
- logger.error("ERROR execute SQL ===> " + sql);
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-
- private static void printResult(ResultSet resultSet) throws SQLException {
- ResultSetMetaData metaData = resultSet.getMetaData();
- while (resultSet.next()) {
- StringBuilder sb = new StringBuilder();
- for (int i = 1; i <= metaData.getColumnCount(); i++) {
- String columnLabel = metaData.getColumnLabel(i);
- String value = resultSet.getString(i);
- sb.append(columnLabel + ": " + value + "\t");
- }
- System.out.println(sb.toString());
- }
- }
-
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/domain/JdbcTaosdemoConfig.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/domain/JdbcTaosdemoConfig.java
deleted file mode 100644
index 36745a93941cc690f37d06d9a3662605723bbd2c..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/domain/JdbcTaosdemoConfig.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.domain;
-
-public final class JdbcTaosdemoConfig {
-
- //The host to connect to TDengine. Must insert one
- private String host;
- //The TCP/IP port number to use for the connection. Default is 6030.
- private int port = 6030;
- //The TDengine user name to use when connecting to the server. Default is 'root'
- private String user = "root";
- //The password to use when connecting to the server. Default is 'taosdata'
- private String password = "taosdata";
-
- //Destination database. Default is 'test'
- private String dbName = "test";
- //keep
- private int keep = 36500;
- //days
- private int days = 120;
-
- //Super table Name. Default is 'meters'
- private String stbName = "meters";
- //Table name prefix. Default is 'd'
- private String tbPrefix = "d";
- //The number of tables. Default is 10.
- private int numberOfTable = 10;
- //The number of records per table. Default is 2
- private int numberOfRecordsPerTable = 2;
- //The number of records per request. Default is 100
- private int numberOfRecordsPerRequest = 100;
-
- //The number of threads. Default is 1.
- private int numberOfThreads = 1;
- //Delete data. Default is false
- private boolean deleteTable = false;
-
- public static void printHelp() {
- System.out.println("Usage: java -jar JdbcTaosDemo.jar [OPTION...]");
- System.out.println("-h host The host to connect to TDengine. you must input one");
- System.out.println("-p port The TCP/IP port number to use for the connection. Default is 6030");
- System.out.println("-u user The TDengine user name to use when connecting to the server. Default is 'root'");
- System.out.println("-P password The password to use when connecting to the server.Default is 'taosdata'");
- System.out.println("-d database Destination database. Default is 'test'");
- System.out.println("-m tablePrefix Table prefix name. Default is 'd'");
- System.out.println("-t num_of_tables The number of tables. Default is 10");
- System.out.println("-n num_of_records_per_table The number of records per table. Default is 2");
- System.out.println("-r num_of_records_per_req The number of records per request. Default is 100");
- System.out.println("-T num_of_threads The number of threads. Default is 1");
- System.out.println("-D delete table Delete data methods. Default is false");
- System.out.println("--help Give this help list");
-// System.out.println("--infinite infinite insert mode");
- }
-
- /**
- * parse args from command line
- *
- * @param args command line args
- * @return JdbcTaosdemoConfig
- */
- public JdbcTaosdemoConfig(String[] args) {
- for (int i = 0; i < args.length; i++) {
- if ("-h".equals(args[i]) && i < args.length - 1) {
- host = args[++i];
- }
- if ("-p".equals(args[i]) && i < args.length - 1) {
- port = Integer.parseInt(args[++i]);
- }
- if ("-u".equals(args[i]) && i < args.length - 1) {
- user = args[++i];
- }
- if ("-P".equals(args[i]) && i < args.length - 1) {
- password = args[++i];
- }
- if ("-d".equals(args[i]) && i < args.length - 1) {
- dbName = args[++i];
- }
- if ("-m".equals(args[i]) && i < args.length - 1) {
- tbPrefix = args[++i];
- }
- if ("-t".equals(args[i]) && i < args.length - 1) {
- numberOfTable = Integer.parseInt(args[++i]);
- }
- if ("-n".equals(args[i]) && i < args.length - 1) {
- numberOfRecordsPerTable = Integer.parseInt(args[++i]);
- }
- if ("-r".equals(args[i]) && i < args.length - 1) {
- numberOfRecordsPerRequest = Integer.parseInt(args[++i]);
- }
- if ("-T".equals(args[i]) && i < args.length - 1) {
- numberOfThreads = Integer.parseInt(args[++i]);
- }
- if ("-D".equals(args[i]) && i < args.length - 1) {
- deleteTable = Boolean.parseBoolean(args[++i]);
- }
- }
- }
-
- public String getHost() {
- return host;
- }
-
- public int getPort() {
- return port;
- }
-
- public String getUser() {
- return user;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getDbName() {
- return dbName;
- }
-
- public int getKeep() {
- return keep;
- }
-
- public int getDays() {
- return days;
- }
-
- public String getStbName() {
- return stbName;
- }
-
- public String getTbPrefix() {
- return tbPrefix;
- }
-
- public int getNumberOfTable() {
- return numberOfTable;
- }
-
- public int getNumberOfRecordsPerTable() {
- return numberOfRecordsPerTable;
- }
-
- public int getNumberOfThreads() {
- return numberOfThreads;
- }
-
- public boolean isDeleteTable() {
- return deleteTable;
- }
-
- public int getNumberOfRecordsPerRequest() {
- return numberOfRecordsPerRequest;
- }
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/CreateTableTask.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/CreateTableTask.java
deleted file mode 100644
index 1da2c8647efe0e9204f1a591ba9431a489c91cb0..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/CreateTableTask.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.task;
-
-import com.taosdata.example.jdbcTaosdemo.domain.JdbcTaosdemoConfig;
-import com.taosdata.example.jdbcTaosdemo.utils.ConnectionFactory;
-import com.taosdata.example.jdbcTaosdemo.utils.SqlSpeller;
-import org.apache.log4j.Logger;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-public class CreateTableTask implements Runnable {
-
- private static Logger logger = Logger.getLogger(CreateTableTask.class);
- private final JdbcTaosdemoConfig config;
- private final int startIndex;
- private final int tableNumber;
-
- public CreateTableTask(JdbcTaosdemoConfig config, int startIndex, int tableNumber) {
- this.config = config;
- this.startIndex = startIndex;
- this.tableNumber = tableNumber;
- }
-
- @Override
- public void run() {
- try {
- Connection connection = ConnectionFactory.build(config);
- for (int i = startIndex; i < startIndex + tableNumber; i++) {
- Statement statement = connection.createStatement();
- String sql = SqlSpeller.createTableSQL(i + 1, config.getDbName(), config.getStbName());
- statement.execute(sql);
- statement.close();
- logger.info(">>> " + sql);
- }
- connection.close();
- } catch (SQLException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableDatetimeTask.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableDatetimeTask.java
deleted file mode 100644
index 4f60c25646573223a9cbfd820c8eb37e4f6f6c8c..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableDatetimeTask.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.task;
-
-import com.taosdata.example.jdbcTaosdemo.domain.JdbcTaosdemoConfig;
-import com.taosdata.example.jdbcTaosdemo.utils.ConnectionFactory;
-import com.taosdata.example.jdbcTaosdemo.utils.SqlSpeller;
-import org.apache.log4j.Logger;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-public class InsertTableDatetimeTask implements Runnable {
- private static Logger logger = Logger.getLogger(InsertTableDatetimeTask.class);
-
- private final JdbcTaosdemoConfig config;
- private final int startTableIndex;
- private final int tableNumber;
- private final long startDatetime;
- private final long finishedDatetime;
-
- public InsertTableDatetimeTask(JdbcTaosdemoConfig config, int startTableIndex, int tableNumber, long startDatetime, long finishedDatetime) {
- this.config = config;
- this.startTableIndex = startTableIndex;
- this.tableNumber = tableNumber;
- this.startDatetime = startDatetime;
- this.finishedDatetime = finishedDatetime;
- }
-
- @Override
- public void run() {
- try {
- Connection connection = ConnectionFactory.build(config);
- int valuesCount = config.getNumberOfRecordsPerRequest();
- for (long ts = startDatetime; ts < finishedDatetime; ts += valuesCount) {
- for (int i = startTableIndex; i < startTableIndex + tableNumber; i++) {
- String sql = SqlSpeller.insertBatchSizeRowsSQL(config.getDbName(), config.getTbPrefix(), i + 1, ts, valuesCount);
- Statement statement = connection.createStatement();
- statement.execute(sql);
- statement.close();
- logger.info(Thread.currentThread().getName() + ">>> " + sql);
- }
- }
- connection.close();
- } catch (SQLException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableTask.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableTask.java
deleted file mode 100644
index 644de52dd3e75a77c2d635a6f5328f186259096c..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/task/InsertTableTask.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.task;
-
-import com.taosdata.example.jdbcTaosdemo.domain.JdbcTaosdemoConfig;
-import com.taosdata.example.jdbcTaosdemo.utils.ConnectionFactory;
-import com.taosdata.example.jdbcTaosdemo.utils.SqlSpeller;
-import org.apache.log4j.Logger;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-
-public class InsertTableTask implements Runnable {
- private static final Logger logger = Logger.getLogger(InsertTableTask.class);
-
- private final JdbcTaosdemoConfig config;
- private final int startTbIndex;
- private final int tableNumber;
- private final int recordsNumberPerTable;
-
- public InsertTableTask(JdbcTaosdemoConfig config, int startTbIndex, int tableNumber, int recordsNumberPerTable) {
- this.config = config;
- this.startTbIndex = startTbIndex;
- this.tableNumber = tableNumber;
- this.recordsNumberPerTable = recordsNumberPerTable;
- }
-
- @Override
- public void run() {
- try {
- Connection connection = ConnectionFactory.build(config);
- int keep = config.getKeep();
- Instant end = Instant.now();
- Instant start = end.minus(Duration.ofDays(keep - 1));
- long timeGap = ChronoUnit.MILLIS.between(start, end) / (recordsNumberPerTable - 1);
-
- // iterate insert
- for (int j = 0; j < recordsNumberPerTable; j++) {
- long ts = start.toEpochMilli() + (j * timeGap);
- // insert data into echo table
- for (int i = startTbIndex; i < startTbIndex + tableNumber; i++) {
- String sql = SqlSpeller.insertBatchSizeRowsSQL(config.getDbName(), config.getTbPrefix(), i + 1, ts, config.getNumberOfRecordsPerRequest());
- logger.info(Thread.currentThread().getName() + ">>> " + sql);
- Statement statement = connection.createStatement();
- statement.execute(sql);
- statement.close();
- }
- }
- connection.close();
- } catch (SQLException e) {
- logger.error(e.getMessage());
- e.printStackTrace();
- }
- }
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/ConnectionFactory.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/ConnectionFactory.java
deleted file mode 100644
index 52691f4de722db2eb17e7061e09ff0e59a390077..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/ConnectionFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.utils;
-
-import com.taosdata.example.jdbcTaosdemo.domain.JdbcTaosdemoConfig;
-import com.taosdata.jdbc.TSDBDriver;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.Properties;
-
-public class ConnectionFactory {
-
- public static Connection build(JdbcTaosdemoConfig config) throws SQLException {
- return build(config.getHost(), config.getPort(), config.getDbName(), config.getUser(), config.getPassword());
- }
-
- public static Connection build(String host, int port, String dbName) throws SQLException {
- return build(host, port, dbName, "root", "taosdata");
- }
-
- private static Connection build(String host, int port, String dbName, String user, String password) throws SQLException {
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_USER, user);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_PASSWORD, password);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- return DriverManager.getConnection("jdbc:TAOS://" + host + ":" + port + "/" + dbName + "", properties);
- }
-
-
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/SqlSpeller.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/SqlSpeller.java
deleted file mode 100644
index b4a79e9eba47cc947d822b645d0ae1f9952f08f0..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/SqlSpeller.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.utils;
-
-import java.util.Random;
-
-public class SqlSpeller {
- private static final Random random = new Random(System.currentTimeMillis());
- private static final String[] locations = {
- "Beijing", "Shanghai", "Guangzhou", "Shenzhen",
- "HangZhou", "Tianjin", "Wuhan", "Changsha", "Nanjing", "Xian"
- };
-
- public static String createDatabaseSQL(String dbName, int keep, int days) {
- return "create database if not exists " + dbName + " keep " + keep + " days " + days;
- }
-
- public static String dropDatabaseSQL(String dbName) {
- return "drop database if exists " + dbName;
- }
-
- public static String useDatabaseSQL(String dbName) {
- return "use " + dbName;
- }
-
- public static String createSuperTableSQL(String superTableName) {
- return "create table if not exists " + superTableName + "(ts timestamp, current float, voltage int, phase float) tags(location binary(64), groupId int)";
- }
-
- public static String dropSuperTableSQL(String dbName, String superTableName) {
- return "drop table if exists " + dbName + "." + superTableName;
- }
-
- public static String createTableSQL(int tableIndex, String dbName, String superTableName) {
- String location = locations[random.nextInt(locations.length)];
- return "create table d" + tableIndex + " using " + dbName + "." + superTableName + " tags('" + location + "'," + tableIndex + ")";
- }
-
- public static String insertOneRowSQL(String dbName, String tbPrefix, int tableIndex, long ts) {
- float current = 10 + random.nextFloat();
- int voltage = 200 + random.nextInt(20);
- float phase = random.nextFloat();
- String sql = "insert into " + dbName + "." + tbPrefix + "" + tableIndex + " " + "values(" + ts + ", " + current + ", " + voltage + ", " + phase + ")";
- return sql;
- }
-
- public static String insertBatchSizeRowsSQL(String dbName, String tbPrefix, int tbIndex, long ts, int valuesCount) {
- float current = 10 + random.nextFloat();
- int voltage = 200 + random.nextInt(20);
- float phase = random.nextFloat();
- StringBuilder sb = new StringBuilder();
- sb.append("insert into " + dbName + "." + tbPrefix + "" + tbIndex + " " + "values");
- for (int i = 0; i < valuesCount; i++) {
- sb.append("(" + (ts + i) + ", " + current + ", " + voltage + ", " + phase + ") ");
- }
- return sb.toString();
- }
-
- public static String selectFromTableLimitSQL(String dbName, String tbPrefix, int tbIndex, int limit, int offset) {
- return "select * from " + dbName + "." + tbPrefix + "" + tbIndex + " limit " + limit + " offset " + offset;
- }
-
- public static String selectCountFromTableSQL(String dbName, String tbPrefix, int tbIndex) {
- return "select count(*) from " + dbName + "." + tbPrefix + "" + tbIndex;
- }
-
- public static String selectAvgMinMaxFromTableSQL(String field, String dbName, String tbPrefix, int tbIndex) {
- return "select avg(" + field + "),min(" + field + "),max(" + field + ") from " + dbName + "." + tbPrefix + "" + tbIndex;
- }
-
- public static String selectFromSuperTableLimitSQL(String dbName, String stbName, int limit, int offset) {
- return "select * from " + dbName + "." + stbName + " limit " + limit + " offset " + offset;
- }
-
- public static String selectCountFromSuperTableSQL(String dbName, String stableName) {
- return "select count(*) from " + dbName + "." + stableName;
- }
-
- public static String selectAvgMinMaxFromSuperTableSQL(String field, String dbName, String stbName) {
- return "select avg(" + field + "),min(" + field + "),max(" + field + ") from " + dbName + "." + stbName + "";
- }
-
- public static String selectLastFromTableSQL(String dbName, String tbPrefix, int tbIndex) {
- return "select last(*) from " + dbName + "." + tbPrefix + "" + tbIndex;
- }
-
- //select avg ,max from stb where tag
- public static String selectAvgMinMaxFromSuperTableWhere(String field, String dbName, String stbName) {
- return "select avg(" + field + "),min(" + field + "),max(" + field + ") from " + dbName + "." + stbName + " where location = '" + locations[random.nextInt(locations.length)] + "'";
- }
-
- //select last from stb where
- public static String selectLastFromSuperTableWhere(String field, String dbName, String stbName) {
- return "select last(" + field + ") from " + dbName + "." + stbName + " where location = '" + locations[random.nextInt(locations.length)] + "'";
- }
-
- public static String selectGroupBy(String field, String dbName, String stbName) {
- return "select avg(" + field + ") from " + dbName + "." + stbName + " group by location";
- }
-
- public static String selectLike(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where location like 'S%'";
- }
-
- public static String selectLastOneHour(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where ts >= now - 1h";
- }
-
- public static String selectLastOneDay(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where ts >= now - 1d";
- }
-
- public static String selectLastOneWeek(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where ts >= now - 1w";
- }
-
- public static String selectLastOneMonth(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where ts >= now - 1n";
- }
-
- public static String selectLastOneYear(String dbName, String stbName) {
- return "select * from " + dbName + "." + stbName + " where ts >= now - 1y";
- }
-
- // select group by
- // select like
- // select ts >= ts<=
-}
\ No newline at end of file
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtil.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtil.java
deleted file mode 100644
index 0a345afdd1e45123d889d7ee198cf8efd201176b..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtil.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.utils;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.Date;
-
-public class TimeStampUtil {
- private static final String datetimeFormat = "yyyy-MM-dd HH:mm:ss.SSS";
-
- public static long datetimeToLong(String dateTime) {
- SimpleDateFormat sdf = new SimpleDateFormat(datetimeFormat);
- try {
- return sdf.parse(dateTime).getTime();
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
- }
-
- public static String longToDatetime(long time) {
- SimpleDateFormat sdf = new SimpleDateFormat(datetimeFormat);
- return sdf.format(new Date(time));
- }
-
- public static void main(String[] args) throws ParseException {
-
-// Instant now = Instant.now();
-// System.out.println(now);
-// Instant years20Ago = now.minus(Duration.ofDays(365));
-// System.out.println(years20Ago);
-
-
- }
-
-
-}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/resources/log4j.properties b/tests/examples/JDBC/JDBCDemo/src/main/resources/log4j.properties
deleted file mode 100644
index b445e5f52edf1a2b19c35c1be187716d17cdd7b1..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-### 设置###
-log4j.rootLogger=debug,stdout,DebugLog,ErrorLog
-### 输出信息到控制抬 ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
-### 输出DEBUG 级别以上的日志到=logs/error.log ###
-log4j.appender.DebugLog=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DebugLog.File=logs/debug.log
-log4j.appender.DebugLog.Append=true
-log4j.appender.DebugLog.Threshold=DEBUG
-log4j.appender.DebugLog.layout=org.apache.log4j.PatternLayout
-log4j.appender.DebugLog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
-### 输出ERROR 级别以上的日志到=logs/error.log ###
-log4j.appender.ErrorLog=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.ErrorLog.File=logs/error.log
-log4j.appender.ErrorLog.Append=true
-log4j.appender.ErrorLog.Threshold=ERROR
-log4j.appender.ErrorLog.layout=org.apache.log4j.PatternLayout
-log4j.appender.ErrorLog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
\ No newline at end of file
diff --git a/tests/examples/JDBC/JDBCDemo/src/test/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtilTest.java b/tests/examples/JDBC/JDBCDemo/src/test/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtilTest.java
deleted file mode 100644
index f370b2ef6eaa708b061ebf4a7f58f3d31f78f999..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/JDBCDemo/src/test/java/com/taosdata/example/jdbcTaosdemo/utils/TimeStampUtilTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.taosdata.example.jdbcTaosdemo.utils;
-
-import org.junit.Test;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.Date;
-
-import static org.junit.Assert.*;
-
-public class TimeStampUtilTest {
-
- @Test
- public void datetimeToLong() {
- final String startTime = "2005-01-01 00:00:00.000";
- long start = TimeStampUtil.datetimeToLong(startTime);
- assertEquals(1104508800000l, start);
- }
-
- @Test
- public void longToDatetime() {
- String datetime = TimeStampUtil.longToDatetime(1510000000000L);
- assertEquals("2017-11-07 04:26:40.000", datetime);
- }
-
- @Test
- public void getStartDateTime() {
- int keep = 365;
-
- Instant end = Instant.now();
- System.out.println(end.toString());
- System.out.println(end.toEpochMilli());
-
- Instant start = end.minus(Duration.ofDays(keep));
- System.out.println(start.toString());
- System.out.println(start.toEpochMilli());
-
- int numberOfRecordsPerTable = 10;
- long timeGap = ChronoUnit.MILLIS.between(start, end) / (numberOfRecordsPerTable - 1);
- System.out.println(timeGap);
-
- System.out.println("===========================");
- for (int i = 0; i < numberOfRecordsPerTable; i++) {
- long ts = start.toEpochMilli() + (i * timeGap);
- System.out.println(i + " : " + ts);
- }
- }
-}
\ No newline at end of file
diff --git a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/ConnectionPoolDemo.java b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/ConnectionPoolDemo.java
index 79c0aacea740dcb6fca9780c7f64872c537c3225..4e33b75bc57aa18ebc0cae166e84401d4357d614 100644
--- a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/ConnectionPoolDemo.java
+++ b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/ConnectionPoolDemo.java
@@ -82,12 +82,27 @@ public class ConnectionPoolDemo {
init(dataSource);
- ExecutorService executor = Executors.newFixedThreadPool(threadCount);
- while (true) {
- executor.execute(new InsertTask(dataSource, dbName, tableSize, batchSize));
- if (sleep > 0)
- TimeUnit.MILLISECONDS.sleep(sleep);
+ try {
+ Connection connection = dataSource.getConnection();
+ Statement statement = connection.createStatement();
+ String sql = "insert into " + dbName + ".t_1 values('2020-01-01 00:00:00.000',12.12,111)";
+ int affectRows = statement.executeUpdate(sql);
+ System.out.println("affectRows >>> " + affectRows);
+ affectRows = statement.executeUpdate(sql);
+ System.out.println("affectRows >>> " + affectRows);
+ statement.close();
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
}
+
+
+// ExecutorService executor = Executors.newFixedThreadPool(threadCount);
+// while (true) {
+// executor.execute(new InsertTask(dataSource, dbName, tableSize, batchSize));
+// if (sleep > 0)
+// TimeUnit.MILLISECONDS.sleep(sleep);
+// }
}
private static void init(DataSource dataSource) {
diff --git a/tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/jdbc/springbootdemo/SpringbootdemoApplication.java b/tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/jdbc/springbootdemo/SpringbootdemoApplication.java
index 69cd3e0ced2888575d890ffea36407455c4bea7a..f693214567fb3e8780e8ee1a867cf765de0ec8d7 100644
--- a/tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/jdbc/springbootdemo/SpringbootdemoApplication.java
+++ b/tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/jdbc/springbootdemo/SpringbootdemoApplication.java
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan(basePackages = {"com.taosdata.jdbc.springbootdemo.dao"})
@SpringBootApplication
-public class SpringbootdemoApplication {
+public class cd {
public static void main(String[] args) {
SpringApplication.run(SpringbootdemoApplication.class, args);
diff --git a/tests/examples/JDBC/taosdemo/pom.xml b/tests/examples/JDBC/taosdemo/pom.xml
index 5cbf6cb7004566e8d6ea6e16e8b70f289ac2941d..15b22917b6103740ac419e046d5fd8fa79363d25 100644
--- a/tests/examples/JDBC/taosdemo/pom.xml
+++ b/tests/examples/JDBC/taosdemo/pom.xml
@@ -2,88 +2,107 @@
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.4.0
-
-
com.taosdata
taosdemo
2.0
taosdemo
+ jar
Demo project for TDengine
- 1.8
+ 5.3.2
-
-
+
- com.taosdata.jdbc
- taos-jdbcdriver
- 2.0.14
+ org.springframework
+ spring-context
+ ${spring.version}
-
- mysql
- mysql-connector-java
- 5.1.47
+ org.springframework
+ spring-core
+ ${spring.version}
-
- com.baomidou
- mybatis-plus-boot-starter
- 3.1.2
+ org.springframework
+ spring-beans
+ ${spring.version}
-
- log4j
- log4j
- 1.2.17
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-aspects
+ ${spring.version}
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+ test
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
-
+
+
+ com.zaxxer
+ HikariCP
+ 3.4.5
+
+
- org.springframework.boot
- spring-boot-starter-jdbc
+ com.taosdata.jdbc
+ taos-jdbcdriver
+ 2.0.15
+ system
+ ${project.basedir}/src/main/resources/lib/taos-jdbcdriver-2.0.15-dist.jar
+
- org.springframework.boot
- spring-boot-starter-thymeleaf
+ com.alibaba
+ fastjson
+ 1.2.75
+
- org.springframework.boot
- spring-boot-starter-web
+ mysql
+ mysql-connector-java
+ 5.1.47
+ test
+
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- 2.1.4
+ log4j
+ log4j
+ 1.2.17
+
junit
junit
4.12
test
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
+
org.projectlombok
lombok
- true
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
+ 1.18.16
+ provided
@@ -94,6 +113,7 @@
**/*.properties
**/*.xml
+ **/*.jar
true
@@ -108,10 +128,41 @@
- org.springframework.boot
- spring-boot-maven-plugin
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 8
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.1.0
+
+
+
+
+ com.taosdata.taosdemo.TaosDemoApplication
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
diff --git a/tests/examples/JDBC/taosdemo/readme.md b/tests/examples/JDBC/taosdemo/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..a4b6e297691c4981fc36a06679d085c183e890a1
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/readme.md
@@ -0,0 +1,3 @@
+需求:
+1. 可以读lowa的配置文件
+2. 支持对JNI方式和Restful方式的taos-driver
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9a22a1ef75962159bd33a8e525898a69b67a911
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
@@ -0,0 +1,112 @@
+package com.taosdata.taosdemo;
+
+import com.taosdata.taosdemo.components.DataSourceFactory;
+import com.taosdata.taosdemo.components.JdbcTaosdemoConfig;
+import com.taosdata.taosdemo.domain.SuperTableMeta;
+import com.taosdata.taosdemo.service.DatabaseService;
+import com.taosdata.taosdemo.service.SubTableService;
+import com.taosdata.taosdemo.service.SuperTableService;
+import com.taosdata.taosdemo.service.data.SuperTableMetaGenerator;
+import org.apache.log4j.Logger;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TaosDemoApplication {
+
+ private static Logger logger = Logger.getLogger(TaosDemoApplication.class);
+
+ public static void main(String[] args) throws IOException {
+ // 读配置参数
+ JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
+ boolean isHelp = Arrays.asList(args).contains("--help");
+ if (isHelp || config.host == null || config.host.isEmpty()) {
+// if (isHelp) {
+ JdbcTaosdemoConfig.printHelp();
+ System.exit(0);
+ }
+ // 初始化
+ final DataSource dataSource = DataSourceFactory.getInstance(config.host, config.port, config.user, config.password);
+ final DatabaseService databaseService = new DatabaseService(dataSource);
+ final SuperTableService superTableService = new SuperTableService(dataSource);
+ final SubTableService subTableService = new SubTableService(dataSource);
+ // 创建数据库
+ long start = System.currentTimeMillis();
+ Map databaseParam = new HashMap<>();
+ databaseParam.put("database", config.database);
+ databaseParam.put("keep", Integer.toString(config.keep));
+ databaseParam.put("days", Integer.toString(config.days));
+ databaseParam.put("replica", Integer.toString(config.replica));
+ //TODO: other database parameters
+ databaseService.createDatabase(databaseParam);
+ databaseService.useDatabase(config.database);
+ long end = System.currentTimeMillis();
+ logger.info(">>> create database time cost : " + (end - start) + " ms.");
+ /**********************************************************************************/
+ // 构造超级表的meta
+ SuperTableMeta superTableMeta;
+ // create super table
+ if (config.superTableSQL != null) {
+ // use a sql to create super table
+ superTableMeta = SuperTableMetaGenerator.generate(config.superTableSQL);
+ if (config.database != null && !config.database.isEmpty())
+ superTableMeta.setDatabase(config.database);
+ } else if (config.numOfFields == 0) {
+ String sql = "create table " + config.database + "." + config.superTable + " (ts timestamp, temperature float, humidity int) tags(location nchar(64), groupId int)";
+ superTableMeta = SuperTableMetaGenerator.generate(sql);
+ } else {
+ // create super table with specified field size and tag size
+ superTableMeta = SuperTableMetaGenerator.generate(config.database, config.superTable, config.numOfFields, config.prefixOfFields, config.numOfTags, config.prefixOfTags);
+ }
+ /**********************************************************************************/
+ // 建表
+ start = System.currentTimeMillis();
+ if (config.doCreateTable) {
+ superTableService.drop(superTableMeta.getDatabase(), superTableMeta.getName());
+ superTableService.create(superTableMeta);
+ if (!config.autoCreateTable) {
+ // 批量建子表
+ subTableService.createSubTable(superTableMeta, config.numOfTables, config.prefixOfTable, config.numOfThreadsForCreate);
+ }
+ }
+ end = System.currentTimeMillis();
+ logger.error(">>> create table time cost : " + (end - start) + " ms.");
+ /**********************************************************************************/
+ // 插入
+ long tableSize = config.numOfTables;
+ int threadSize = config.numOfThreadsForInsert;
+ long startTime = getProperStartTime(config.startTime, config.keep);
+
+ if (tableSize < threadSize)
+ threadSize = (int) tableSize;
+ long gap = (long) Math.ceil((0.0d + tableSize) / threadSize);
+
+ start = System.currentTimeMillis();
+ // multi threads to insert
+ int affectedRows = subTableService.insertMultiThreads(superTableMeta, threadSize, tableSize, startTime, gap, config);
+ end = System.currentTimeMillis();
+ logger.error("insert " + affectedRows + " rows, time cost: " + (end - start) + " ms");
+ /**********************************************************************************/
+ // 删除表
+ if (config.dropTable) {
+ superTableService.drop(config.database, config.superTable);
+ }
+ System.exit(0);
+ }
+
+ private static long getProperStartTime(long startTime, int keep) {
+ Instant now = Instant.now();
+ long earliest = now.minus(Duration.ofDays(keep - 1)).toEpochMilli();
+ if (startTime == 0 || startTime < earliest) {
+ startTime = earliest;
+ }
+ return startTime;
+ }
+
+
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosdemoApplication.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosdemoApplication.java
deleted file mode 100644
index db1b20527d88f5bca24ed5c6a3b477fa3a71bdf1..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosdemoApplication.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.taosdata.taosdemo;
-
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@MapperScan(basePackages = {"com.taosdata.taosdemo.mapper"})
-@SpringBootApplication
-public class TaosdemoApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(TaosdemoApplication.class, args);
- }
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..c96d6f8bed68e9bb67d959ddb1d7531b4cbadeb3
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java
@@ -0,0 +1,63 @@
+package com.taosdata.taosdemo.components;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+@Component
+public class DataSourceFactory {
+
+ private static DataSource instance;
+
+ public static DataSource getInstance(String host, int port, String user, String password) throws IOException {
+ if (instance == null) {
+ synchronized (DataSourceFactory.class) {
+ if (instance == null) {
+ InputStream is = DataSourceFactory.class.getClassLoader().getResourceAsStream("application.properties");
+ Properties properties = new Properties();
+ properties.load(is);
+
+ HikariConfig config = new HikariConfig();
+
+ if (properties.containsKey("jdbc.driver")) {
+// String driverName = properties.getProperty("jdbc.driver");
+// System.out.println(">>> load driver : " + driverName);
+// try {
+// Class.forName(driverName);
+// } catch (ClassNotFoundException e) {
+// e.printStackTrace();
+// }
+ config.setDriverClassName(properties.getProperty("jdbc.driver"));
+ } else {
+ config.setDriverClassName("com.taosdata.jdbc.TSDBDriver");
+ }
+ if ("com.taosdata.jdbc.rs.RestfulDriver".equalsIgnoreCase(properties.getProperty("jdbc.driver")))
+ config.setJdbcUrl("jdbc:TAOS-RS://" + host + ":6041/?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8");
+ else
+ config.setJdbcUrl("jdbc:TAOS://" + host + ":" + port + "/?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8");
+ config.setUsername(user);
+ config.setPassword(password);
+ // maximum-pool-size
+ if (properties.containsKey("hikari.maximum-pool-size"))
+ config.setMaximumPoolSize(Integer.parseInt(properties.getProperty("hikari.maximum-pool-size")));
+ else
+ config.setMaximumPoolSize(500);
+ // minimum-idle
+ if (properties.containsKey("hikari.minimum-idle"))
+ config.setMinimumIdle(Integer.parseInt(properties.getProperty("hikari.minimum-idle")));
+ else
+ config.setMinimumIdle(100);
+ config.setMaxLifetime(0);
+ instance = new HikariDataSource(config);
+ }
+ }
+ }
+ return instance;
+ }
+
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/JdbcTaosdemoConfig.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
similarity index 83%
rename from tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/JdbcTaosdemoConfig.java
rename to tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
index 4e6f64033012ca402d4a07787ef71a0525b25acb..971c10dee2889543e95a70b244ea3cda462df3a6 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/JdbcTaosdemoConfig.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
@@ -1,4 +1,6 @@
-package com.taosdata.taosdemo.utils;
+package com.taosdata.taosdemo.components;
+
+import com.taosdata.taosdemo.utils.TimeStampUtil;
public final class JdbcTaosdemoConfig {
// instance
@@ -7,10 +9,14 @@ public final class JdbcTaosdemoConfig {
public String user = "root"; //user
public String password = "taosdata"; //password
// database
- public String database = "test"; //database
+ public String database = "jdbcdb"; //database
public int keep = 3650; //keep
public int days = 30; //days
public int replica = 1; //replica
+ public int blocks = 16;
+ public int cache = 8;
+ public String precision = "ms";
+
//super table
public boolean doCreateTable = true;
public String superTable = "weather"; //super table name
@@ -20,19 +26,19 @@ public final class JdbcTaosdemoConfig {
public int numOfTags;
public String superTableSQL;
//sub table
- public String tablePrefix = "t";
- public int numOfTables = 100;
- public int numOfThreadsForCreate = 1;
+ public String prefixOfTable = "t";
// insert task
public boolean autoCreateTable;
- public int numOfRowsPerTable = 100;
+ public long numOfTables = 10;
+ public long numOfRowsPerTable = 10;
+ public int numOfTablesPerSQL = 1;
+ public int numOfValuesPerSQL = 1;
+ public int numOfThreadsForCreate = 1;
public int numOfThreadsForInsert = 1;
- public int numOfTablesPerSQL = 10;
- public int numOfValuesPerSQL = 10;
public long startTime;
- public long timeGap;
- public int sleep = 0;
- public int order = 0;
+ public long timeGap = 1;
+ public int frequency;
+ public int order;
public int rate = 10;
public long range = 1000l;
// select task
@@ -48,10 +54,14 @@ public final class JdbcTaosdemoConfig {
System.out.println("-user The TDengine user name to use when connecting to the server. Default is 'root'");
System.out.println("-password The password to use when connecting to the server.Default is 'taosdata'");
// database
- System.out.println("-database Destination database. Default is 'test'");
+ System.out.println("-database Destination database. Default is 'jdbcdb'");
System.out.println("-keep database keep parameter. Default is 3650");
System.out.println("-days database days parameter. Default is 30");
System.out.println("-replica database replica parameter. Default 1, min: 1, max: 3");
+ System.out.println("-blocks database blocks parameter. Default is 16");
+ System.out.println("-cache database cache parameter. Default is 8");
+ System.out.println("-precision database precision parameter. Default is ms");
+
// super table
System.out.println("-doCreateTable do create super table and sub table, true or false, Default true");
System.out.println("-superTable super table name. Default 'weather'");
@@ -63,7 +73,7 @@ public final class JdbcTaosdemoConfig {
" Default is 'create table weather(ts timestamp, temperature float, humidity int) tags(location nchar(64), groupId int). \n" +
" if you use this parameter, the numOfFields and numOfTags will be invalid'");
// sub table
- System.out.println("-tablePrefix The prefix of sub tables. Default is 't'");
+ System.out.println("-prefixOfTable The prefix of sub tables. Default is 't'");
System.out.println("-numOfTables The number of tables. Default is 1");
System.out.println("-numOfThreadsForCreate The number of thread during create sub table. Default is 1");
// insert task
@@ -74,11 +84,10 @@ public final class JdbcTaosdemoConfig {
System.out.println("-numOfValuesPerSQL The number of value per SQL. Default is 1");
System.out.println("-startTime start time for insert task, The format is \"yyyy-MM-dd HH:mm:ss.SSS\".");
System.out.println("-timeGap the number of time gap. Default is 1000 ms");
- System.out.println("-sleep The number of milliseconds for sleep after each insert. default is 0");
+ System.out.println("-frequency the number of records per second inserted into one table. default is 0, do not control frequency");
System.out.println("-order Insert mode--0: In order, 1: Out of order. Default is in order");
System.out.println("-rate The proportion of data out of order. effective only if order is 1. min 0, max 100, default is 10");
System.out.println("-range The range of data out of order. effective only if order is 1. default is 1000 ms");
-
// query task
// System.out.println("-sqlFile The select sql file");
// drop task
@@ -120,6 +129,15 @@ public final class JdbcTaosdemoConfig {
if ("-replica".equals(args[i]) && i < args.length - 1) {
replica = Integer.parseInt(args[++i]);
}
+ if ("-blocks".equals(args[i]) && i < args.length - 1) {
+ blocks = Integer.parseInt(args[++i]);
+ }
+ if ("-cache".equals(args[i]) && i < args.length - 1) {
+ cache = Integer.parseInt(args[++i]);
+ }
+ if ("-precision".equals(args[i]) && i < args.length - 1) {
+ precision = args[++i];
+ }
// super table
if ("-doCreateTable".equals(args[i]) && i < args.length - 1) {
doCreateTable = Boolean.parseBoolean(args[++i]);
@@ -143,11 +161,11 @@ public final class JdbcTaosdemoConfig {
superTableSQL = args[++i];
}
// sub table
- if ("-tablePrefix".equals(args[i]) && i < args.length - 1) {
- tablePrefix = args[++i];
+ if ("-prefixOfTable".equals(args[i]) && i < args.length - 1) {
+ prefixOfTable = args[++i];
}
if ("-numOfTables".equals(args[i]) && i < args.length - 1) {
- numOfTables = Integer.parseInt(args[++i]);
+ numOfTables = Long.parseLong(args[++i]);
}
if ("-autoCreateTable".equals(args[i]) && i < args.length - 1) {
autoCreateTable = Boolean.parseBoolean(args[++i]);
@@ -157,7 +175,7 @@ public final class JdbcTaosdemoConfig {
}
// insert task
if ("-numOfRowsPerTable".equals(args[i]) && i < args.length - 1) {
- numOfRowsPerTable = Integer.parseInt(args[++i]);
+ numOfRowsPerTable = Long.parseLong(args[++i]);
}
if ("-numOfThreadsForInsert".equals(args[i]) && i < args.length - 1) {
numOfThreadsForInsert = Integer.parseInt(args[++i]);
@@ -174,8 +192,8 @@ public final class JdbcTaosdemoConfig {
if ("-timeGap".equals(args[i]) && i < args.length - 1) {
timeGap = Long.parseLong(args[++i]);
}
- if ("-sleep".equals(args[i]) && i < args.length - 1) {
- sleep = Integer.parseInt(args[++i]);
+ if ("-frequency".equals(args[i]) && i < args.length - 1) {
+ frequency = Integer.parseInt(args[++i]);
}
if ("-order".equals(args[i]) && i < args.length - 1) {
order = Integer.parseInt(args[++i]);
@@ -197,8 +215,4 @@ public final class JdbcTaosdemoConfig {
}
}
- public static void main(String[] args) {
- JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
- }
-
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c44610095f4b383f82a74dfdc11030a28afb246
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java
@@ -0,0 +1,39 @@
+package com.taosdata.taosdemo.components;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class JsonConfig {
+
+ public static void main(String[] args) {
+
+ JsonConfig config = new JsonConfig();
+ String str = config.read("insert.json");
+ JSONObject jsonObject = JSONObject.parseObject(str);
+ System.out.println(jsonObject);
+
+ }
+
+ private String read(String fileName) {
+ try {
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(JsonConfig.class.getClassLoader().getResourceAsStream(fileName))
+ );
+ StringBuilder sb = new StringBuilder();
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ sb.append(line);
+ }
+ return sb.toString();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return fileName;
+ }
+
+
+}
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/TaosDemoCommandLineRunner.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/TaosDemoCommandLineRunner.java
deleted file mode 100644
index e58c68f7a5f60b57f064075c4004267918526b15..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/TaosDemoCommandLineRunner.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package com.taosdata.taosdemo.components;
-
-import com.taosdata.taosdemo.domain.*;
-import com.taosdata.taosdemo.service.DatabaseService;
-import com.taosdata.taosdemo.service.SubTableService;
-import com.taosdata.taosdemo.service.SuperTableService;
-import com.taosdata.taosdemo.service.data.SubTableMetaGenerator;
-import com.taosdata.taosdemo.service.data.SubTableValueGenerator;
-import com.taosdata.taosdemo.service.data.SuperTableMetaGenerator;
-import com.taosdata.taosdemo.utils.JdbcTaosdemoConfig;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-
-@Component
-public class TaosDemoCommandLineRunner implements CommandLineRunner {
-
- private static Logger logger = Logger.getLogger(TaosDemoCommandLineRunner.class);
- @Autowired
- private DatabaseService databaseService;
- @Autowired
- private SuperTableService superTableService;
- @Autowired
- private SubTableService subTableService;
-
- private SuperTableMeta superTableMeta;
- private List subTableMetaList;
- private List subTableValueList;
- private List> dataList;
-
-
- @Override
- public void run(String... args) throws Exception {
- // 读配置参数
- JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
- boolean isHelp = Arrays.asList(args).contains("--help");
- if (isHelp) {
- JdbcTaosdemoConfig.printHelp();
- System.exit(0);
- }
- // 准备数据
- prepareData(config);
- // 创建数据库
- createDatabaseTask(config);
- // 建表
- createTableTask(config);
- // 插入
- insertTask(config);
- // 查询: 1. 生成查询语句, 2. 执行查询
- // 删除表
- if (config.dropTable) {
- superTableService.drop(config.database, config.superTable);
- }
-
- System.exit(0);
- }
-
- private void createDatabaseTask(JdbcTaosdemoConfig config) {
- long start = System.currentTimeMillis();
-
- Map databaseParam = new HashMap<>();
- databaseParam.put("database", config.database);
- databaseParam.put("keep", Integer.toString(config.keep));
- databaseParam.put("days", Integer.toString(config.days));
- databaseParam.put("replica", Integer.toString(config.replica));
- //TODO: other database parameters
- databaseService.dropDatabase(config.database);
- databaseService.createDatabase(databaseParam);
- databaseService.useDatabase(config.database);
-
- long end = System.currentTimeMillis();
- logger.info(">>> insert time cost : " + (end - start) + " ms.");
- }
-
- // 建超级表,三种方式:1. 指定SQL,2. 指定field和tags的个数,3. 默认
- private void createTableTask(JdbcTaosdemoConfig config) {
- long start = System.currentTimeMillis();
- if (config.doCreateTable) {
- superTableService.create(superTableMeta);
- // 批量建子表
- subTableService.createSubTable(subTableMetaList, config.numOfThreadsForCreate);
- }
- long end = System.currentTimeMillis();
- logger.info(">>> create table time cost : " + (end - start) + " ms.");
- }
-
- private void insertTask(JdbcTaosdemoConfig config) {
- long start = System.currentTimeMillis();
-
- int numOfThreadsForInsert = config.numOfThreadsForInsert;
- int sleep = config.sleep;
- if (config.autoCreateTable) {
- // 批量插入,自动建表
- dataList.stream().forEach(subTableValues -> {
- subTableService.insertAutoCreateTable(subTableValues, numOfThreadsForInsert);
- sleep(sleep);
- });
- } else {
- dataList.stream().forEach(subTableValues -> {
- subTableService.insert(subTableValues, numOfThreadsForInsert);
- sleep(sleep);
- });
- }
- long end = System.currentTimeMillis();
- logger.info(">>> insert time cost : " + (end - start) + " ms.");
- }
-
- private void prepareData(JdbcTaosdemoConfig config) {
- long start = System.currentTimeMillis();
- // 超级表的meta
- superTableMeta = createSupertable(config);
- // 子表的meta
- subTableMetaList = SubTableMetaGenerator.generate(superTableMeta, config.numOfTables, config.tablePrefix);
- // 子表的data
- subTableValueList = SubTableValueGenerator.generate(subTableMetaList, config.numOfRowsPerTable, config.startTime, config.timeGap);
- // 如果有乱序,给数据搞乱
- if (config.order != 0) {
- SubTableValueGenerator.disrupt(subTableValueList, config.rate, config.range);
- }
- // 分割数据
- int numOfTables = config.numOfTables;
- int numOfTablesPerSQL = config.numOfTablesPerSQL;
- int numOfRowsPerTable = config.numOfRowsPerTable;
- int numOfValuesPerSQL = config.numOfValuesPerSQL;
- dataList = SubTableValueGenerator.split(subTableValueList, numOfTables, numOfTablesPerSQL, numOfRowsPerTable, numOfValuesPerSQL);
- long end = System.currentTimeMillis();
- logger.info(">>> prepare data time cost : " + (end - start) + " ms.");
- }
-
- private SuperTableMeta createSupertable(JdbcTaosdemoConfig config) {
- SuperTableMeta tableMeta;
- // create super table
- logger.info(">>> create super table <<<");
- if (config.superTableSQL != null) {
- // use a sql to create super table
- tableMeta = SuperTableMetaGenerator.generate(config.superTableSQL);
- } else if (config.numOfFields == 0) {
- // default sql = "create table test.weather (ts timestamp, temperature float, humidity int) tags(location nchar(64), groupId int)";
- SuperTableMeta superTableMeta = new SuperTableMeta();
- superTableMeta.setDatabase(config.database);
- superTableMeta.setName(config.superTable);
- List fields = new ArrayList<>();
- fields.add(new FieldMeta("ts", "timestamp"));
- fields.add(new FieldMeta("temperature", "float"));
- fields.add(new FieldMeta("humidity", "int"));
- superTableMeta.setFields(fields);
- List tags = new ArrayList<>();
- tags.add(new TagMeta("location", "nchar(64)"));
- tags.add(new TagMeta("groupId", "int"));
- superTableMeta.setTags(tags);
- return superTableMeta;
- } else {
- // create super table with specified field size and tag size
- tableMeta = SuperTableMetaGenerator.generate(config.database, config.superTable, config.numOfFields, config.prefixOfFields, config.numOfTags, config.prefixOfTags);
- }
- return tableMeta;
- }
-
- private static void sleep(int sleep) {
- if (sleep <= 0)
- return;
- try {
- TimeUnit.MILLISECONDS.sleep(sleep);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/DatabaseController.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/DatabaseController.java
deleted file mode 100644
index 1cf1463f0ab4f2a8c67258f512e407d54c1d869e..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/DatabaseController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.taosdata.taosdemo.controller;
-
-import com.taosdata.taosdemo.service.DatabaseService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Map;
-
-@RestController
-@RequestMapping
-public class DatabaseController {
-
- @Autowired
- private DatabaseService databaseService;
-
- /**
- * create database
- ***/
- @PostMapping
- public int create(@RequestBody Map map) {
- return databaseService.createDatabase(map);
- }
-
-
- /**
- * drop database
- **/
- @DeleteMapping("/{dbname}")
- public int delete(@PathVariable("dbname") String dbname) {
- return databaseService.dropDatabase(dbname);
- }
-
- /**
- * use database
- **/
- @GetMapping("/{dbname}")
- public int use(@PathVariable("dbname") String dbname) {
- return databaseService.useDatabase(dbname);
- }
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/InsertController.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/InsertController.java
deleted file mode 100644
index 788f68a30af5ac7dd4c8c27f4cfe5f1a6f2b440b..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/InsertController.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.taosdata.taosdemo.controller;
-
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-public class InsertController {
-
- //TODO:多线程写一张表, thread = 10, table = 1
- //TODO:一个批次写多张表, insert into t1 using weather values() t2 using weather values()
- //TODO:插入的频率,
- //TODO:指定一张表内的records数量
- //TODO:是否乱序,
- //TODO:乱序的比例,乱序的范围
- //TODO:先建表,自动建表
- //TODO:一个批次写多张表
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SubTableController.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SubTableController.java
deleted file mode 100644
index 797c3708d3357c19bf5f64046bb794b66786e080..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SubTableController.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.taosdata.taosdemo.controller;
-
-import com.taosdata.taosdemo.domain.TableValue;
-import com.taosdata.taosdemo.service.SuperTableService;
-import com.taosdata.taosdemo.service.TableService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-public class SubTableController {
-
- @Autowired
- private TableService tableService;
- @Autowired
- private SuperTableService superTableService;
-
- //TODO: 使用supertable创建一个子表
-
- //TODO:使用supertable创建多个子表
-
- //TODO:使用supertable多线程创建子表
-
- //TODO:使用supertable多线程创建子表,指定子表的name_prefix,子表的数量,使用线程的个数
-
- /**
- * 创建表,超级表或者普通表
- **/
-
-
- /**
- * 创建超级表的子表
- **/
- @PostMapping("/{database}/{superTable}")
- public int createTable(@PathVariable("database") String database,
- @PathVariable("superTable") String superTable,
- @RequestBody TableValue tableMetadta) {
- tableMetadta.setDatabase(database);
- return 0;
- }
-
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SuperTableController.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SuperTableController.java
deleted file mode 100644
index cf53c1440fa710c3bea510973ca2efecb0705828..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/SuperTableController.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.taosdata.taosdemo.controller;
-
-import com.taosdata.taosdemo.domain.SuperTableMeta;
-import com.taosdata.taosdemo.service.SuperTableService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-public class SuperTableController {
- @Autowired
- private SuperTableService superTableService;
-
-
- @PostMapping("/{database}")
- public int createTable(@PathVariable("database") String database, @RequestBody SuperTableMeta tableMetadta) {
- tableMetadta.setDatabase(database);
- return superTableService.create(tableMetadta);
- }
-
- //TODO: 删除超级表
-
- //TODO:查询超级表
-
- //TODO:统计查询表
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/TableController.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/TableController.java
deleted file mode 100644
index dbdd978e746eb89d8927617ae4026cdcf544559b..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/controller/TableController.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.taosdata.taosdemo.controller;
-
-public class TableController {
-
- //TODO:创建普通表,create table(ts timestamp, temperature float)
-
- //TODO:创建普通表,指定表的列数,包括第一列timestamp
-
- //TODO:创建普通表,指定表每列的name和type
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..56e38d2bfce8ba5801d0f8dc48093d198852fbca
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java
@@ -0,0 +1,23 @@
+package com.taosdata.taosdemo.dao;
+
+import java.util.Map;
+
+public interface DatabaseMapper {
+
+ // create database if not exists XXX
+ void createDatabase(String dbname);
+
+ // drop database if exists XXX
+ void dropDatabase(String dbname);
+
+ // create database if not exists XXX keep XX days XX replica XX
+ void createDatabaseWithParameters(Map map);
+
+ // use XXX
+ void useDatabase(String dbname);
+
+ //TODO: alter database
+
+ //TODO: show database
+
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..69bae160f6285bb9d1a94357cc2279ebfca22eca
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java
@@ -0,0 +1,47 @@
+package com.taosdata.taosdemo.dao;
+
+import com.taosdata.taosdemo.utils.SqlSpeller;
+import org.apache.log4j.Logger;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+public class DatabaseMapperImpl implements DatabaseMapper {
+ private static final Logger logger = Logger.getLogger(DatabaseMapperImpl.class);
+
+ private final JdbcTemplate jdbcTemplate;
+
+ public DatabaseMapperImpl(DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+
+ @Override
+ public void createDatabase(String dbname) {
+ String sql = "create database if not exists " + dbname;
+ jdbcTemplate.execute(sql);
+ logger.info("SQL >>> " + sql);
+ }
+
+ @Override
+ public void dropDatabase(String dbname) {
+ String sql = "drop database if exists " + dbname;
+ jdbcTemplate.update(sql);
+ logger.info("SQL >>> " + sql);
+ }
+
+ @Override
+ public void createDatabaseWithParameters(Map map) {
+ String sql = SqlSpeller.createDatabase(map);
+ jdbcTemplate.execute(sql);
+ logger.info("SQL >>> " + sql);
+ }
+
+ @Override
+ public void useDatabase(String dbname) {
+ String sql = "use " + dbname;
+ jdbcTemplate.execute(sql);
+ logger.info("SQL >>> " + sql);
+ }
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java
similarity index 67%
rename from tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.java
rename to tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java
index d23473ba313899eee04f07f5c06177a2d55f6295..e0ddd220c19066afd1cc332f007a82e2fdab2b07 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java
@@ -1,8 +1,7 @@
-package com.taosdata.taosdemo.mapper;
+package com.taosdata.taosdemo.dao;
import com.taosdata.taosdemo.domain.SubTableMeta;
import com.taosdata.taosdemo.domain.SubTableValue;
-import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -11,7 +10,7 @@ import java.util.List;
public interface SubTableMapper {
// 创建:子表
- int createUsingSuperTable(SubTableMeta subTableMeta);
+ void createUsingSuperTable(SubTableMeta subTableMeta);
// 插入:一张子表多个values
int insertOneTableMultiValues(SubTableValue subTableValue);
@@ -20,10 +19,10 @@ public interface SubTableMapper {
int insertOneTableMultiValuesUsingSuperTable(SubTableValue subTableValue);
// 插入:多张表多个values
- int insertMultiTableMultiValues(@Param("tables") List tables);
+ int insertMultiTableMultiValues(List tables);
// 插入:多张表多个values,自动建表
- int insertMultiTableMultiValuesUsingSuperTable(@Param("tables") List tables);
+ int insertMultiTableMultiValuesUsingSuperTable(List tables);
//
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3a6691430f8b5232660ed6edeab01318db30ef1
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java
@@ -0,0 +1,81 @@
+package com.taosdata.taosdemo.dao;
+
+import com.taosdata.taosdemo.domain.SubTableMeta;
+import com.taosdata.taosdemo.domain.SubTableValue;
+import com.taosdata.taosdemo.utils.SqlSpeller;
+import org.apache.log4j.Logger;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+public class SubTableMapperImpl implements SubTableMapper {
+
+ private static final Logger logger = Logger.getLogger(SubTableMapperImpl.class);
+ private final JdbcTemplate jdbcTemplate;
+
+ public SubTableMapperImpl(DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+ @Override
+ public void createUsingSuperTable(SubTableMeta subTableMeta) {
+ String sql = SqlSpeller.createTableUsingSuperTable(subTableMeta);
+ logger.info("SQL >>> " + sql);
+ jdbcTemplate.execute(sql);
+ }
+
+ @Override
+ public int insertOneTableMultiValues(SubTableValue subTableValue) {
+ String sql = SqlSpeller.insertOneTableMultiValues(subTableValue);
+ logger.info("SQL >>> " + sql);
+
+ int affectRows = 0;
+ try {
+ affectRows = jdbcTemplate.update(sql);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return affectRows;
+ }
+
+ @Override
+ public int insertOneTableMultiValuesUsingSuperTable(SubTableValue subTableValue) {
+ String sql = SqlSpeller.insertOneTableMultiValuesUsingSuperTable(subTableValue);
+ logger.info("SQL >>> " + sql);
+
+ int affectRows = 0;
+ try {
+ affectRows = jdbcTemplate.update(sql);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return affectRows;
+ }
+
+ @Override
+ public int insertMultiTableMultiValues(List tables) {
+ String sql = SqlSpeller.insertMultiSubTableMultiValues(tables);
+ logger.info("SQL >>> " + sql);
+ int affectRows = 0;
+ try {
+ affectRows = jdbcTemplate.update(sql);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return affectRows;
+ }
+
+ @Override
+ public int insertMultiTableMultiValuesUsingSuperTable(List tables) {
+ String sql = SqlSpeller.insertMultiTableMultiValuesUsingSuperTable(tables);
+ logger.info("SQL >>> " + sql);
+ int affectRows = 0;
+ try {
+ affectRows = jdbcTemplate.update(sql);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return affectRows;
+ }
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java
similarity index 70%
rename from tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.java
rename to tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java
index c8610fac901efa907971d700bd9956cac264236f..9f8cec9e8fa5af8741d9efbdce72f240aa7a09aa 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java
@@ -1,20 +1,16 @@
-package com.taosdata.taosdemo.mapper;
+package com.taosdata.taosdemo.dao;
import com.taosdata.taosdemo.domain.SuperTableMeta;
-import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface SuperTableMapper {
- // 创建超级表,使用自己定义的SQL语句
- int createSuperTableUsingSQL(@Param("createSuperTableSQL") String sql);
-
// 创建超级表 create table if not exists xxx.xxx (f1 type1, f2 type2, ... ) tags( t1 type1, t2 type2 ...)
- int createSuperTable(SuperTableMeta tableMetadata);
+ void createSuperTable(SuperTableMeta tableMetadata);
// 删除超级表 drop table if exists xxx;
- int dropSuperTable(@Param("database") String database, @Param("name") String name);
+ void dropSuperTable(String database, String name);
//
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a293de5100d9af33bc88ad5f02ae632333a5b5b8
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java
@@ -0,0 +1,31 @@
+package com.taosdata.taosdemo.dao;
+
+import com.taosdata.taosdemo.domain.SuperTableMeta;
+import com.taosdata.taosdemo.utils.SqlSpeller;
+import org.apache.log4j.Logger;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+public class SuperTableMapperImpl implements SuperTableMapper {
+ private static final Logger logger = Logger.getLogger(SuperTableMapperImpl.class);
+ private JdbcTemplate jdbcTemplate;
+
+ public SuperTableMapperImpl(DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+ @Override
+ public void createSuperTable(SuperTableMeta tableMetadata) {
+ String sql = SqlSpeller.createSuperTable(tableMetadata);
+ logger.info("SQL >>> " + sql);
+ jdbcTemplate.execute(sql);
+ }
+
+ @Override
+ public void dropSuperTable(String database, String name) {
+ String sql = "drop table if exists " + database + "." + name;
+ logger.info("SQL >>> " + sql);
+ jdbcTemplate.execute(sql);
+ }
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java
similarity index 65%
rename from tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.java
rename to tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java
index f00f6c96941d47258d91a34ffeb1de99c4c8435e..32d1875e4d1a82f7dfb658d68ed0e63a5cbfa040 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java
@@ -1,8 +1,7 @@
-package com.taosdata.taosdemo.mapper;
+package com.taosdata.taosdemo.dao;
import com.taosdata.taosdemo.domain.TableMeta;
import com.taosdata.taosdemo.domain.TableValue;
-import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -11,7 +10,7 @@ import java.util.List;
public interface TableMapper {
// 创建:普通表
- int create(TableMeta tableMeta);
+ void create(TableMeta tableMeta);
// 插入:一张表多个value
int insertOneTableMultiValues(TableValue values);
@@ -20,9 +19,9 @@ public interface TableMapper {
int insertOneTableMultiValuesWithColumns(TableValue values);
// 插入:多个表多个value
- int insertMultiTableMultiValues(@Param("tables") List tables);
+ int insertMultiTableMultiValues(List tables);
// 插入:多个表多个value, 指定的列
- int insertMultiTableMultiValuesWithColumns(@Param("tables") List tables);
+ int insertMultiTableMultiValuesWithColumns(List tables);
}
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..77415619f02a1a0650448e9a8856fcb8d33e4921
--- /dev/null
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java
@@ -0,0 +1,43 @@
+package com.taosdata.taosdemo.dao;
+
+import com.taosdata.taosdemo.dao.TableMapper;
+import com.taosdata.taosdemo.domain.TableMeta;
+import com.taosdata.taosdemo.domain.TableValue;
+import com.taosdata.taosdemo.utils.SqlSpeller;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.List;
+
+public class TableMapperImpl implements TableMapper {
+ private JdbcTemplate template;
+
+ @Override
+ public void create(TableMeta tableMeta) {
+ String sql = SqlSpeller.createTable(tableMeta);
+ template.execute(sql);
+ }
+
+ @Override
+ public int insertOneTableMultiValues(TableValue values) {
+ String sql = SqlSpeller.insertOneTableMultiValues(values);
+ return template.update(sql);
+ }
+
+ @Override
+ public int insertOneTableMultiValuesWithColumns(TableValue values) {
+ String sql = SqlSpeller.insertOneTableMultiValuesWithColumns(values);
+ return template.update(sql);
+ }
+
+ @Override
+ public int insertMultiTableMultiValues(List tables) {
+ String sql = SqlSpeller.insertMultiTableMultiValues(tables);
+ return template.update(sql);
+ }
+
+ @Override
+ public int insertMultiTableMultiValuesWithColumns(List tables) {
+ String sql = SqlSpeller.insertMultiTableMultiValuesWithColumns(tables);
+ return template.update(sql);
+ }
+}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java
index a9f216f6792820931af4570450318ddc53e3c8b7..a444fa78dcdeb8f1bb76974a29051c98348a055b 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java
@@ -8,7 +8,6 @@ import java.util.List;
public class RowValue {
private List fields;
-
public RowValue(List fields) {
this.fields = fields;
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.java
deleted file mode 100644
index e535ed1f985d37688c8461e1f0bef3a803f541d4..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.taosdata.taosdemo.mapper;
-
-import org.apache.ibatis.annotations.Param;
-import org.springframework.stereotype.Repository;
-
-import java.util.Map;
-
-@Repository
-public interface DatabaseMapper {
-
- // create database if not exists XXX
- int createDatabase(@Param("database") String dbname);
-
- // drop database if exists XXX
- int dropDatabase(@Param("database") String dbname);
-
- // create database if not exists XXX keep XX days XX replica XX
- int createDatabaseWithParameters(Map map);
-
- // use XXX
- int useDatabase(@Param("database") String dbname);
-
- //TODO: alter database
-
- //TODO: show database
-
-}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.xml b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.xml
deleted file mode 100644
index 1a1de348428ae63ad16f9988f535f339f61d8c25..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/DatabaseMapper.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
- create database if not exists ${database}
-
-
-
- DROP database if exists ${database}
-
-
-
- CREATE database if not exists ${database}
-
- KEEP ${keep}
-
-
- DAYS ${days}
-
-
- REPLICA ${replica}
-
-
- cache ${cache}
-
-
- blocks ${blocks}
-
-
- minrows ${minrows}
-
-
- maxrows ${maxrows}
-
-
-
-
- use ${database}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.xml b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.xml
deleted file mode 100644
index 2fb94e99b77623ab8731c03f398058dbdc459d07..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SubTableMapper.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
- CREATE table IF NOT EXISTS ${database}.${name} USING ${supertable} TAGS
-
- #{tag.value}
-
-
-
-
-
- INSERT INTO ${database}.${name}
- VALUES
-
-
- #{field.value}
-
-
-
-
-
-
- INSERT INTO ${database}.${name} USING ${supertable} TAGS
-
- #{tag.value}
-
- VALUES
-
-
- #{field.value}
-
-
-
-
-
-
-
-
-
-
- INSERT INTO
-
- ${table.database}.${table.name}
- VALUES
-
-
- #{field.value}
-
-
-
-
-
-
-
- INSERT INTO
-
- ${table.database}.${table.name} USING ${table.supertable} TAGS
-
- #{tag.value}
-
- VALUES
-
-
- #{field.value}
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.xml b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.xml
deleted file mode 100644
index 8b83d57a4bcbf7a2a6b3f69911b3accc61064480..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/SuperTableMapper.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
- ${createSuperTableSQL}
-
-
-
-
- create table if not exists ${database}.${name}
-
- ${field.name} ${field.type}
-
- tags
-
- ${tag.name} ${tag.type}
-
-
-
-
-
- drop table if exists ${database}.${name}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.xml b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.xml
deleted file mode 100644
index e2e7cbb30def21f88ec7615b7a6dd4a769cb643a..0000000000000000000000000000000000000000
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/mapper/TableMapper.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
- create table if not exists ${database}.${name}
-
- ${field.name} ${field.type}
-
-
-
-
-
- insert into ${database}.${name} values
-
-
- ${field.value}
-
-
-
-
-
-
- insert into ${database}.${name}
-
- ${column.name}
-
- values
-
-
- ${field.value}
-
-
-
-
-
-
- insert into
-
- ${table.database}.${table.name} values
-
-
- ${field.value}
-
-
-
-
-
-
-
- insert into
-
- ${table.database}.${table.name}
-
- ${column.name}
-
- values
-
-
- ${field.value}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java
index e9aa2727a06ade0ff3d7661f84977c64f64ea9af..3c8e9624066bf629a74ebcaa3959a2e15338c363 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java
@@ -1,38 +1,42 @@
package com.taosdata.taosdemo.service;
-import com.taosdata.taosdemo.mapper.DatabaseMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.taosdata.taosdemo.dao.DatabaseMapper;
+import com.taosdata.taosdemo.dao.DatabaseMapperImpl;
+import javax.sql.DataSource;
import java.util.Map;
-@Service
public class DatabaseService {
- @Autowired
- private DatabaseMapper databaseMapper;
+ private final DatabaseMapper databaseMapper;
+
+ public DatabaseService(DataSource dataSource) {
+ this.databaseMapper = new DatabaseMapperImpl(dataSource);
+ }
// 建库,指定 name
- public int createDatabase(String database) {
- return databaseMapper.createDatabase(database);
+ public void createDatabase(String database) {
+ databaseMapper.createDatabase(database);
}
// 建库,指定参数 keep,days,replica等
- public int createDatabase(Map map) {
+ public void createDatabase(Map map) {
if (map.isEmpty())
- return 0;
- if (map.containsKey("database") && map.size() == 1)
- return databaseMapper.createDatabase(map.get("database"));
- return databaseMapper.createDatabaseWithParameters(map);
+ return;
+ if (map.containsKey("database") && map.size() == 1) {
+ createDatabase(map.get("database"));
+ return;
+ }
+ databaseMapper.createDatabaseWithParameters(map);
}
// drop database
- public int dropDatabase(String dbname) {
- return databaseMapper.dropDatabase(dbname);
+ public void dropDatabase(String dbname) {
+ databaseMapper.dropDatabase(dbname);
}
// use database
- public int useDatabase(String dbname) {
- return databaseMapper.useDatabase(dbname);
+ public void useDatabase(String dbname) {
+ databaseMapper.useDatabase(dbname);
}
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java
index 07c315b65a9e07222fe85066c3f1f3b1edb107fe..cea98a1c5d350ed22ed5d26c72fedb212dcb7f26 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java
@@ -1,68 +1,63 @@
package com.taosdata.taosdemo.service;
+import com.taosdata.taosdemo.components.JdbcTaosdemoConfig;
+import com.taosdata.taosdemo.dao.SubTableMapper;
+import com.taosdata.taosdemo.dao.SubTableMapperImpl;
import com.taosdata.taosdemo.domain.SubTableMeta;
import com.taosdata.taosdemo.domain.SubTableValue;
-import com.taosdata.taosdemo.mapper.SubTableMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.taosdata.taosdemo.domain.SuperTableMeta;
+import com.taosdata.taosdemo.service.data.SubTableMetaGenerator;
+import com.taosdata.taosdemo.service.data.SubTableValueGenerator;
+import org.apache.log4j.Logger;
+import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
+import java.util.concurrent.*;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
-@Service
public class SubTableService extends AbstractService {
- @Autowired
private SubTableMapper mapper;
+ private static final Logger logger = Logger.getLogger(SubTableService.class);
- /**
- * 1. 选择database,找到所有supertable
- * 2. 选择supertable,可以拿到表结构,包括field和tag
- * 3. 指定子表的前缀和个数
- * 4. 指定创建子表的线程数
- */
- //TODO:指定database、supertable、子表前缀、子表个数、线程数
+ public SubTableService(DataSource datasource) {
+ this.mapper = new SubTableMapperImpl(datasource);
+ }
- // 多线程创建表,指定线程个数
- public int createSubTable(List subTables, int threadSize) {
- ExecutorService executor = Executors.newFixedThreadPool(threadSize);
- List> futureList = new ArrayList<>();
- for (SubTableMeta subTableMeta : subTables) {
- Future future = executor.submit(() -> createSubTable(subTableMeta));
- futureList.add(future);
+ public void createSubTable(SuperTableMeta superTableMeta, long numOfTables, String prefixOfTable, int numOfThreadsForCreate) {
+ ExecutorService executor = Executors.newFixedThreadPool(numOfThreadsForCreate);
+ for (long i = 0; i < numOfTables; i++) {
+ long tableIndex = i;
+ executor.execute(() -> createSubTable(superTableMeta, prefixOfTable + (tableIndex + 1)));
}
executor.shutdown();
- return getAffectRows(futureList);
+ try {
+ executor.awaitTermination(Long.MAX_VALUE,TimeUnit.NANOSECONDS);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
-
- // 创建一张子表,可以指定database,supertable,tablename,tag值
- public int createSubTable(SubTableMeta subTableMeta) {
- return mapper.createUsingSuperTable(subTableMeta);
+ public void createSubTable(SuperTableMeta superTableMeta, String tableName) {
+ // 构造数据
+ SubTableMeta meta = SubTableMetaGenerator.generate(superTableMeta, tableName);
+ createSubTable(meta);
}
- // 单线程创建多张子表,每张子表分别可以指定自己的database,supertable,tablename,tag值
- public int createSubTable(List subTables) {
- return createSubTable(subTables, 1);
+ // 创建一张子表,可以指定database,supertable,tablename,tag值
+ public void createSubTable(SubTableMeta subTableMeta) {
+ mapper.createUsingSuperTable(subTableMeta);
}
/*************************************************************************************************************************/
// 插入:多线程,多表
- public int insert(List subTableValues, int threadSize) {
+ public int insert(List subTableValues, int threadSize, int frequency) {
ExecutorService executor = Executors.newFixedThreadPool(threadSize);
Future future = executor.submit(() -> insert(subTableValues));
executor.shutdown();
- return getAffectRows(future);
- }
-
- // 插入:多线程,多表, 自动建表
- public int insertAutoCreateTable(List subTableValues, int threadSize) {
- ExecutorService executor = Executors.newFixedThreadPool(threadSize);
- Future future = executor.submit(() -> insertAutoCreateTable(subTableValues));
- executor.shutdown();
+ //TODO:frequency
return getAffectRows(future);
}
@@ -73,7 +68,7 @@ public class SubTableService extends AbstractService {
// 插入: 多表,insert into xxx values(),()... xxx values(),()...
public int insert(List subTableValues) {
- return mapper.insertMultiTableMultiValuesUsingSuperTable(subTableValues);
+ return mapper.insertMultiTableMultiValues(subTableValues);
}
// 插入:单表,自动建表, insert into xxx using xxx tags(...) values(),()...
@@ -86,33 +81,128 @@ public class SubTableService extends AbstractService {
return mapper.insertMultiTableMultiValuesUsingSuperTable(subTableValues);
}
+ public int insertMultiThreads(SuperTableMeta superTableMeta, int threadSize, long tableSize, long startTime, long gap, JdbcTaosdemoConfig config) {
+ List taskList = new ArrayList<>();
+ List threads = IntStream.range(0, threadSize)
+ .mapToObj(i -> {
+ long startInd = i * gap;
+ long endInd = (i + 1) * gap < tableSize ? (i + 1) * gap : tableSize;
+ FutureTask task = new FutureTask<>(
+ new InsertTask(superTableMeta,
+ startInd, endInd,
+ startTime, config.timeGap,
+ config.numOfRowsPerTable, config.numOfTablesPerSQL, config.numOfValuesPerSQL,
+ config.order, config.rate, config.range,
+ config.prefixOfTable, config.autoCreateTable)
+ );
+ taskList.add(task);
+ return new Thread(task, "InsertThread-" + i);
+ }).collect(Collectors.toList());
+
+ threads.stream().forEach(Thread::start);
+ for (Thread thread : threads) {
+ try {
+ thread.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ int affectedRows = 0;
+ for (FutureTask task : taskList) {
+ try {
+ affectedRows += task.get();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return affectedRows;
+ }
-// ExecutorService executors = Executors.newFixedThreadPool(threadSize);
-// int count = 0;
-//
-// //
-// List subTableValues = new ArrayList<>();
-// for (int tableIndex = 1; tableIndex <= numOfTablesPerSQL; tableIndex++) {
-// // each table
-// SubTableValue subTableValue = new SubTableValue();
-// subTableValue.setDatabase();
-// subTableValue.setName();
-// subTableValue.setSupertable();
-//
-// List values = new ArrayList<>();
-// for (int valueCnt = 0; valueCnt < numOfValuesPerSQL; valueCnt++) {
-// List fields = new ArrayList<>();
-// for (int fieldInd = 0; fieldInd <; fieldInd++) {
-// FieldValue