diff --git a/src/client/src/TSDBJNIConnector.c b/src/client/src/TSDBJNIConnector.c
index 4ee916c1842cc5080ddad8b7f70d2160f6d53cdc..287e061da06aebd44ff7779f568ac04308ed1058 100644
--- a/src/client/src/TSDBJNIConnector.c
+++ b/src/client/src/TSDBJNIConnector.c
@@ -342,7 +342,7 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getResultSetImp(
STscObj *pObj = pSql->pTscObj;
if (tscIsUpdateQuery(pSql)) {
- taos_free_result(pSql); // free result here
+ // taos_free_result(pSql); // free result here
jniTrace("jobj:%p, conn:%p, no resultset, %p", jobj, pObj, (void *)tres);
return 0;
} else {
@@ -383,7 +383,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getAffectedRowsIm
}
jint ret = taos_affected_rows((SSqlObj *)res);
- jniTrace("jobj:%p, conn:%p, sql:%p, affect rows:%d", jobj, tscon, (SSqlObj*)res, ret);
+ jniTrace("jobj:%p, conn:%p, sql:%p, res: %p, affect rows:%d", jobj, tscon, (void *)con, (void *)res, ret);
return ret;
}
@@ -409,10 +409,10 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getSchemaMetaData
// jobject arrayListObj = (*env)->NewObject(env, g_arrayListClass, g_arrayListConstructFp, "");
if (num_fields == 0) {
- jniError("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void*)res, num_fields);
+ jniError("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void *)res, num_fields);
return JNI_NUM_OF_FIELDS_0;
} else {
- jniTrace("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void*)res, num_fields);
+ jniTrace("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void *)res, num_fields);
for (int i = 0; i < num_fields; ++i) {
jobject metadataObj = (*env)->NewObject(env, g_metadataClass, g_metadataConstructFp);
(*env)->SetIntField(env, metadataObj, g_metadataColtypeField, fields[i].type);
diff --git a/src/connector/jdbc/.classpath b/src/connector/jdbc/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..39abf1c5e9102a46b2af14da5d6d536eb2cd121a
--- /dev/null
+++ b/src/connector/jdbc/.classpath
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/connector/jdbc/.project b/src/connector/jdbc/.project
new file mode 100644
index 0000000000000000000000000000000000000000..656ab58d205bf0e01c151728a75e5ab543facee6
--- /dev/null
+++ b/src/connector/jdbc/.project
@@ -0,0 +1,23 @@
+
+
+ taos-jdbcdriver
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/src/connector/jdbc/.settings/org.eclipse.core.resources.prefs b/src/connector/jdbc/.settings/org.eclipse.core.resources.prefs
deleted file mode 100755
index 1935ba2ee400625d903bb90ecbb42d9a185504ed..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=GBK
-encoding//src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java=UTF-8
-encoding//src/main/resources=UTF-8
-encoding/=UTF-8
diff --git a/src/connector/jdbc/.settings/org.eclipse.jdt.core.prefs b/src/connector/jdbc/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100755
index 5ce4518899426199a8ab051fb032691fe545dcee..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,13 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/src/connector/jdbc/.settings/org.eclipse.m2e.core.prefs b/src/connector/jdbc/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100755
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/src/connector/jdbc/pom.xml b/src/connector/jdbc/pom.xml
index 36f1a1010c372b319fab7fceaf13c9c44689dc6b..5aa4f6a2e3e41542fd25b655f9959da13fe4efdb 100755
--- a/src/connector/jdbc/pom.xml
+++ b/src/connector/jdbc/pom.xml
@@ -1,105 +1,136 @@
- 4.0.0
-
- com.taosdata.jdbc
- taos-jdbcdriver
- 1.0.3
- jar
-
- JDBCDriver
- https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
- TDengine JDBC Driver
-
-
-
- GNU AFFERO GENERAL PUBLIC LICENSE Version 3
- https://github.com/taosdata/TDengine/blob/master/LICENSE
- repo
-
-
-
-
- scm:git:git://github.com/taosdata/TDengine.git
- scm:git:git@github.com:taosdata/TDengine.git
- https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
- HEAD
-
-
-
-
- taosdata
- support@taosdata.com
- https://www.taosdata.com/
- https://www.taosdata.com/
-
-
-
-
- UTF-8
- 1.8
-
- 3.6.0
-
- 1.1.2
- 3.5
-
-
-
-
- commons-logging
- commons-logging
- ${commons-logging.version}
-
-
- *
- *
-
-
-
-
- org.apache.commons
- commons-lang3
- ${commons-lang3.version}
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 3.0.0
-
-
-
- src/main/assembly/assembly-jar.xml
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- UTF-8
- ${java.version}
- ${java.version}
- true
- true
-
-
-
-
-
-
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ com.taosdata.jdbc
+ taos-jdbcdriver
+ 1.0.3
+ jar
+ JDBCDriver
+ https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
+ TDengine JDBC Driver
+
+
+ GNU AFFERO GENERAL PUBLIC LICENSE Version 3
+ https://github.com/taosdata/TDengine/blob/master/LICENSE
+ repo
+
+
+
+ scm:git:git://github.com/taosdata/TDengine.git
+ scm:git:git@github.com:taosdata/TDengine.git
+ https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
+ HEAD
+
+
+
+ taosdata
+ support@taosdata.com
+ https://www.taosdata.com/
+ https://www.taosdata.com/
+
+
+
+ UTF-8
+ 1.8
+ 3.6.0
+ 1.1.2
+ 3.5
+
+
+
+ commons-logging
+ commons-logging
+ ${commons-logging.version}
+
+
+ *
+ *
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.3
+
+
+ junit
+ junit
+ 4.13
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.0.0
+
+
+ src/main/assembly/assembly-jar.xml
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ UTF-8
+ ${java.version}
+ ${java.version}
+ true
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.12.4
+
+ true
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.3
+
+
+ com/**/*
+
+
+
+
+ pre-test
+
+ prepare-agent
+
+
+
+ post-test
+ test
+
+ report
+
+
+
+
+
+
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
index 6cb3263e56749ffb9901fb0a401ab0be244c3646..804e09c6b349ca7c957447b9f1fdf1766f18b3d1 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
@@ -527,8 +527,9 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
throws SQLException {
- if (conn != null && !conn.isClosed()) {
- Statement stmt = conn.createStatement();
+ Statement stmt = null;
+ if (null != conn && !conn.isClosed()) {
+ stmt = conn.createStatement();
if (catalog == null || catalog.length() < 1) {
catalog = conn.getCatalog();
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBError.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBError.java
deleted file mode 100644
index bb1b2afd07f4d9478786d462188ca3c43334785f..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBError.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/***************************************************************************
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *****************************************************************************/
-package com.taosdata.jdbc;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *
- * TDengine error code and error message enumeration.
- *
- */
-public enum TSDBError {
-
- TSDB_CODE_SUCCESS(0, "success"),
- TSDB_CODE_ACTION_IN_PROGRESS(1, "in progress"),
- TSDB_CODE_LAST_SESSION_NOT_FINISHED(5, "last session not finished"),
- TSDB_CODE_INVALID_SESSION_ID(6, "invalid session ID"),
- TSDB_CODE_INVALID_TRAN_ID(7, "invalid tran ID"),
- TSDB_CODE_INVALID_MSG_TYPE(8, "invalid msg type"),
- TSDB_CODE_ALREADY_PROCESSED(9, "alredy processed"),
- TSDB_CODE_AUTH_FAILURE(10, "authentication failure"),
- TSDB_CODE_WRONG_MSG_SIZE(11, "wrong msg size"),
- TSDB_CODE_UNEXPECTED_RESPONSE(12, "unexpected response"),
- TSDB_CODE_INVALID_RESPONSE_TYPE(13, "invalid response type"),
- TSDB_CODE_NO_RESOURCE(14, "no resource"),
- TSDB_CODE_INVALID_TIME_STAMP(15, "invalid time stamp"),
- TSDB_CODE_MISMATCHED_METER_ID(16, "mismatched meter ID"),
- TSDB_CODE_ACTION_TRANS_NOT_FINISHED(17, "transcation not finished"),
- TSDB_CODE_ACTION_NOT_ONLINE(18, "not online"),
- TSDB_CODE_ACTION_SEND_FAILD(19, "send failed"),
- TSDB_CODE_NOT_ACTIVE_SESSION(20, "not active session"),
- TSDB_CODE_INSERT_FAILED(21, "insert failed"),
- TSDB_CODE_APP_ERROR(22, "App error"),
- TSDB_CODE_INVALID_IE(23, "invalid IE"),
- TSDB_CODE_INVALID_VALUE(24, "invalid value"),
- TSDB_CODE_REDIRECT(25, "service not available"),
- TSDB_CODE_ALREADY_THERE(26, "already there"),
- TSDB_CODE_INVALID_TABLE_ID(27, "invalid meter ID"),
- TSDB_CODE_INVALID_SQL(28, "invalid SQL"), // this message often comes with additional info which will vary based on the specific error situation
- TSDB_CODE_NETWORK_UNAVAIL(29, "failed to connect to server"),
- TSDB_CODE_INVALID_MSG_LEN(30, "invalid msg len"),
- TSDB_CODE_INVALID_DB(31, "invalid DB"),
- TSDB_CODE_INVALID_TABLE(32, "invalid table"),
- TSDB_CODE_DB_ALREADY_EXIST(33, "DB already there"),
- TSDB_CODE_TABLE_ALREADY_EXIST(34, "table already there"),
- TSDB_CODE_INVALID_USER(35, "invalid user name"),
- TSDB_CODE_INVALID_ACCT(36, "invalid acct name"),
- TSDB_CODE_INVALID_PASS(37, "invalid password"),
- TSDB_CODE_DB_NOT_SELECTED(38, "DB not selected"),
- TSDB_CODE_MEMORY_CORRUPTED(39, "memory corrupted"),
- TSDB_CODE_USER_ALREADY_EXIST(40, "user name exists"),
- TSDB_CODE_NO_RIGHTS(41, "not authorized"),
- TSDB_CODE_DISCONNECTED(42, "login disconnected), login again"),
- TSDB_CODE_NO_MASTER(43, "mgmt master node not available"),
- TSDB_CODE_NOT_CONFIGURED(44, "not configured"),
- TSDB_CODE_INVALID_OPTION(45, "invalid option"),
- TSDB_CODE_NODE_OFFLINE(46, "node offline"),
- TSDB_CODE_SYNC_REQUIRED(47, "sync required"),
- TSDB_CODE_NO_ENOUGH_DNODES(48, "more dnodes are needed"),
- TSDB_CODE_UNSYNCED(49, "node in unsynced state"),
- TSDB_CODE_TOO_SLOW(50, "too slow"),
- TSDB_CODE_OTHERS(51, "others"),
- TSDB_CODE_NO_REMOVE_MASTER(52, "can't remove dnode which is master"),
- TSDB_CODE_WRONG_SCHEMA(53, "wrong schema"),
- TSDB_CODE_NO_RESULT(54, "no results"),
- TSDB_CODE_TOO_MANY_USERS(55, "num of users execeed maxUsers"),
- TSDB_CODE_TOO_MANY_DATABSES(56, "num of databases execeed maxDbs"),
- TSDB_CODE_TOO_MANY_TABLES(57, "num of tables execeed maxTables"),
- TSDB_CODE_TOO_MANY_DNODES(58, "num of dnodes execeed maxDnodes"),
- TSDB_CODE_TOO_MANY_ACCTS(59, "num of accounts execeed maxAccts"),
- TSDB_CODE_ACCT_ALREADY_EXIST(60, "accout name exists"),
- TSDB_CODE_DNODE_ALREADY_EXIST(61, "dnode ip exists"),
- TSDB_CODE_SDB_ERROR(62, "sdb error"),
- TSDB_CODE_METRICMETA_EXPIRED(63, "metric meta expired"), // local cached metric-meta expired causes error in metric query
- TSDB_CODE_NOT_READY(64, "not ready"), // peer is not ready to process data
- TSDB_CODE_MAX_SESSIONS(65, "too many sessions on server"), // too many sessions
- TSDB_CODE_MAX_CONNECTIONS(66, "too many sessions from app"), // too many connections
- TSDB_CODE_SESSION_ALREADY_EXIST(67, "session to dest is already there"),
- TSDB_CODE_NO_QSUMMARY(68, "query list not there), please show again"),
- TSDB_CODE_SERV_OUT_OF_MEMORY(69, "server out of memory"),
- TSDB_CODE_INVALID_QHANDLE(70, "invalid query handle"),
- TSDB_CODE_RELATED_TABLES_EXIST(71, "tables related to metric exist"),
- TSDB_CODE_MONITOR_DB_FORBEIDDEN(72, "can't drop monitor database or tables"),
- TSDB_CODE_VG_COMMITLOG_INIT_FAILED(73, "commit log init failed"),
- TSDB_CODE_VG_INIT_FAILED(74, "vgroup init failed"),
- TSDB_CODE_DATA_ALREADY_IMPORTED(75, "data is already imported"),
- TSDB_CODE_OPS_NOT_SUPPORT(76, "not supported operation"),
- TSDB_CODE_INVALID_QUERY_ID(77, "invalid query id string"),
- TSDB_CODE_INVALID_STREAM_ID(78, "invalid stream id string"),
- TSDB_CODE_INVALID_CONNECTION(79, "invalid connection string"),
- TSDB_CODE_ACTION_NOT_BALANCED(80, "dnode not balanced"),
- TSDB_CODE_CLI_OUT_OF_MEMORY(81, "client out of memory"),
- TSDB_CODE_DATA_OVERFLOW(82, "data value overflow"),
- TSDB_CODE_QUERY_CANCELLED(83, "query cancelled"),
- TSDB_CODE_GRANT_POINT_LIMITED(84, "grant points limited"),
- TSDB_CODE_GRANT_EXPIRED(85, "grant expired"),
- TSDB_CODE_CLI_NO_DISKSPACE(86, "client no disk space"),
- TSDB_CODE_FILE_CORRUPTED(87, "DB file corrupted"),
- TSDB_CODE_INVALID_CLIENT_VERSION(88, "version of client and server not match");
-
- private long errCode;
- private String errMessage;
- private static Map errorCodeMap = new HashMap<>(86);
- static {
- errorCodeMap.put(0, "success");
- errorCodeMap.put(1, "in progress");
- errorCodeMap.put(5, "last session not finished");
- errorCodeMap.put(6, "invalid session ID");
- errorCodeMap.put(7, "invalid tran ID");
- errorCodeMap.put(8, "invalid msg type");
- errorCodeMap.put(9, "alredy processed");
- errorCodeMap.put(10, "authentication failure");
- errorCodeMap.put(11, "wrong msg size");
- errorCodeMap.put(12, "unexpected response");
- errorCodeMap.put(13, "invalid response type");
- errorCodeMap.put(14, "no resource");
- errorCodeMap.put(15, "invalid time stamp");
- errorCodeMap.put(16, "mismatched meter ID");
- errorCodeMap.put(17, "transcation not finished");
- errorCodeMap.put(18, "not online");
- errorCodeMap.put(19, "send failed");
- errorCodeMap.put(20, "not active session");
- errorCodeMap.put(21, "insert failed");
- errorCodeMap.put(22, "App error");
- errorCodeMap.put(23, "invalid IE");
- errorCodeMap.put(24, "invalid value");
- errorCodeMap.put(25, "service not available");
- errorCodeMap.put(26, "already there");
- errorCodeMap.put(27, "invalid meter ID");
- errorCodeMap.put(28, "invalid SQL"); // this message often comes with additional info which will vary based on the specific error situation
- errorCodeMap.put(29, "failed to connect to server");
- errorCodeMap.put(30, "invalid msg len");
- errorCodeMap.put(31, "invalid DB");
- errorCodeMap.put(32, "invalid table");
- errorCodeMap.put(33, "DB already there");
- errorCodeMap.put(34, "table already there");
- errorCodeMap.put(35, "invalid user name");
- errorCodeMap.put(36, "invalid acct name");
- errorCodeMap.put(37, "invalid password");
- errorCodeMap.put(38, "DB not selected");
- errorCodeMap.put(39, "memory corrupted");
- errorCodeMap.put(40, "user name exists");
- errorCodeMap.put(41, "not authorized");
- errorCodeMap.put(42, "login disconnected); login again");
- errorCodeMap.put(43, "mgmt master node not available");
- errorCodeMap.put(44, "not configured");
- errorCodeMap.put(45, "invalid option");
- errorCodeMap.put(46, "node offline");
- errorCodeMap.put(47, "sync required");
- errorCodeMap.put(48, "more dnodes are needed");
- errorCodeMap.put(49, "node in unsynced state");
- errorCodeMap.put(50, "too slow");
- errorCodeMap.put(51, "others");
- errorCodeMap.put(52, "can't remove dnode which is master");
- errorCodeMap.put(53, "wrong schema");
- errorCodeMap.put(54, "no results");
- errorCodeMap.put(55, "num of users execeed maxUsers");
- errorCodeMap.put(56, "num of databases execeed maxDbs");
- errorCodeMap.put(57, "num of tables execeed maxTables");
- errorCodeMap.put(58, "num of dnodes execeed maxDnodes");
- errorCodeMap.put(59, "num of accounts execeed maxAccts");
- errorCodeMap.put(60, "accout name exists");
- errorCodeMap.put(61, "dnode ip exists");
- errorCodeMap.put(62, "sdb error");
- errorCodeMap.put(63, "metric meta expired"); // local cached metric-meta expired causes error in metric query
- errorCodeMap.put(64, "not ready"); // peer is not ready to process data
- errorCodeMap.put(65, "too many sessions on server"); // too many sessions
- errorCodeMap.put(66, "too many sessions from app"); // too many connections
- errorCodeMap.put(67, "session to dest is already there");
- errorCodeMap.put(68, "query list not there); please show again");
- errorCodeMap.put(69, "server out of memory");
- errorCodeMap.put(70, "invalid query handle");
- errorCodeMap.put(71, "tables related to metric exist");
- errorCodeMap.put(72, "can't drop monitor database or tables");
- errorCodeMap.put(73, "commit log init failed");
- errorCodeMap.put(74, "vgroup init failed");
- errorCodeMap.put(75, "data is already imported");
- errorCodeMap.put(76, "not supported operation");
- errorCodeMap.put(77, "invalid query id string");
- errorCodeMap.put(78, "invalid stream id string");
- errorCodeMap.put(79, "invalid connection string");
- errorCodeMap.put(80, "dnode not balanced");
- errorCodeMap.put(81, "client out of memory");
- errorCodeMap.put(82, "data value overflow");
- errorCodeMap.put(83, "query cancelled");
- errorCodeMap.put(84, "grant points limited");
- errorCodeMap.put(85, "grant expired");
- errorCodeMap.put(86, "client no disk space");
- errorCodeMap.put(87, "DB file corrupted");
- errorCodeMap.put(88, "version of client and server not match");
- }
-
- TSDBError(long code, String message) {
- this.errCode = code;
- this.errMessage = message;
- }
-
- public long getErrCode() {
- return this.errCode;
- }
-
- public String getErrMessage() {
- return this.errMessage;
- }
-
- public static String getErrMessageByCode(long errCode) {
- return errorCodeMap.get(errCode);
- }
-
-}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
index 8bb7084604851c695961564ed2f8c0142accb7fb..e9acffe0e3ca581f04f9a2677430dc43b0089832 100755
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
@@ -19,7 +19,7 @@ import java.sql.SQLWarning;
import java.util.List;
public class TSDBJNIConnector {
- static volatile Boolean isInitialized = false;
+ private static volatile Boolean isInitialized = false;
static {
System.loadLibrary("taos");
@@ -51,8 +51,6 @@ public class TSDBJNIConnector {
/**
* Returns the status of last result set in current connection
- *
- * @return
*/
public boolean isResultsetClosed() {
return this.isResultsetClosed;
@@ -112,7 +110,7 @@ public class TSDBJNIConnector {
*
* @throws SQLException
*/
- public int executeQuery(String sql) throws SQLException {
+ public long executeQuery(String sql) throws SQLException {
if (!this.isResultsetClosed) {
freeResultSet(taosResultSetPointer);
}
@@ -127,7 +125,6 @@ public class TSDBJNIConnector {
}
int code = this.getErrCode(pSql);
- affectedRows = code;
if (code < 0) {
affectedRows = -1;
if (code == TSDBConstants.JNI_TDENGINE_ERROR) {
@@ -146,7 +143,7 @@ public class TSDBJNIConnector {
if (taosResultSetPointer != TSDBConstants.JNI_NULL_POINTER) {
isResultsetClosed = false;
}
- return code;
+ return pSql;
}
private native long executeQueryImp(byte[] sqlBytes, long connection);
@@ -199,8 +196,6 @@ public class TSDBJNIConnector {
/**
* Close the open result set which is associated to the current connection. If the result set is already
* closed, return 0 for success.
- *
- * @return
*/
public int freeResultSet() {
int resCode = TSDBConstants.JNI_SUCCESS;
@@ -217,7 +212,7 @@ public class TSDBJNIConnector {
/**
* Get affected rows count
*/
- public int getAffectedRows(Long pSql) {
+ public int getAffectedRows(long pSql) {
int affectedRows = this.affectedRows;
if (affectedRows < 0) {
affectedRows = this.getAffectedRowsImp(this.taos, pSql);
@@ -225,7 +220,7 @@ public class TSDBJNIConnector {
return affectedRows;
}
- private native int getAffectedRowsImp(long connection, Long pSql);
+ private native int getAffectedRowsImp(long connection, long pSql);
/**
* Get schema metadata
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
index dbe1e41e6be861f8cf45d9dba2614cb36c527197..1cf024f30e4a49b79f12c0af8cb29e0416bd348b 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
@@ -51,13 +51,16 @@ public class TSDBStatement implements Statement {
if (isClosed) {
throw new SQLException("Invalid method call on a closed statement.");
}
- this.connecter.executeQuery(sql);
+ pSql = this.connecter.executeQuery(sql);
long resultSetPointer = this.connecter.getResultSet();
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
+ this.connecter.freeResultSet(pSql);
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
} else if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
+// create/insert/update/del/alter
+ this.connecter.freeResultSet(pSql);
return null;
} else {
return new TSDBResultSet(this.connecter, resultSetPointer);
@@ -68,17 +71,18 @@ public class TSDBStatement implements Statement {
if (isClosed) {
throw new SQLException("Invalid method call on a closed statement.");
}
- long res = this.connecter.executeQuery(sql);
+ pSql = this.connecter.executeQuery(sql);
long resultSetPointer = this.connecter.getResultSet();
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
- this.connecter.freeResultSet(res);
+ this.connecter.freeResultSet(pSql);
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
} else if (resultSetPointer != TSDBConstants.JNI_NULL_POINTER) {
this.connecter.freeResultSet();
throw new SQLException("The executed SQL is not a DML or a DDL");
} else {
- int num = this.connecter.getAffectedRows(res);
+ int num = this.connecter.getAffectedRows(pSql);
+ this.connecter.freeResultSet(pSql);
return num;
}
}
@@ -146,16 +150,19 @@ public class TSDBStatement implements Statement {
throw new SQLException("Invalid method call on a closed statement.");
}
boolean res = true;
- this.connecter.executeQuery(sql);
+ pSql = this.connecter.executeQuery(sql);
long resultSetPointer = this.connecter.getResultSet();
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
+ this.connecter.freeResultSet(pSql);
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
} else if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
// no result set is retrieved
res = false;
}
- return res;
+ this.connecter.freeResultSet(pSql);
+
+ return res;
}
public ResultSet getResultSet() throws SQLException {
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
index 3b479aafc35a50e85e42d9cda1e93c2d68f8e115..e20c6a815c190cfdc8bf01e7b0e1afe676c3790f 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
@@ -171,8 +171,7 @@ public class TSDBSubscribe {
state = 1;
try {
- TSDBResultSet resultSet = consume(subscription);
- callBack.invoke(resultSet);
+ callBack.invoke(consume(subscription));
} catch (Exception e) {
this.cancel();
throw new RuntimeException(e);
diff --git a/src/connector/jdbc/src/test/java/TestAsyncTSDBSubscribe.java b/src/connector/jdbc/src/test/java/TestAsyncTSDBSubscribe.java
index 5b2b6367ec5fe7cb46f0514b59931d8942f9bc74..55ab2fdc52ab183264088381ca4f2e475c0c4c08 100644
--- a/src/connector/jdbc/src/test/java/TestAsyncTSDBSubscribe.java
+++ b/src/connector/jdbc/src/test/java/TestAsyncTSDBSubscribe.java
@@ -3,10 +3,11 @@ import org.apache.commons.lang3.StringUtils;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.SQLException;
import java.util.Properties;
public class TestAsyncTSDBSubscribe {
- public static void main(String[] args) {
+ public static void main(String[] args) throws SQLException {
String usage = "java -cp taos-jdbcdriver-1.0.3_dev-dist.jar com.taosdata.jdbc.TSDBSubscribe -db dbName -topic topicName " +
"-tname tableName -h host";
if (args.length < 2) {
@@ -38,15 +39,18 @@ public class TestAsyncTSDBSubscribe {
}
Connection connection = null;
- TSDBSubscribe subscribe = null;
long subscribId = 0;
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ 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");
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata", properties);
String rawSql = "select * from " + tName + ";";
- subscribe = ((TSDBConnection) connection).createSubscribe();
+ TSDBSubscribe subscribe = ((TSDBConnection) connection).createSubscribe();
subscribId = subscribe.subscribe(topic, rawSql, false, 1000, new CallBack("first"));
long subscribId2 = subscribe.subscribe("test", rawSql, false, 1000, new CallBack("second"));
int a = 0;
@@ -55,6 +59,9 @@ public class TestAsyncTSDBSubscribe {
System.err.println("cancel subscribe");
} catch (Exception e) {
e.printStackTrace();
+ if (null != connection && !connection.isClosed()) {
+ connection.close();
+ }
}
}
diff --git a/src/connector/jdbc/src/test/java/TestPreparedStatement.java b/src/connector/jdbc/src/test/java/TestPreparedStatement.java
index 3b84645b5b0f250c453615d0afbd1f018bbe523f..2e387206a41997eb629ead85b55fef9320ea7d14 100644
--- a/src/connector/jdbc/src/test/java/TestPreparedStatement.java
+++ b/src/connector/jdbc/src/test/java/TestPreparedStatement.java
@@ -6,24 +6,31 @@ import java.util.Properties;
public class TestPreparedStatement {
- public static void main(String[] args) {
+ public static void main(String[] args) throws SQLException {
+ Connection connection = null;
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "localhost");
- Connection connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
+ connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
String rawSql = "select * from test.log0601";
// String[] params = new String[]{"ts", "c1"};
PreparedStatement pstmt = (TSDBPreparedStatement) connection.prepareStatement(rawSql);
ResultSet resSet = pstmt.executeQuery();
while(resSet.next()) {
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
- System.out.printf("%d: %s\n", i, resSet.getString(i));
+ System.out.printf("%d: %s \n", i, resSet.getString(i));
}
}
+ resSet.close();
+ pstmt.close();
+ connection.close();
} catch (Exception e) {
e.printStackTrace();
+ if (null != connection) {
+ connection.close();
+ }
}
}
}
diff --git a/src/connector/jdbc/src/test/java/TestTSDBDatabaseMetaData.java b/src/connector/jdbc/src/test/java/TestTSDBDatabaseMetaData.java
index 519d7c6ab1f89f08795c1ff010bc5de1e5491f05..f7e0e78441a9c2457a57605fe71e70a5dee609c2 100644
--- a/src/connector/jdbc/src/test/java/TestTSDBDatabaseMetaData.java
+++ b/src/connector/jdbc/src/test/java/TestTSDBDatabaseMetaData.java
@@ -1,29 +1,33 @@
import com.taosdata.jdbc.TSDBDriver;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
+import java.sql.*;
import java.util.Properties;
public class TestTSDBDatabaseMetaData {
- public static void main(String[] args) {
+ public static void main(String[] args) throws SQLException {
+ Connection connection = null;
+ DatabaseMetaData dbMetaData = null;
+ ResultSet resSet = null;
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "192.168.1.114");
- Connection connection = DriverManager.getConnection("jdbc:TAOS://192.168.1.114:0/?user=root&password=taosdata", properties);
- DatabaseMetaData dbMetaData = connection.getMetaData();
- ResultSet resSet = dbMetaData.getCatalogs();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "localhost");
+ connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
+ dbMetaData = connection.getMetaData();
+ resSet = dbMetaData.getCatalogs();
while(resSet.next()) {
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
System.out.printf("dbMetaData.getCatalogs(%d) = %s\n", i, resSet.getString(i));
}
}
+ resSet.close();
} catch (Exception e) {
e.printStackTrace();
+ if (null != connection) {
+ connection.close();
+ }
}
}
}
diff --git a/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java b/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java
index f12924c8a61a3dbeeec56f7d2c712472d771e8e7..f628f3cada5ef1542fc756184d6d6ca4955cd422 100644
--- a/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java
+++ b/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java
@@ -46,16 +46,20 @@ public class TestTSDBSubscribe {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ 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");
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata"
, properties);
String rawSql = "select * from " + tName + ";";
subscribe = ((TSDBConnection) connection).createSubscribe();
subscribId = subscribe.subscribe(topic, rawSql, false, 1000);
int a = 0;
+ TSDBResultSet resSet = null;
while (true) {
Thread.sleep(900);
- TSDBResultSet resSet = subscribe.consume(subscribId);
+ resSet = subscribe.consume(subscribId);
while (resSet.next()) {
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..98b0d38b8d31751873f57be5afc99b6cd4a92c43
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/AsyncSubscribeTest.java
@@ -0,0 +1,99 @@
+package com.taosdata.jdbc;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import static org.junit.Assert.assertTrue;
+
+public class AsyncSubscribeTest {
+ Connection connection = null;
+ Statement statement = null;
+ String dbName = "test";
+ String tName = "t0";
+ String host = "localhost";
+ String topic = "test";
+ long subscribId = 0;
+
+ @Before
+ public void createDatabase() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+ long ts = System.currentTimeMillis();
+ for (int i = 0; i < 2; i++) {
+ ts += i;
+ statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ }
+ }
+
+ @Test
+ public void subscribe() throws Exception {
+ TSDBSubscribe subscribe = null;
+ try {
+ String rawSql = "select * from " + dbName + "." + tName + ";";
+ System.out.println(rawSql);
+ subscribe = ((TSDBConnection) connection).createSubscribe();
+ subscribId = subscribe.subscribe(topic, rawSql, false, 1000, new CallBack("first"));
+
+ assertTrue(subscribId > 0);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Thread.sleep(2000);
+ subscribe.unsubscribe(subscribId, true);
+ }
+
+ private static class CallBack implements TSDBSubscribeCallBack {
+ private String name = "";
+
+ public CallBack(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void invoke(TSDBResultSet resultSet) {
+ try {
+ while (null != resultSet && resultSet.next()) {
+ System.out.print("callback_" + name + ": ");
+ for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
+ System.out.printf(i + ": " + resultSet.getString(i) + "\t");
+ }
+ System.out.println();
+ }
+ resultSet.close();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @After
+ public void close() throws Exception {
+ statement.executeQuery("drop database test");
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+ }
+}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e5dabfe81722a45ea94858eaf833f2355cc528c
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java
@@ -0,0 +1,62 @@
+package com.taosdata.jdbc;
+
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import static org.junit.Assert.assertTrue;
+
+public class ConnectionTest {
+ static Connection connection = null;
+ static Statement statement = null;
+ static String dbName = "test";
+ static String stbName = "st";
+ static String host = "localhost";
+
+ @Test
+ public void testConnection() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ assertTrue(null != connection);
+ statement = connection.createStatement();
+ assertTrue(null != statement);
+
+ // try reconnect
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ try {
+ statement.execute("create database if not exists " + dbName);
+ } catch (SQLException e) {
+ assert false : "create database error: " + e.getMessage();
+ }
+
+ try {
+ if (!connection.isClosed()) {
+ if (!statement.isClosed()) {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ }
+ connection.close();
+ Thread.sleep(10);
+ }
+ } catch (Exception e) {
+ assert false : "close connection error: " + e.getMessage();
+ }
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..20ebc093ec82e46c0e09b9a4ebc6289300cf1594
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java
@@ -0,0 +1,245 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.Properties;
+
+public class DatabaseMetaDataTest {
+ static Connection connection = null;
+ static PreparedStatement statement = null;
+ static String dbName = "test";
+ static String tName = "t0";
+ static String host = "localhost";
+
+ @BeforeClass
+ public static void createConnection() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata",
+ properties);
+
+ String sql = "drop database if exists " + dbName;
+ statement = (TSDBPreparedStatement) connection.prepareStatement(sql);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+ }
+
+ @Test
+ public void testMetaDataTest() throws SQLException {
+
+ DatabaseMetaData databaseMetaData = connection.getMetaData();
+ ResultSet resultSet = databaseMetaData.getTables(dbName, "t*", "t*", new String[]{"t"});
+ while (resultSet.next()) {
+ for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
+ System.out.printf("%d: %s\n", i, resultSet.getString(i));
+ }
+ }
+ resultSet.close();
+ databaseMetaData.isWrapperFor(null);
+ databaseMetaData.allProceduresAreCallable();
+ databaseMetaData.allTablesAreSelectable();
+ databaseMetaData.getURL();
+ databaseMetaData.getUserName();
+ databaseMetaData.isReadOnly();
+ databaseMetaData.nullsAreSortedHigh();
+ databaseMetaData.nullsAreSortedLow();
+ databaseMetaData.nullsAreSortedAtStart();
+ databaseMetaData.nullsAreSortedAtEnd();
+ databaseMetaData.getDatabaseProductName();
+ databaseMetaData.getDatabaseProductVersion();
+ databaseMetaData.getDriverName();
+ databaseMetaData.getDriverVersion();
+ databaseMetaData.getDriverMajorVersion();
+ databaseMetaData.getDriverMinorVersion();
+ databaseMetaData.usesLocalFiles();
+ databaseMetaData.usesLocalFilePerTable();
+ databaseMetaData.supportsMixedCaseIdentifiers();
+ databaseMetaData.storesUpperCaseIdentifiers();
+ databaseMetaData.storesLowerCaseIdentifiers();
+ databaseMetaData.storesMixedCaseIdentifiers();
+ databaseMetaData.supportsMixedCaseQuotedIdentifiers();
+ databaseMetaData.storesUpperCaseQuotedIdentifiers();
+ databaseMetaData.storesLowerCaseQuotedIdentifiers();
+ databaseMetaData.storesMixedCaseQuotedIdentifiers();
+ databaseMetaData.getIdentifierQuoteString();
+ databaseMetaData.getSQLKeywords();
+ databaseMetaData.getNumericFunctions();
+ databaseMetaData.getStringFunctions();
+ databaseMetaData.getSystemFunctions();
+ databaseMetaData.getTimeDateFunctions();
+ databaseMetaData.getSearchStringEscape();
+ databaseMetaData.getExtraNameCharacters();
+ databaseMetaData.supportsAlterTableWithAddColumn();
+ databaseMetaData.supportsAlterTableWithDropColumn();
+ databaseMetaData.supportsColumnAliasing();
+ databaseMetaData.nullPlusNonNullIsNull();
+ databaseMetaData.supportsConvert();
+ databaseMetaData.supportsConvert(0, 0);
+ databaseMetaData.supportsTableCorrelationNames();
+ databaseMetaData.supportsDifferentTableCorrelationNames();
+ databaseMetaData.supportsExpressionsInOrderBy();
+ databaseMetaData.supportsOrderByUnrelated();
+ databaseMetaData.supportsGroupBy();
+ databaseMetaData.supportsGroupByUnrelated();
+ databaseMetaData.supportsGroupByBeyondSelect();
+ databaseMetaData.supportsLikeEscapeClause();
+ databaseMetaData.supportsMultipleResultSets();
+ databaseMetaData.supportsMultipleTransactions();
+ databaseMetaData.supportsNonNullableColumns();
+ databaseMetaData.supportsMinimumSQLGrammar();
+ databaseMetaData.supportsCoreSQLGrammar();
+ databaseMetaData.supportsExtendedSQLGrammar();
+ databaseMetaData.supportsANSI92EntryLevelSQL();
+ databaseMetaData.supportsANSI92IntermediateSQL();
+ databaseMetaData.supportsANSI92FullSQL();
+ databaseMetaData.supportsIntegrityEnhancementFacility();
+ databaseMetaData.supportsOuterJoins();
+ databaseMetaData.supportsFullOuterJoins();
+ databaseMetaData.supportsLimitedOuterJoins();
+ databaseMetaData.getSchemaTerm();
+ databaseMetaData.getProcedureTerm();
+ databaseMetaData.getCatalogTerm();
+ databaseMetaData.isCatalogAtStart();
+ databaseMetaData.getCatalogSeparator();
+ databaseMetaData.supportsSchemasInDataManipulation();
+ databaseMetaData.supportsSchemasInProcedureCalls();
+ databaseMetaData.supportsSchemasInTableDefinitions();
+ databaseMetaData.supportsSchemasInIndexDefinitions();
+ databaseMetaData.supportsSchemasInPrivilegeDefinitions();
+ databaseMetaData.supportsCatalogsInDataManipulation();
+ databaseMetaData.supportsCatalogsInProcedureCalls();
+ databaseMetaData.supportsCatalogsInTableDefinitions();
+ databaseMetaData.supportsCatalogsInIndexDefinitions();
+ databaseMetaData.supportsCatalogsInPrivilegeDefinitions();
+ databaseMetaData.supportsPositionedDelete();
+ databaseMetaData.supportsPositionedUpdate();
+ databaseMetaData.supportsSelectForUpdate();
+ databaseMetaData.supportsStoredProcedures();
+ databaseMetaData.supportsSubqueriesInComparisons();
+ databaseMetaData.supportsSubqueriesInExists();
+ databaseMetaData.supportsSubqueriesInIns();
+ databaseMetaData.supportsSubqueriesInQuantifieds();
+ databaseMetaData.supportsCorrelatedSubqueries();
+ databaseMetaData.supportsUnion();
+ databaseMetaData.supportsUnionAll();
+ databaseMetaData.supportsOpenCursorsAcrossCommit();
+ databaseMetaData.supportsOpenCursorsAcrossRollback();
+ databaseMetaData.supportsOpenStatementsAcrossCommit();
+ databaseMetaData.supportsOpenStatementsAcrossRollback();
+ databaseMetaData.getMaxBinaryLiteralLength();
+ databaseMetaData.getMaxCharLiteralLength();
+ databaseMetaData.getMaxColumnNameLength();
+ databaseMetaData.getMaxColumnsInGroupBy();
+ databaseMetaData.getMaxColumnsInIndex();
+ databaseMetaData.getMaxColumnsInOrderBy();
+ databaseMetaData.getMaxColumnsInSelect();
+ databaseMetaData.getMaxColumnsInTable();
+ databaseMetaData.getMaxConnections();
+ databaseMetaData.getMaxCursorNameLength();
+ databaseMetaData.getMaxIndexLength();
+ databaseMetaData.getMaxSchemaNameLength();
+ databaseMetaData.getMaxProcedureNameLength();
+ databaseMetaData.getMaxCatalogNameLength();
+ databaseMetaData.getMaxRowSize();
+ databaseMetaData.doesMaxRowSizeIncludeBlobs();
+ databaseMetaData.getMaxStatementLength();
+ databaseMetaData.getMaxStatements();
+ databaseMetaData.getMaxTableNameLength();
+ databaseMetaData.getMaxTablesInSelect();
+ databaseMetaData.getMaxUserNameLength();
+ databaseMetaData.getDefaultTransactionIsolation();
+ databaseMetaData.supportsTransactions();
+ databaseMetaData.supportsTransactionIsolationLevel(0);
+ databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions();
+ databaseMetaData.supportsDataManipulationTransactionsOnly();
+ databaseMetaData.dataDefinitionCausesTransactionCommit();
+ databaseMetaData.dataDefinitionIgnoredInTransactions();
+ try {
+ databaseMetaData.getProcedures("", "", "");
+ } catch (Exception e) {
+ }
+ try {
+ databaseMetaData.getProcedureColumns("", "", "", "");
+ } catch (Exception e) {
+ }
+ try {
+ databaseMetaData.getTables("", "", "", new String[]{""});
+ } catch (Exception e) {
+ }
+ databaseMetaData.getSchemas();
+ databaseMetaData.getCatalogs();
+// databaseMetaData.getTableTypes();
+
+ databaseMetaData.getColumns("", "", "", "");
+ databaseMetaData.getColumnPrivileges("", "", "", "");
+ databaseMetaData.getTablePrivileges("", "", "");
+ databaseMetaData.getBestRowIdentifier("", "", "", 0, false);
+ databaseMetaData.getVersionColumns("", "", "");
+ databaseMetaData.getPrimaryKeys("", "", "");
+ databaseMetaData.getImportedKeys("", "", "");
+ databaseMetaData.getExportedKeys("", "", "");
+ databaseMetaData.getCrossReference("", "", "", "", "", "");
+ databaseMetaData.getTypeInfo();
+ databaseMetaData.getIndexInfo("", "", "", false, false);
+ databaseMetaData.supportsResultSetType(0);
+ databaseMetaData.supportsResultSetConcurrency(0, 0);
+ databaseMetaData.ownUpdatesAreVisible(0);
+ databaseMetaData.ownDeletesAreVisible(0);
+ databaseMetaData.ownInsertsAreVisible(0);
+ databaseMetaData.othersUpdatesAreVisible(0);
+ databaseMetaData.othersDeletesAreVisible(0);
+ databaseMetaData.othersInsertsAreVisible(0);
+ databaseMetaData.updatesAreDetected(0);
+ databaseMetaData.deletesAreDetected(0);
+ databaseMetaData.insertsAreDetected(0);
+ databaseMetaData.supportsBatchUpdates();
+ databaseMetaData.getUDTs("", "", "", new int[]{0});
+ databaseMetaData.getConnection();
+ databaseMetaData.supportsSavepoints();
+ databaseMetaData.supportsNamedParameters();
+ databaseMetaData.supportsMultipleOpenResults();
+ databaseMetaData.supportsGetGeneratedKeys();
+ databaseMetaData.getSuperTypes("", "", "");
+ databaseMetaData.getSuperTables("", "", "");
+ databaseMetaData.getAttributes("", "", "", "");
+ databaseMetaData.supportsResultSetHoldability(0);
+ databaseMetaData.getResultSetHoldability();
+ databaseMetaData.getDatabaseMajorVersion();
+ databaseMetaData.getDatabaseMinorVersion();
+ databaseMetaData.getJDBCMajorVersion();
+ databaseMetaData.getJDBCMinorVersion();
+ databaseMetaData.getSQLStateType();
+ databaseMetaData.locatorsUpdateCopy();
+ databaseMetaData.supportsStatementPooling();
+ databaseMetaData.getRowIdLifetime();
+ databaseMetaData.getSchemas("", "");
+ databaseMetaData.supportsStoredFunctionsUsingCallSyntax();
+ databaseMetaData.autoCommitFailureClosesAllResultSets();
+ databaseMetaData.getClientInfoProperties();
+ databaseMetaData.getFunctions("", "", "");
+ databaseMetaData.getFunctionColumns("", "", "", "");
+ databaseMetaData.getPseudoColumns("", "", "", "");
+ databaseMetaData.generatedKeyAlwaysReturned();
+
+ }
+
+ @AfterClass
+ public static void close() throws Exception {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b42d46aefecce035770ca3dbb71ce7342647b6f2
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java
@@ -0,0 +1,93 @@
+package com.taosdata.jdbc;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+
+public class ImportTest {
+ Connection connection = null;
+ Statement statement = null;
+ String dbName = "test";
+ String tName = "t0";
+ String host = "localhost";
+
+ @Before
+ public void createDatabase() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+
+ }
+
+ @Test
+ public void insertData() throws Exception {
+ long ts = 1496732686000l;
+
+ for (int i = 0; i < 50; i++) {
+ ts++;
+ int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
+ assertEquals(1, row);
+ }
+ }
+
+ @Test
+ public void selectData() throws Exception {
+ insertData();
+ String sql = "select * from test.t0";
+ ResultSet resSet = statement.executeQuery(sql);
+
+ while (resSet.next()) {
+ for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
+ System.out.printf(i + ": " + resSet.getString(i) + "\t");
+ }
+ }
+ resSet.close();
+ }
+
+ @Test
+ public void importData() throws Exception {
+ // 避免时间重复
+ long ts = 1496732686000l;
+
+ StringBuilder sqlBuilder = new StringBuilder("insert into ").append(dbName).append(".").append(tName).append(" values ");
+
+ for (int i = 0; i < 50; i++) {
+ int a = i / 5;
+ long t = ts + a;
+ sqlBuilder.append("(").append(t).append(",").append((100 + i)).append(",").append(i).append(") ");
+ }
+ System.out.println(sqlBuilder.toString());
+ int rows = statement.executeUpdate(sqlBuilder.toString());
+ System.out.println(rows);
+ assertEquals(10, rows);
+ }
+
+ @After
+ public void close() throws Exception {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c49727a7f0f0dee26c1e0a9b5c31a7a3df0724f
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
@@ -0,0 +1,201 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+@FixMethodOrder(MethodSorters.DEFAULT)
+public class PreparedStatementTest {
+ static Connection connection = null;
+ static PreparedStatement statement = null;
+ static String dbName = "test";
+ static String tName = "t0";
+ static String host = "localhost";
+ static ResultSet resSet = null;
+
+ @BeforeClass
+ public static void createConnection() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata",
+ properties);
+
+ String sql = "drop database if exists " + dbName;
+ statement = (TSDBPreparedStatement) connection.prepareStatement(sql);
+
+ }
+
+ @Test
+ public void createTableAndQuery() throws SQLException {
+ long ts = System.currentTimeMillis();
+
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + "(ts timestamp, k1 int)");
+ statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
+
+ PreparedStatement selectStatement = connection.prepareStatement("select * from " + dbName + "." + tName);
+
+ ResultSet resultSet = selectStatement.executeQuery();
+ assertTrue(null != resultSet);
+
+ boolean isClosed = statement.isClosed();
+ assertEquals(false, isClosed);
+ }
+
+ @Test
+ public void testPreparedStatement() throws SQLException {
+ long ts = System.currentTimeMillis() + 20000;
+ PreparedStatement saveStatement = connection
+ .prepareStatement("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
+
+ int affectedRows = saveStatement.executeUpdate();
+ assertTrue(1 == affectedRows);
+ }
+
+ @Test
+ public void testSavedPreparedStatement() throws SQLException {
+ long ts = System.currentTimeMillis();
+
+ TSDBPreparedStatement saveStatement = (TSDBPreparedStatement) connection
+ .prepareStatement("insert into " + dbName + "." + tName + " values (?, ?)");
+
+ saveStatement.setObject(1, ts + 10000);
+ saveStatement.setObject(2, 3);
+ int rows = saveStatement.executeUpdate();
+ assertEquals(1, rows);
+ }
+
+ @Test
+ public void testUnsupport() {
+ // if(null == resSet) {
+ // return;
+ // }
+ TSDBPreparedStatement tsdbStatement = (TSDBPreparedStatement) statement;
+ try {
+ tsdbStatement.unwrap(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isWrapperFor(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMaxFieldSize();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setMaxFieldSize(0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setEscapeProcessing(true);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.cancel();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getWarnings();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.clearWarnings();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setCursorName(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMoreResults();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setFetchDirection(0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getFetchDirection();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetConcurrency();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetType();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getConnection();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMoreResults();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getGeneratedKeys();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, 0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, new int[]{0});
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, new String[]{"str1", "str2"});
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetHoldability();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setPoolable(true);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isPoolable();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.closeOnCompletion();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isCloseOnCompletion();
+ } catch (SQLException e) {
+ }
+ }
+
+ @AfterClass
+ public static void close() throws Exception {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b74a98db2304b517f01f75cb5e0ca13d8858cce
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
@@ -0,0 +1,829 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import javax.sql.rowset.serial.SerialBlob;
+import javax.sql.rowset.serial.SerialClob;
+import java.sql.*;
+import java.util.HashMap;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ResultSetTest {
+ static Connection connection = null;
+ static Statement statement = null;
+ static String dbName = "test";
+ static String tName = "t0";
+ static String host = "localhost";
+ static ResultSet resSet = null;
+
+ @BeforeClass
+ public static void createDatabaseAndTable() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ 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");
+
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName +
+ " (ts timestamp, k1 int, k2 bigint, k3 float, k4 double, k5 binary(30), k6 smallint, k7 bool, k8 nchar(20))");
+
+ statement.executeQuery("use " + dbName);
+ }
+
+ @Test
+ public void testResultSet() {
+ String sql = null;
+ long ts = 1496732686000l;
+ int v1 = 2147483600;
+ long v2 = ts + 1000;
+ float v3 = 3.1415926f;
+ double v4 = 3.1415926535897;
+ String v5 = "涛思数据,强~!";
+ short v6 = 12;
+ boolean v7 = false;
+ String v8 = "TDengine is powerful";
+
+ sql = "insert into " + dbName + "." + tName + " values (" + ts + "," + v1 + "," + v2 + "," + v3 + "," + v4
+ + ",\"" + v5 + "\"," + v6 + "," + v7 + ",\"" + v8 + "\")";
+
+ try {
+ statement.executeUpdate(sql);
+ assertEquals(1, statement.getUpdateCount());
+ } catch (SQLException e) {
+ assert false : "insert error " + e.getMessage();
+ }
+
+ try {
+ statement.executeQuery("select * from " + dbName + "." + tName);
+ resSet = statement.getResultSet();
+ System.out.println(((TSDBResultSet) resSet).getRowData());
+ while (resSet.next()) {
+ assertEquals(ts, resSet.getLong(1));
+ assertEquals(ts, resSet.getLong("ts"));
+
+ System.out.println(resSet.getTimestamp(1));
+
+ assertEquals(v1, resSet.getInt(2));
+ assertEquals(v1, resSet.getInt("k1"));
+
+ assertEquals(v2, resSet.getLong(3));
+ assertEquals(v2, resSet.getLong("k2"));
+
+ assertEquals(v3, resSet.getFloat(4), 7);
+ assertEquals(v3, resSet.getFloat("k3"), 7);
+
+ assertEquals(v4, resSet.getDouble(5), 13);
+ assertEquals(v4, resSet.getDouble("k4"), 13);
+
+ assertEquals(v5, resSet.getString(6));
+ assertEquals(v5, resSet.getString("k5"));
+
+ assertEquals(v6, resSet.getShort(7));
+ assertEquals(v6, resSet.getShort("k6"));
+
+ assertEquals(v7, resSet.getBoolean(8));
+ assertEquals(v7, resSet.getBoolean("k7"));
+
+ assertEquals(v8, resSet.getString(9));
+ assertEquals(v8, resSet.getString("k8"));
+
+ resSet.getBytes(9);
+ resSet.getObject(6);
+ resSet.getObject("k8");
+ }
+ if (!resSet.isClosed()) {
+ resSet.close();
+ }
+ } catch (SQLException e) {
+ assert false : "insert error " + e.getMessage();
+ }
+ }
+
+ @Test
+ public void testUnsupport() throws SQLException {
+ statement.executeQuery("show databases");
+ resSet = statement.getResultSet();
+ try {
+ resSet.unwrap(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.isWrapperFor(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getAsciiStream(0);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getUnicodeStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getBinaryStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getAsciiStream("");
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getUnicodeStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getBinaryStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getWarnings();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.clearWarnings();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getCursorName();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getCharacterStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getCharacterStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.isBeforeFirst();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.isAfterLast();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.isFirst();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.isLast();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.beforeFirst();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.afterLast();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.first();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.last();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.absolute(1);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.relative(1);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.previous();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.setFetchDirection(0);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getFetchDirection();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.setFetchSize(0);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getFetchSize();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getConcurrency();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.rowUpdated();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.rowInserted();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.rowDeleted();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNull(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBoolean(0, true);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateByte(0, (byte) 2);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateShort(0, (short) 1);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateInt(0, 0);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateLong(0, 0l);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateFloat(0, 3.14f);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateDouble(0, 3.1415);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBigDecimal(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateString(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBytes(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateDate(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateTime(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateTimestamp(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateObject(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateObject(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNull(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBoolean("", false);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateByte("", (byte) 1);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateShort("", (short) 1);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateInt("", 0);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateLong("", 0l);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateFloat("", 3.14f);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateDouble("", 3.1415);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBigDecimal(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateString(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBytes(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateDate(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateTime(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateTimestamp(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateObject(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateObject(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.insertRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.deleteRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.refreshRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.cancelRowUpdates();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.moveToInsertRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.moveToCurrentRow();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getStatement();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getObject(0, new HashMap<>());
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getRef(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getBlob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getClob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getArray(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getObject("", new HashMap<>());
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getRef(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getBlob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getClob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getArray(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getDate(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getDate(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getTime(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getTime(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getTimestamp(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getTimestamp(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getURL(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getURL(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateRef(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateRef(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBlob(0, new SerialBlob("".getBytes("UTF8")));
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBlob("", new SerialBlob("".getBytes("UTF8")));
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateClob("", new SerialClob("".toCharArray()));
+ } catch (Exception e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateClob(0, new SerialClob("".toCharArray()));
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateArray(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateArray(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getRowId(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getRowId(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateRowId(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateRowId(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getHoldability();
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNString(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNString(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+
+ try {
+ resSet.getNClob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getNClob(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getSQLXML(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getSQLXML(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateSQLXML(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateSQLXML(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getNCharacterStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.getNCharacterStream(null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+
+ try {
+ resSet.updateNCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateNCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateAsciiStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateBinaryStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ try {
+ resSet.updateCharacterStream(null, null);
+ } catch (SQLException e) {
+ assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
+ }
+ }
+
+ @Test
+ public void testBatch() throws SQLException {
+ String[] sqls = new String[]{"insert into test.t0 values (1496732686001,2147483600,1496732687000,3.1415925,3.1415926\n" +
+ "535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")", "insert into test.t0 values (1496732686002,2147483600,1496732687000,3.1415925,3.1415926\n" +
+ "535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")"};
+ for (String sql : sqls) {
+ statement.addBatch(sql);
+ }
+ int[] res = statement.executeBatch();
+ assertEquals(res.length, 2);
+ statement.clearBatch();
+ }
+
+ @AfterClass
+ public static void close() throws Exception {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..282ca6c1a7ca404a2c77d9ed1165f0cda606ebfb
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
@@ -0,0 +1,72 @@
+package com.taosdata.jdbc;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+
+public class SelectTest {
+ Connection connection = null;
+ Statement statement = null;
+ String dbName = "test";
+ String tName = "t0";
+ String host = "localhost";
+
+ @Before
+ public void createDatabaseAndTable() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+
+ }
+
+ @Test
+ public void selectData() throws SQLException {
+ long ts = 1496732686000l;
+
+ for (int i = 0; i < 50; i++) {
+ ts++;
+ int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
+ assertEquals(1, row);
+ }
+
+ String sql = "select * from " + dbName + "." + tName;
+ ResultSet resSet = statement.executeQuery(sql);
+
+ int num = 0;
+ while (resSet.next()) {
+ num++;
+ }
+ resSet.close();
+
+ assertEquals(num, 50);
+ }
+
+ @After
+ public void close() throws Exception {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b275112e186bffa0fe90b468f71e04354f4eaed3
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
@@ -0,0 +1,123 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class StableTest {
+ static Connection connection = null;
+ static Statement statement = null;
+ static String dbName = "test";
+ static String stbName = "st";
+ static String host = "localhost";
+
+ @BeforeClass
+ public static void createDatabase() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeQuery("use " + dbName);
+ }
+
+// @Test
+ public void createStable() {
+ String sql = "create table " + stbName + " (ts timestamp, v1 int, v2 int) tags (tg nchar(20)) ";
+
+ try {
+ statement.executeUpdate(sql);
+ } catch (SQLException e) {
+ assert false : "error create stable" + e.getMessage();
+ }
+ }
+
+// @Test
+ public void createTable() {
+ String sql = "create table t1 using " + stbName + " tags (\"beijing\")";
+
+ try {
+ statement.executeUpdate(sql);
+ } catch (SQLException e) {
+ assert false : "error create table" + e.getMessage();
+ }
+ }
+
+ @Test
+ public void describeSTable() {
+ createStable();
+ String sql = "describe " + stbName;
+ int num = 0;
+ System.out.println("describe stable");
+ try {
+ ResultSet res = statement.executeQuery(sql);
+ while (res.next()) {
+ for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
+ System.out.printf("%d: %s\n", i, res.getString(i));
+ }
+ num++;
+ }
+ res.close();
+ assertEquals(4, num);
+ } catch (SQLException e) {
+ assert false : "error describe stable" + e.getMessage();
+ }
+ }
+
+ @Test
+ public void describeTable() {
+ createTable();
+ String sql = "describe t1";
+ int num = 0;
+ System.out.println("describe table");
+ try {
+ ResultSet res = statement.executeQuery(sql);
+ while (res.next()) {
+ for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
+ System.out.printf("%d: %s\n", i, res.getString(i));
+ }
+ num++;
+ }
+ res.close();
+ assertEquals(4, num);
+ } catch (SQLException e) {
+ assert false : "error describe stable" + e.getMessage();
+ }
+ }
+
+ // @Test
+ public void validCreateSql() {
+ String sql = "create table t2 using " + stbName + " tags (\"beijing\")";
+ boolean valid = ((TSDBConnection) connection).getConnection().validateCreateTableSql(sql);
+ assertEquals(true, valid);
+ }
+
+ @AfterClass
+ public static void close() throws Exception {
+ if (!statement.isClosed()) {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4be68519c5ba10601e23debf15db254c42638830
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java
@@ -0,0 +1,174 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class StatementTest {
+ static Connection connection = null;
+ static Statement statement = null;
+ static String dbName = "test";
+ static String tName = "t0";
+ static String host = "localhost";
+ static ResultSet resSet = null;
+
+ @BeforeClass
+ public static void createConnection() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+
+ }
+
+ @Test
+ public void createTableAndQuery() throws SQLException {
+ long ts = System.currentTimeMillis();
+
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + "(ts timestamp, k1 int)");
+ statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
+ statement.executeQuery("select * from " + dbName + "." + tName);
+ ResultSet resultSet = statement.getResultSet();
+ assertTrue(null != resultSet);
+
+ boolean isClosed = statement.isClosed();
+ assertEquals(false, isClosed);
+ }
+
+ @Test
+ public void testUnsupport() {
+// if(null == resSet) {
+// return;
+// }
+ TSDBStatement tsdbStatement = (TSDBStatement) statement;
+ try {
+ tsdbStatement.unwrap(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isWrapperFor(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMaxFieldSize();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setMaxFieldSize(0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setEscapeProcessing(true);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.cancel();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getWarnings();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.clearWarnings();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setCursorName(null);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMoreResults();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setFetchDirection(0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getFetchDirection();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetConcurrency();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetType();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getConnection();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getMoreResults();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getGeneratedKeys();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, 0);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, new int[]{0});
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.executeUpdate(null, new String[]{"str1", "str2"});
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.getResultSetHoldability();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.setPoolable(true);
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isPoolable();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.closeOnCompletion();
+ } catch (SQLException e) {
+ }
+ try {
+ tsdbStatement.isCloseOnCompletion();
+ } catch (SQLException e) {
+ }
+ }
+
+ @AfterClass
+ public static void close() throws Exception {
+ if (!statement.isClosed()) {
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+
+ }
+ }
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..25f7f7a285773240c222e4c6a735053dd83f217b
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
@@ -0,0 +1,94 @@
+package com.taosdata.jdbc;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import static org.junit.Assert.assertTrue;
+
+public class SubscribeTest {
+ Connection connection = null;
+ Statement statement = null;
+ String dbName = "test";
+ String tName = "t0";
+ String host = "localhost";
+ String topic = "test";
+
+ @Before
+ public void createDatabase() throws SQLException {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ return;
+ }
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
+ , properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+ long ts = System.currentTimeMillis();
+ for (int i = 0; i < 2; i++) {
+ ts += i;
+ statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ }
+ }
+
+ @Test
+ public void subscribe() throws Exception {
+ TSDBSubscribe subscribe = null;
+ long subscribId = 0;
+ try {
+
+ String rawSql = "select * from " + dbName + "." + tName + ";";
+ System.out.println(rawSql);
+ subscribe = ((TSDBConnection) connection).createSubscribe();
+ subscribId = subscribe.subscribe(topic, rawSql, false, 1000);
+
+ assertTrue(subscribId > 0);
+
+ int a = 0;
+ while (true) {
+ Thread.sleep(900);
+ TSDBResultSet resSet = subscribe.consume(subscribId);
+
+ while (resSet.next()) {
+ for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
+ System.out.printf(i + ": " + resSet.getString(i) + "\t");
+ }
+ System.out.println("\n======" + a + "==========");
+ }
+ resSet.close();
+ a++;
+ if (a >= 2) {
+ break;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (null != subscribe && 0 != subscribId) {
+ subscribe.unsubscribe(subscribId, true);
+ }
+ }
+ }
+
+ @After
+ public void close() throws Exception {
+ statement.executeQuery("drop database " + dbName);
+ statement.close();
+ connection.close();
+ Thread.sleep(10);
+ }
+}
\ No newline at end of file
diff --git a/src/kit/taosnetwork/client.c b/src/kit/taosnetwork/client.c
index 65b866a99b302a83472eff54367682dcd42b749c..b2c7f729b59b8a697e1f078f25dbad180c849442 100644
--- a/src/kit/taosnetwork/client.c
+++ b/src/kit/taosnetwork/client.c
@@ -13,6 +13,7 @@
* along with this program. If not, see .
*/
+#include
#include
#include
#include
@@ -34,6 +35,36 @@ typedef struct {
char *host[15];
} info;
+typedef struct Arguments {
+ char * host;
+ uint16_t port;
+ uint16_t max_port;
+} SArguments;
+
+static struct argp_option options[] = {
+ {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0},
+ {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6020.", 1},
+ {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}};
+
+static error_t parse_opt(int key, char *arg, struct argp_state *state) {
+
+ SArguments *arguments = state->input;
+ switch (key) {
+ case 'h':
+ arguments->host = arg;
+ break;
+ case 'p':
+ arguments->port = atoi(arg);
+ break;
+ case 'm':
+ arguments->max_port = atoi(arg);
+ break;
+ }
+ return 0;
+}
+
+static struct argp argp = {options, parse_opt, 0, 0};
+
void *checkPort(void *sarg) {
info *pinfo = (info *)sarg;
int port = pinfo->port;
@@ -97,7 +128,7 @@ void *checkUPort(void *sarg) {
sprintf(sendbuf, "send msg port_%d by udp", port);
- socklen_t sin_size = sizeof(*(struct sockaddr*)&serverAddr);
+ socklen_t sin_size = sizeof(*(struct sockaddr *)&serverAddr);
sendto(clientSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&serverAddr, (int)sin_size);
@@ -113,14 +144,19 @@ void *checkUPort(void *sarg) {
return NULL;
}
-int main() {
- int port = 6020;
- char *host = "127.0.0.1";
+int main(int argc, char *argv[]) {
+ SArguments arguments = {"127.0.0.1", 6020, 6050};
+
+ argp_parse(&argp, argc, argv, 0, 0, &arguments);
+
+ printf("host: %s\tport: %d\tmax_port: %d\n", arguments.host, arguments.port, arguments.max_port);
+
+ int port = arguments.port;
+ char *host = arguments.host;
info *tinfo = malloc(sizeof(info));
info *uinfo = malloc(sizeof(info));
- for (size_t i = 0; i < 30; i++) {
- port++;
+ for (; port < arguments.max_port; port++) {
printf("For test: %s:%d\n", host, port);
*tinfo->host = host;
diff --git a/src/kit/taosnetwork/server.c b/src/kit/taosnetwork/server.c
index 7dcc9cbeda70d3c51fd678138f1273071d7a7e7f..c967828f0b28ea8bd55c91c3473a7762ac815356 100644
--- a/src/kit/taosnetwork/server.c
+++ b/src/kit/taosnetwork/server.c
@@ -13,6 +13,7 @@
* along with this program. If not, see .
*/
+#include
#include
#include
#include
@@ -34,6 +35,36 @@ typedef struct {
int type; // 0: tcp, 1: udo, default: 0
} info;
+typedef struct Arguments {
+ char * host;
+ uint16_t port;
+ uint16_t max_port;
+} SArguments;
+
+static struct argp_option options[] = {
+ {0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0},
+ {0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6020.", 1},
+ {0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}};
+
+static error_t parse_opt(int key, char *arg, struct argp_state *state) {
+
+ SArguments *arguments = state->input;
+ switch (key) {
+ case 'h':
+ arguments->host = arg;
+ break;
+ case 'p':
+ arguments->port = atoi(arg);
+ break;
+ case 'm':
+ arguments->max_port = atoi(arg);
+ break;
+ }
+ return 0;
+}
+
+static struct argp argp = {options, parse_opt, 0, 0};
+
static void *bindPort(void *sarg) {
info *pinfo = (info *)sarg;
int port = pinfo->port;
@@ -170,15 +201,21 @@ static void *bindUPort(void *sarg) {
}
-int main() {
- int port = 6020;
- pthread_t *pids = malloc(60 * sizeof(pthread_t));
- info * infos = malloc(30 * sizeof(info));
- info * uinfos = malloc(30 * sizeof(info));
+int main(int argc, char *argv[]) {
+ SArguments arguments = {"127.0.0.1", 6020, 6050};
+ argp_parse(&argp, argc, argv, 0, 0, &arguments);
+ int port = arguments.port;
- for (size_t i = 0; i < 30; i++) {
- port++;
+ int num = arguments.max_port - arguments.port;
+
+ if (num < 0) {
+ num = 1;
+ }
+ pthread_t *pids = malloc(2 * num * sizeof(pthread_t));
+ info * infos = malloc(num * sizeof(info));
+ info * uinfos = malloc(num * sizeof(info));
+ for (size_t i = 0; i < num; i++) {
info *pinfo = infos++;
pinfo->port = port;
@@ -191,14 +228,15 @@ int main() {
info *uinfo = uinfos++;
uinfo->port = port;
uinfo->type = 1;
- if (pthread_create(pids + 30 + i, NULL, bindUPort, uinfo) != 0) //创建线程
+ port++;
+ if (pthread_create(pids + num + i, NULL, bindUPort, uinfo) != 0) //创建线程
{ //创建线程失败
printf("创建线程失败: %d.\n", port);
exit(0);
}
}
- for (int i = 0; i < 30; i++) {
+ for (int i = 0; i < num; i++) {
pthread_join(pids[i], NULL);
- pthread_join(pids[(10 + i)], NULL);
+ pthread_join(pids[(num + i)], NULL);
}
}
diff --git a/src/kit/taosnetwork/taosnetwork_client.c b/src/kit/taosnetwork/taosnetwork_client.c
deleted file mode 100644
index 072610a0357211e2412b6a07f9621cac32e80c50..0000000000000000000000000000000000000000
--- a/src/kit/taosnetwork/taosnetwork_client.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#define SERVER_PORT 8000
-#define SIZE 200
-
-int main() {
- struct sockaddr_in servaddr, cliaddr;
- socklen_t cliaddr_len;
- int client_sockfd;
- char buf[SIZE];
- char recvbuf[SIZE];
-
- int i, n, flag = 0;
-
- int len, iDataNum;
-
- client_sockfd = socket(AF_INET, SOCK_STREAM, 0);
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(SERVER_PORT);
-
- if (connect(client_sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
- printf("Connected error..\n");
- return 0;
- }
- printf("Connected to server..\n");
-
- /*循环的发送接收信息并打印接收信息(可以按需发送)--recv返回接收到的字节数,send返回发送的字节数*/
- while (1) {
- printf("Enter string to send:");
- scanf("%s", buf);
- if (!strcmp(buf, "quit")) {
- break;
- }
- len = (sizeof buf);
-
- recvbuf[0] = '\0';
-
- iDataNum = recv(client_sockfd, recvbuf, SIZE, 0);
-
- recvbuf[iDataNum] = '\0';
-
- printf("%s\n", recvbuf);
- }
- return 0;
-}
diff --git a/src/kit/taosnetwork/taosnetwork_server.c b/src/kit/taosnetwork/taosnetwork_server.c
deleted file mode 100644
index 1ec20716fa49bd01eeca7116bb5bd33c76f5886c..0000000000000000000000000000000000000000
--- a/src/kit/taosnetwork/taosnetwork_server.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#define SERVER_PORT 8000
-#define SIZE 200
-
-int main() {
- struct sockaddr_in servaddr, cliaddr;
- socklen_t cliaddr_len;
- int listenfd, connfd;
- char buf[BUFSIZ];
- int i, n, flag = 0;
-
- listenfd = socket(AF_INET, SOCK_STREAM, 0);
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(SERVER_PORT);
- bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- listen(listenfd, 20);
-
- printf("Accepting connections..\n");
- while (1) {
- cliaddr_len = sizeof(cliaddr);
- connfd = accept(listenfd, (struct sockaddr *)&cliaddr,
- &cliaddr_len); //如果得不到客户端发来的消息,将会被阻塞,一直等到消息到来
- n = read(connfd, buf, SIZE); //如果n<=0,表示客户端已断开
- while (1) {
- if (n != 0) {
- for (i = 0; i < n; i++) printf("%c", buf[i]); //输出客户端发来的信息
- } else {
- printf("Client say close the connection..\n");
- break;
- }
- n = read(connfd, buf, SIZE);
- }
- close(connfd);
- }
-}
diff --git a/src/kit/taosnetwork/test_client.c b/src/kit/taosnetwork/test_client.c
deleted file mode 100644
index 0c863c6a999cc7c3e8e7e12ec088fd3c2a1f2b2c..0000000000000000000000000000000000000000
--- a/src/kit/taosnetwork/test_client.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-#define SERVER_PORT 8888
-#define BUFF_LEN 512
-#define SERVER_IP "172.0.5.182"
-
-void udp_msg_sender(int fd, struct sockaddr* dst) {}
-
-/*
- client:
- socket-->sendto-->revcfrom-->close
-*/
-
-int main(int argc, char* argv[]) {
- int client_fd;
- struct sockaddr_in ser_addr;
-
- client_fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (client_fd < 0) {
- printf("create socket fail!\n");
- return -1;
- }
-
- memset(&ser_addr, 0, sizeof(ser_addr));
- ser_addr.sin_family = AF_INET;
- // ser_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
- ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); //注意网络序转换
- ser_addr.sin_port = htons(SERVER_PORT); //注意网络序转换
-
- socklen_t len;
- struct sockaddr_in src;
- while (1) {
- char buf[BUFF_LEN] = "TEST UDP MSG!\n";
- len = sizeof(*(struct sockaddr*)&ser_addr);
- printf("client:%s\n", buf); //打印自己发送的信息
- sendto(client_fd, buf, BUFF_LEN, 0, (struct sockaddr*)&ser_addr, len);
- memset(buf, 0, BUFF_LEN);
- recvfrom(client_fd, buf, BUFF_LEN, 0, (struct sockaddr*)&src, &len); //接收来自server的信息
- printf("server:%s\n", buf);
- sleep(1); //一秒发送一次消息
- }
-
- close(client_fd);
-
- return 0;
-}
\ No newline at end of file
diff --git a/src/kit/taosnetwork/test_server.c b/src/kit/taosnetwork/test_server.c
deleted file mode 100644
index 3bfbaa4f7c746854e2d243712a0f663402bddaaf..0000000000000000000000000000000000000000
--- a/src/kit/taosnetwork/test_server.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-#define SERVER_PORT 8888
-#define BUFF_LEN 1024
-
-void handle_udp_msg(int fd) {
- char buf[BUFF_LEN]; //接收缓冲区,1024字节
- socklen_t len;
- int count;
- struct sockaddr_in clent_addr; // clent_addr用于记录发送方的地址信息
- while (1) {
- memset(buf, 0, BUFF_LEN);
- len = sizeof(clent_addr);
- count =
- recvfrom(fd, buf, BUFF_LEN, 0, (struct sockaddr*)&clent_addr, &len); // recvfrom是拥塞函数,没有数据就一直拥塞
- if (count == -1) {
- printf("recieve data fail!\n");
- return;
- }
- printf("client:%s\n", buf); //打印client发过来的信息
- memset(buf, 0, BUFF_LEN);
- sprintf(buf, "I have recieved %d bytes data!\n", count); //回复client
- printf("server:%s\n", buf); //打印自己发送的信息给
- sendto(fd, buf, BUFF_LEN, 0, (struct sockaddr*)&clent_addr,
- len); //发送信息给client,注意使用了clent_addr结构体指针
- }
-}
-
-/*
- server:
- socket-->bind-->recvfrom-->sendto-->close
-*/
-
-int main(int argc, char* argv[]) {
- int server_fd, ret;
- struct sockaddr_in ser_addr;
-
- server_fd = socket(AF_INET, SOCK_DGRAM, 0); // AF_INET:IPV4;SOCK_DGRAM:UDP
- if (server_fd < 0) {
- printf("create socket fail!\n");
- return -1;
- }
-
- memset(&ser_addr, 0, sizeof(ser_addr));
- ser_addr.sin_family = AF_INET;
- ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP地址,需要进行网络序转换,INADDR_ANY:本地地址
- ser_addr.sin_port = htons(SERVER_PORT); //端口号,需要网络序转换
-
- ret = bind(server_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));
- if (ret < 0) {
- printf("socket bind fail!\n");
- return -1;
- }
-
- handle_udp_msg(server_fd); //处理接收到的数据
-
- close(server_fd);
- return 0;
-}
\ No newline at end of file