JdbcTaosdemo.java 12.2 KB
Newer Older
Z
zyyang 已提交
1
package com.taosdata.example.jdbcTaosdemo;
2

Z
zyyang 已提交
3 4 5 6
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;
Z
zyyang 已提交
7 8
import com.taosdata.example.jdbcTaosdemo.utils.ConnectionFactory;
import com.taosdata.example.jdbcTaosdemo.utils.SqlSpeller;
Z
zyyang 已提交
9
import com.taosdata.example.jdbcTaosdemo.utils.TimeStampUtil;
10 11 12
import org.apache.log4j.Logger;

import java.sql.*;
Z
zyyang 已提交
13 14 15
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
16 17 18 19 20 21 22 23 24 25 26 27

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) {
Z
zyyang 已提交
28
        // parse config from args
Z
zyyang 已提交
29
        JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
30 31 32

        boolean isHelp = Arrays.asList(args).contains("--help");
        if (isHelp) {
Z
zyyang 已提交
33
            JdbcTaosdemoConfig.printHelp();
34 35 36
            return;
        }
        if (config.getHost() == null) {
Z
zyyang 已提交
37
            JdbcTaosdemoConfig.printHelp();
38 39 40 41
            return;
        }

        JdbcTaosdemo taosdemo = new JdbcTaosdemo(config);
Z
zyyang 已提交
42
        // establish connection
43
        taosdemo.init();
Z
zyyang 已提交
44
        // drop database
45
        taosdemo.dropDatabase();
Z
zyyang 已提交
46
        // create database
47
        taosdemo.createDatabase();
Z
zyyang 已提交
48
        // use db
49
        taosdemo.useDatabase();
Z
zyyang 已提交
50
        // create super table
51
        taosdemo.createSuperTable();
Z
zyyang 已提交
52
        // create sub tables
53
        taosdemo.createTableMultiThreads();
Z
zyyang 已提交
54 55

        boolean infinite = Arrays.asList(args).contains("--infinite");
56
        if (infinite) {
Z
zyyang 已提交
57
            logger.info("!!! Infinite Insert Mode Started. !!!");
58 59
            taosdemo.insertInfinite();
        } else {
Z
zyyang 已提交
60
            // insert into table
61
            taosdemo.insertMultiThreads();
Z
zyyang 已提交
62
            // select from sub table
Z
zyyang 已提交
63 64 65
            taosdemo.selectFromTableLimit();
            taosdemo.selectCountFromTable();
            taosdemo.selectAvgMinMaxFromTable();
Z
zyyang 已提交
66 67 68
            // select last from
            taosdemo.selectLastFromTable();
            // select from super table
Z
zyyang 已提交
69 70 71
            taosdemo.selectFromSuperTableLimit();
            taosdemo.selectCountFromSuperTable();
            taosdemo.selectAvgMinMaxFromSuperTable();
Z
zyyang 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
            //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();

Z
zyyang 已提交
87
            // drop super table
88 89 90 91 92 93 94 95 96 97 98 99 100
            if (config.isDeleteTable())
                taosdemo.dropSuperTable();
            taosdemo.close();
        }
    }


    /**
     * establish the connection
     */
    private void init() {
        try {
            Class.forName("com.taosdata.jdbc.TSDBDriver");
Z
zyyang 已提交
101
            connection = ConnectionFactory.build(config);
102 103 104 105 106 107 108 109 110 111 112 113
            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() {
Z
zyyang 已提交
114
        String sql = SqlSpeller.createDatabaseSQL(config.getDbName(), config.getKeep(), config.getDays());
115 116 117
        execute(sql);
    }

Z
zyyang 已提交
118 119 120
    /**
     * drop database
     */
121
    private void dropDatabase() {
Z
zyyang 已提交
122
        String sql = SqlSpeller.dropDatabaseSQL(config.getDbName());
123 124 125 126 127 128 129
        execute(sql);
    }

    /**
     * use database
     */
    private void useDatabase() {
Z
zyyang 已提交
130
        String sql = SqlSpeller.useDatabaseSQL(config.getDbName());
131 132 133
        execute(sql);
    }

Z
zyyang 已提交
134 135 136
    /**
     * create super table
     */
137
    private void createSuperTable() {
Z
zyyang 已提交
138
        String sql = SqlSpeller.createSuperTableSQL(config.getStbName());
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
        execute(sql);
    }

    /**
     * create table use super table with multi threads
     */
    private void createTableMultiThreads() {
        try {
            final int tableSize = config.getNumberOfTable() / config.getNumberOfThreads();
            List<Thread> 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();
            }
Z
zyyang 已提交
157
            logger.info("<<< Multi Threads create table finished.");
158 159 160 161 162 163
        } catch (InterruptedException e) {
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }

Z
zyyang 已提交
164 165 166
    /**
     * insert data infinitely
     */
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
    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<Thread> 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();
            }
Z
zyyang 已提交
182
            logger.info("<<< Multi Threads insert table finished.");
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
        } 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<Thread> 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();
            }
Z
zyyang 已提交
202
            logger.info("<<< Multi Threads insert table finished.");
203 204 205 206 207 208
        } catch (InterruptedException e) {
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }

Z
zyyang 已提交
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
    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);
    }

Z
zyyang 已提交
224 225 226 227 228
    private void selectLastFromTable() {
        String sql = SqlSpeller.selectLastFromTableSQL(config.getDbName(), config.getTbPrefix(), 1);
        executeQuery(sql);
    }

Z
zyyang 已提交
229 230 231 232 233 234 235 236 237 238 239 240
    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());
241 242 243
        executeQuery(sql);
    }

Z
zyyang 已提交
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
    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);
    }


290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
    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() {
Z
zyyang 已提交
306
        String sql = SqlSpeller.dropSuperTableSQL(config.getDbName(), config.getStbName());
307 308 309 310 311 312 313 314 315 316 317 318 319
        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) {
Z
zyyang 已提交
320
            logger.error("ERROR execute SQL ===> " + sql);
321 322 323 324 325
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }

Z
zyyang 已提交
326
    private static void printSql(String sql, boolean succeed, long cost) {
Z
zyyang 已提交
327
        System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
328 329 330 331 332 333 334 335 336 337
    }

    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) {
Z
zyyang 已提交
338
            logger.error("ERROR execute SQL ===> " + sql);
339 340 341 342 343
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }

Z
zyyang 已提交
344
    private static void printResult(ResultSet resultSet) throws SQLException {
345 346 347 348 349 350 351 352
        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");
            }
Z
zyyang 已提交
353
            System.out.println(sb.toString());
354 355 356 357
        }
    }

}