All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.iotdb.client.AbstractClient Maven / Gradle / Ivy

There is a newer version: 1.3.2
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.iotdb.client;

import java.io.PrintStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.iotdb.exception.ArgsErrorException;
import org.apache.iotdb.jdbc.IoTDBConnection;
import org.apache.iotdb.jdbc.IoTDBMetadataResultSet;
import org.apache.iotdb.jdbc.IoTDBQueryResultSet;
import org.apache.iotdb.service.rpc.thrift.ServerProperties;
import org.apache.iotdb.tool.ImportCsv;
import org.apache.thrift.TException;

public abstract class AbstractClient {

  static final String HOST_ARGS = "h";
  static final String HOST_NAME = "host";

  static final String HELP_ARGS = "help";

  static final String PORT_ARGS = "p";
  static final String PORT_NAME = "port";

  static final String PASSWORD_ARGS = "pw";
  private static final String PASSWORD_NAME = "password";

  static final String USERNAME_ARGS = "u";
  static final String USERNAME_NAME = "username";

  private static final String EXECUTE_ARGS = "e";
  private static final String EXECUTE_NAME = "execute";

  static final String ISO8601_ARGS = "disableISO8601";
  static final List AGGREGRATE_TIME_LIST = new ArrayList<>();
  static final String MAX_PRINT_ROW_COUNT_ARGS = "maxPRC";
  private static final String MAX_PRINT_ROW_COUNT_NAME = "maxPrintRowCount";
  static final String SET_MAX_DISPLAY_NUM = "set max_display_num";
  static final String SET_TIMESTAMP_DISPLAY = "set time_display_type";
  static final String SHOW_TIMESTAMP_DISPLAY = "show time_display_type";
  static final String SET_TIME_ZONE = "set time_zone";
  static final String SHOW_TIMEZONE = "show time_zone";
  static final String SET_FETCH_SIZE = "set fetch_size";
  static final String SHOW_FETCH_SIZE = "show fetch_size";
  private static final String HELP = "help";
  static final String IOTDB_CLI_PREFIX = "IoTDB";
  static final String SCRIPT_HINT = "./start-client.sh(start-client.bat if Windows)";
  static final String QUIT_COMMAND = "quit";
  static final String EXIT_COMMAND = "exit";
  private static final String SHOW_METADATA_COMMAND = "show timeseries";
  static final int MAX_HELP_CONSOLE_WIDTH = 88;
  static final String TIMESTAMP_STR = "Time";
  static final int ISO_DATETIME_LEN = 35;
  private static final String IMPORT_CMD = "import";
  private static final String NEED_NOT_TO_PRINT_TIMESTAMP = "AGGREGATION";
  private static final String DEFAULT_TIME_FORMAT = "default";
  private static String timeFormat = DEFAULT_TIME_FORMAT;
  static int maxPrintRowCount = 100000;
  private static int fetchSize = 10000;
  static int maxTimeLength = ISO_DATETIME_LEN;
  static int maxValueLength = 15;
  private static int deviceColumnLength = 20; // for GROUP_BY_DEVICE sql
  private static int measurementColumnLength = 10; // for GROUP_BY_DEVICE sql
  // for GROUP_BY_DEVICE sql; this name should be the same as that used in server
  private static String GROUPBY_DEVICE_COLUMN_NAME = "Device";
  private static boolean isQuit = false;
  static String TIMESTAMP_PRECISION = "ms";

  /**
   * control the width of columns for 'show timeseries path' and 'show storage group'.
   * 

* for 'show timeseries path': *

* * * * * * * * * * * * * * * * * * *
Timeseries (width:75)Storage Group (width:45)DataType width:8)Encoding (width:8)
root.vehicle.d1.s1root.vehicleINT32PLAIN
............
*

*

* for "show storage group path": *

* * * * * * * * * *
STORAGE_GROUP (width:75)
root.vehicle
...
*

*/ private static int[] maxValueLengthForShow = new int[]{75, 45, 8, 8}; static String formatTime = "%" + maxTimeLength + "s|"; private static String formatValue = "%" + maxValueLength + "s|"; private static final int DIVIDING_LINE_LENGTH = 40; static String host = "127.0.0.1"; static String port = "6667"; static String username; static String password; static String execute; static boolean hasExecuteSQL = false; private static boolean printToConsole = true; static Set keywordSet = new HashSet<>(); static ServerProperties properties = null; private static boolean printHeader = false; private static int displayCnt = 0; private static final PrintStream SCREEN_PRINTER = new PrintStream(System.out); /** * showException is currently fixed to false because the display of exceptions is not elaborate. * We can make it an option in future versions. */ private static boolean showException = false; static void init() { keywordSet.add("-" + HOST_ARGS); keywordSet.add("-" + HELP_ARGS); keywordSet.add("-" + PORT_ARGS); keywordSet.add("-" + PASSWORD_ARGS); keywordSet.add("-" + USERNAME_ARGS); keywordSet.add("-" + EXECUTE_ARGS); keywordSet.add("-" + ISO8601_ARGS); keywordSet.add("-" + MAX_PRINT_ROW_COUNT_ARGS); } /** * Client result output. * * @param res result set * @param printToConsole print to console * @param zoneId time-zone ID * @throws SQLException SQLException */ private static void output(ResultSet res, boolean printToConsole, ZoneId zoneId) throws SQLException { int cnt = 0; boolean printTimestamp = true; displayCnt = 0; printHeader = false; ResultSetMetaData resultSetMetaData = res.getMetaData(); int colCount = resultSetMetaData.getColumnCount(); boolean isShow = res instanceof IoTDBMetadataResultSet; if (res instanceof IoTDBQueryResultSet) { printTimestamp = !((IoTDBQueryResultSet) res).isIgnoreTimeStamp(); } // Output values while (cnt < maxPrintRowCount && res.next()) { printRow(printTimestamp, colCount, resultSetMetaData, isShow, res, zoneId); cnt++; if (!printToConsole && cnt % 10000 == 0) { println(cnt); } } if (printToConsole) { if (!printHeader) { printBlockLine(printTimestamp, colCount, resultSetMetaData, isShow); printName(printTimestamp, colCount, resultSetMetaData, isShow); printBlockLine(printTimestamp, colCount, resultSetMetaData, isShow); } else { printBlockLine(printTimestamp, colCount, resultSetMetaData, isShow); } } if(!res.next()){ printCount(isShow, res, cnt); } else { println(String.format("Reach maxPrintRowCount = %s lines", maxPrintRowCount)); } } private static String getTimestampPrecision() { return TIMESTAMP_PRECISION; } private static void printCount(boolean isShow, ResultSet res, int cnt) throws SQLException { if (isShow) { int type = res.getType(); if (type == IoTDBMetadataResultSet.MetadataType.STORAGE_GROUP.ordinal()) { // storage group println("Total storage group number = " + cnt); } else if (type == IoTDBMetadataResultSet.MetadataType.TIMESERIES .ordinal()) { // show timeseries println("Total timeseries number = " + cnt); } } else { println("Total line number = " + cnt); } } private static void printRow(boolean printTimestamp, int colCount, ResultSetMetaData resultSetMetaData, boolean isShow, ResultSet res, ZoneId zoneId) throws SQLException { // Output Labels if (!printToConsole) { return; } printHeader(printTimestamp, colCount, resultSetMetaData, isShow); if (isShow) { // 'show timeseries ' or 'show storage group' metadata results printShow(colCount, res); } else { // queried data results printRowData(printTimestamp, res, zoneId, resultSetMetaData, colCount); } } private static void printHeader(boolean printTimestamp, int colCount, ResultSetMetaData resultSetMetaData, boolean isShow) throws SQLException { if (!printHeader) { printBlockLine(printTimestamp, colCount, resultSetMetaData, isShow); printName(printTimestamp, colCount, resultSetMetaData, isShow); printBlockLine(printTimestamp, colCount, resultSetMetaData, isShow); printHeader = true; } } private static void printShow(int colCount, ResultSet res) throws SQLException { print("|"); for (int i = 1; i <= colCount; i++) { formatValue = "%" + maxValueLengthForShow[i - 1] + "s|"; printf(formatValue, res.getString(i)); } println(); } private static void printRowData(boolean printTimestamp, ResultSet res, ZoneId zoneId, ResultSetMetaData resultSetMetaData, int colCount) throws SQLException { if (displayCnt < maxPrintRowCount) { // NOTE displayCnt only works on queried data results print("|"); if (printTimestamp) { printf(formatTime, formatDatetime(res.getLong(TIMESTAMP_STR), zoneId)); } for (int i = 2; i <= colCount; i++) { printColumnData(resultSetMetaData, res, i, zoneId); } println(); displayCnt++; } } private static void printColumnData(ResultSetMetaData resultSetMetaData, ResultSet res, int i, ZoneId zoneId) throws SQLException { boolean flag = false; for (String timeStr : AGGREGRATE_TIME_LIST) { if (resultSetMetaData.getColumnLabel(i).toUpperCase().contains(timeStr.toUpperCase())) { flag = true; break; } } if (flag) { try { printf(formatValue, formatDatetime(res.getLong(i), zoneId)); } catch (Exception e) { printf(formatValue, "null"); handleException(e); } } else { if (i == 2 && resultSetMetaData.getColumnName(2).equals(GROUPBY_DEVICE_COLUMN_NAME)) { printf("%" + deviceColumnLength + "s|", res.getString(i)); } else { printf(formatValue, res.getString(i)); } } } static Options createOptions() { Options options = new Options(); Option help = new Option(HELP_ARGS, false, "Display help information(optional)"); help.setRequired(false); options.addOption(help); Option timeFormat = new Option(ISO8601_ARGS, false, "Display timestamp in number(optional)"); timeFormat.setRequired(false); options.addOption(timeFormat); Option host = Option.builder(HOST_ARGS).argName(HOST_NAME).hasArg() .desc("Host Name (optional, default 127.0.0.1)").build(); options.addOption(host); Option port = Option.builder(PORT_ARGS).argName(PORT_NAME).hasArg() .desc("Port (optional, default 6667)") .build(); options.addOption(port); Option username = Option.builder(USERNAME_ARGS).argName(USERNAME_NAME).hasArg() .desc("User name (required)") .required().build(); options.addOption(username); Option password = Option.builder(PASSWORD_ARGS).argName(PASSWORD_NAME).hasArg() .desc("password (optional)") .build(); options.addOption(password); Option execute = Option.builder(EXECUTE_ARGS).argName(EXECUTE_NAME).hasArg() .desc("execute statement (optional)") .build(); options.addOption(execute); Option maxPrintCount = Option.builder(MAX_PRINT_ROW_COUNT_ARGS) .argName(MAX_PRINT_ROW_COUNT_NAME).hasArg() .desc("Maximum number of rows displayed (optional)").build(); options.addOption(maxPrintCount); return options; } public static String parseLongToDateWithPrecision(DateTimeFormatter formatter, long timestamp, ZoneId zoneid, String timestampPrecision) { if (timestampPrecision.equals("ms")) { long integerofDate = timestamp / 1000; String digits = Long.toString(timestamp % 1000); ZonedDateTime dateTime = ZonedDateTime .ofInstant(Instant.ofEpochSecond(integerofDate), zoneid); String datetime = dateTime.format(formatter); int length = digits.length(); if (length != 3) { for (int i = 0; i < 3 - length; i++) { digits = "0" + digits; } } return datetime.substring(0, 19) + "." + digits + datetime.substring(19); } else if (timestampPrecision.equals("us")) { long integerofDate = timestamp / 1000_000; String digits = Long.toString(timestamp % 1000_000); ZonedDateTime dateTime = ZonedDateTime .ofInstant(Instant.ofEpochSecond(integerofDate), zoneid); String datetime = dateTime.format(formatter); int length = digits.length(); if (length != 6) { for (int i = 0; i < 6 - length; i++) { digits = "0" + digits; } } return datetime.substring(0, 19) + "." + digits + datetime.substring(19); } else { long integerofDate = timestamp / 1000_000_000L; String digits = Long.toString(timestamp % 1000_000_000L); ZonedDateTime dateTime = ZonedDateTime .ofInstant(Instant.ofEpochSecond(integerofDate), zoneid); String datetime = dateTime.format(formatter); int length = digits.length(); if (length != 9) { for (int i = 0; i < 9 - length; i++) { digits = "0" + digits; } } return datetime.substring(0, 19) + "." + digits + datetime.substring(19); } } private static String formatDatetime(long timestamp, ZoneId zoneId) { ZonedDateTime dateTime; switch (timeFormat) { case "long": case "number": return Long.toString(timestamp); case DEFAULT_TIME_FORMAT: case "iso8601": return parseLongToDateWithPrecision( DateTimeFormatter.ISO_OFFSET_DATE_TIME, timestamp, zoneId, getTimestampPrecision()); default: dateTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(timestamp), zoneId); return dateTime.format(DateTimeFormatter.ofPattern(timeFormat)); } } static String checkRequiredArg(String arg, String name, CommandLine commandLine, boolean isRequired, String defaultValue) throws ArgsErrorException { String str = commandLine.getOptionValue(arg); if (str == null) { if (isRequired) { String msg = String .format("%s: Required values for option '%s' not provided", IOTDB_CLI_PREFIX, name); println(msg); println("Use -help for more information"); throw new ArgsErrorException(msg); } else if (defaultValue == null) { String msg = String .format("%s: Required values for option '%s' is null.", IOTDB_CLI_PREFIX, name); throw new ArgsErrorException(msg); } else { return defaultValue; } } return str; } static void setTimeFormat(String newTimeFormat) { switch (newTimeFormat.trim().toLowerCase()) { case "long": case "number": maxTimeLength = maxValueLength; timeFormat = newTimeFormat.trim().toLowerCase(); break; case DEFAULT_TIME_FORMAT: case "iso8601": maxTimeLength = ISO_DATETIME_LEN; timeFormat = newTimeFormat.trim().toLowerCase(); break; default: // use java default SimpleDateFormat to check whether input time format is legal // if illegal, it will throw an exception new SimpleDateFormat(newTimeFormat.trim()); maxTimeLength = TIMESTAMP_STR.length() > newTimeFormat.length() ? TIMESTAMP_STR.length() : newTimeFormat.length(); timeFormat = newTimeFormat; break; } formatTime = "%" + maxTimeLength + "s|"; } private static void setFetchSize(String fetchSizeString) { long tmp = Long.parseLong(fetchSizeString.trim()); if (tmp > Integer.MAX_VALUE || tmp < 0) { fetchSize = Integer.MAX_VALUE; } else { fetchSize = Integer.parseInt(fetchSizeString.trim()); } } static void setMaxDisplayNumber(String maxDisplayNum) { long tmp = Long.parseLong(maxDisplayNum.trim()); if (tmp > Integer.MAX_VALUE || tmp < 0) { maxPrintRowCount = Integer.MAX_VALUE; } else { maxPrintRowCount = Integer.parseInt(maxDisplayNum.trim()); } } private static void printBlockLine(boolean printTimestamp, int colCount, ResultSetMetaData resultSetMetaData, boolean isShowTs) throws SQLException { StringBuilder blockLine = new StringBuilder(); if (isShowTs) { blockLine.append("+"); for (int i = 1; i <= colCount; i++) { blockLine.append(StringUtils.repeat('-', maxValueLengthForShow[i - 1])).append("+"); } } else { if (printTimestamp) { blockLine.append("+").append(StringUtils.repeat('-', maxTimeLength)).append("+"); } else { blockLine.append("+"); } if (resultSetMetaData.getColumnCount() > 1 && resultSetMetaData.getColumnName(2).equals(GROUPBY_DEVICE_COLUMN_NAME)) { maxValueLength = measurementColumnLength; } else { int tmp = Integer.MIN_VALUE; for (int i = 1; i <= colCount; i++) { int len = resultSetMetaData.getColumnLabel(i).length(); tmp = tmp > len ? tmp : len; } maxValueLength = tmp; } for (int i = 2; i <= colCount; i++) { if (i == 2 && resultSetMetaData.getColumnName(2).equals(GROUPBY_DEVICE_COLUMN_NAME)) { blockLine.append(StringUtils.repeat('-', deviceColumnLength)).append("+"); } else { blockLine.append(StringUtils.repeat('-', maxValueLength)).append("+"); } } } println(blockLine); } private static void printName(boolean printTimestamp, int colCount, ResultSetMetaData resultSetMetaData, boolean isShowTs) throws SQLException { print("|"); if (isShowTs) { for (int i = 1; i <= colCount; i++) { formatValue = "%" + maxValueLengthForShow[i - 1] + "s|"; printf(formatValue, resultSetMetaData.getColumnName(i)); } } else { formatValue = "%" + maxValueLength + "s|"; if (printTimestamp) { printf(formatTime, TIMESTAMP_STR); } for (int i = 2; i <= colCount; i++) { if (i == 2 && resultSetMetaData.getColumnName(2).equals(GROUPBY_DEVICE_COLUMN_NAME)) { printf("%" + deviceColumnLength + "s|", resultSetMetaData.getColumnLabel(i)); } else { printf(formatValue, resultSetMetaData.getColumnLabel(i)); } } } println(); } static String[] removePasswordArgs(String[] args) { int index = -1; for (int i = 0; i < args.length; i++) { if (args[i].equals("-" + PASSWORD_ARGS)) { index = i; break; } } if (index >= 0 && ((index + 1 >= args.length) || (index + 1 < args.length && keywordSet .contains(args[index + 1])))) { return ArrayUtils.remove(args, index); } return args; } static String[] processExecuteArgs(String[] args) { int index = -1; for (int i = 0; i < args.length; i++) { if (args[i].equals("-" + EXECUTE_ARGS)) { index = i; break; } } if (index >= 0 && ((index + 1 >= args.length) || (index + 1 < args.length && keywordSet .contains(args[index + 1])))) { return ArrayUtils.remove(args, index); } else if (index == -1) { return args; } else { StringBuilder executeCommand = new StringBuilder(); for (int j = index + 1; j < args.length; j++) { executeCommand.append(args[j]).append(" "); } executeCommand.deleteCharAt(executeCommand.length() - 1); execute = executeCommand.toString(); hasExecuteSQL = true; args = Arrays.copyOfRange(args, 0, index); return args; } } static void displayLogo(String version) { println(" _____ _________ ______ ______ \n" + "|_ _| | _ _ ||_ _ `.|_ _ \\ \n" + " | | .--.|_/ | | \\_| | | `. \\ | |_) | \n" + " | | / .'`\\ \\ | | | | | | | __'. \n" + " _| |_| \\__. | _| |_ _| |_.' /_| |__) | \n" + "|_____|'.__.' |_____| |______.'|_______/ version " + version + "\n" + " \n"); } static void echoStarting() { println("---------------------"); println("Starting IoTDB Client"); println("---------------------"); } static OperationResult handleInputCmd(String cmd, IoTDBConnection connection) { String specialCmd = cmd.toLowerCase().trim(); if (QUIT_COMMAND.equals(specialCmd) || EXIT_COMMAND.equals(specialCmd)) { isQuit = true; return OperationResult.STOP_OPER; } if (HELP.equals(specialCmd)) { showHelp(); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SET_TIMESTAMP_DISPLAY)) { setTimestampDisplay(specialCmd, cmd); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SET_TIME_ZONE)) { setTimeZone(specialCmd, cmd, connection); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SET_FETCH_SIZE)) { setFetchSize(specialCmd, cmd); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SET_MAX_DISPLAY_NUM)) { setMaxDisplaNum(specialCmd, cmd); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SHOW_TIMEZONE)) { showTimeZone(connection); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SHOW_TIMESTAMP_DISPLAY)) { println("Current time format: " + timeFormat); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(SHOW_FETCH_SIZE)) { println("Current fetch size: " + fetchSize); return OperationResult.CONTINUE_OPER; } if (specialCmd.startsWith(IMPORT_CMD)) { importCmd(specialCmd, cmd, connection); return OperationResult.CONTINUE_OPER; } executeQuery(connection, cmd); return OperationResult.NO_OPER; } private static void showHelp() { println(" \t\t\t execute your sql statment"); println(String.format(" %s\t\t show how many timeseries are in iotdb", SHOW_METADATA_COMMAND)); println(String.format(" %s=xxx\t eg. long, default, ISO8601, yyyy-MM-dd HH:mm:ss.", SET_TIMESTAMP_DISPLAY)); println(String.format(" %s\t show time display type", SHOW_TIMESTAMP_DISPLAY)); println(String.format(" %s=xxx\t\t eg. +08:00, Asia/Shanghai.", SET_TIME_ZONE)); println(String.format(" %s\t\t show cli time zone", SHOW_TIMEZONE)); println( String.format(" %s=xxx\t\t set fetch size when querying data from server.", SET_FETCH_SIZE)); println(String.format(" %s\t\t show fetch size", SHOW_FETCH_SIZE)); println( String.format(" %s=xxx\t eg. set max lines for cli to ouput, -1 equals to unlimited.", SET_MAX_DISPLAY_NUM)); } private static void setTimestampDisplay(String specialCmd, String cmd) { String[] values = specialCmd.split("="); if (values.length != 2) { println(String.format("Time display format error, please input like %s=ISO8601", SET_TIMESTAMP_DISPLAY)); return; } try { setTimeFormat(cmd.split("=")[1]); } catch (Exception e) { println(String.format("time display format error, %s", e.getMessage())); handleException(e); return; } println("Time display type has set to " + cmd.split("=")[1].trim()); } private static void setTimeZone(String specialCmd, String cmd, IoTDBConnection connection) { String[] values = specialCmd.split("="); if (values.length != 2) { println( String.format("Time zone format error, please input like %s=+08:00", SET_TIME_ZONE)); return; } try { connection.setTimeZone(cmd.split("=")[1].trim()); } catch (Exception e) { println(String.format("Time zone format error: %s", e.getMessage())); handleException(e); return; } println("Time zone has set to " + values[1].trim()); } private static void setFetchSize(String specialCmd, String cmd) { String[] values = specialCmd.split("="); if (values.length != 2) { println(String .format("Fetch size format error, please input like %s=10000", SET_FETCH_SIZE)); return; } try { setFetchSize(cmd.split("=")[1]); } catch (Exception e) { println(String.format("Fetch size format error, %s", e.getMessage())); handleException(e); return; } println("Fetch size has set to " + values[1].trim()); } private static void setMaxDisplaNum(String specialCmd, String cmd) { String[] values = specialCmd.split("="); if (values.length != 2) { println(String.format("Max display number format error, please input like %s = 10000", SET_MAX_DISPLAY_NUM)); return; } try { setMaxDisplayNumber(cmd.split("=")[1]); } catch (Exception e) { println(String.format("Max display number format error, %s", e.getMessage())); handleException(e); return; } println("Max display number has set to " + values[1].trim()); } private static void showTimeZone(IoTDBConnection connection) { try { println("Current time zone: " + connection.getTimeZone()); } catch (Exception e) { println("Cannot get time zone from server side because: " + e.getMessage()); handleException(e); } } private static void importCmd(String specialCmd, String cmd, IoTDBConnection connection) { String[] values = specialCmd.split(" "); if (values.length != 2) { println("Please input like: import /User/myfile. " + "Noted that your file path cannot contain any space character)"); return; } try { println(cmd.split(" ")[1]); ImportCsv.importCsvFromFile(host, port, username, password, cmd.split(" ")[1], connection.getTimeZone()); } catch (SQLException e) { println(String.format("Failed to import from %s because %s", cmd.split(" ")[1], e.getMessage())); handleException(e); } catch (TException e) { println("Cannot connect to server"); handleException(e); } } private static void executeQuery(IoTDBConnection connection, String cmd) { long startTime = System.currentTimeMillis(); try (Statement statement = connection.createStatement();) { ZoneId zoneId = ZoneId.of(connection.getTimeZone()); statement.setFetchSize(fetchSize); boolean hasResultSet = statement.execute(cmd.trim()); if (hasResultSet) { ResultSet resultSet = statement.getResultSet(); output(resultSet, printToConsole, zoneId); if (resultSet != null) { resultSet.close(); } } } catch (Exception e) { println("Msg: " + e.getMessage()); handleException(e); } long costTime = System.currentTimeMillis() - startTime; println(String.format("It costs %.3fs", costTime / 1000.0)); } enum OperationResult { STOP_OPER, CONTINUE_OPER, NO_OPER } private static void printf(String format, Object... args) { SCREEN_PRINTER.printf(format, args); } static void print(String msg) { SCREEN_PRINTER.print(msg); } private static void println() { SCREEN_PRINTER.println(); } static void println(String msg) { SCREEN_PRINTER.println(msg); } private static void println(Object obj) { SCREEN_PRINTER.println(obj); } static void handleException(Exception e) { if (showException) { e.printStackTrace(SCREEN_PRINTER); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy