Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b694b2c3
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
b694b2c3
编写于
3月 05, 2021
作者:
sangshuduo
提交者:
GitHub
3月 05, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5360 from taosdata/hotfix/TD-3142
Hotfix/td 3142
上级
1312099d
ff370c24
变更
29
隐藏空白更改
内联
并排
Showing
29 changed file
with
468 addition
and
224 deletion
+468
-224
cmake/install.inc
cmake/install.inc
+1
-1
src/connector/jdbc/CMakeLists.txt
src/connector/jdbc/CMakeLists.txt
+1
-1
src/connector/jdbc/deploy-pom.xml
src/connector/jdbc/deploy-pom.xml
+1
-1
src/connector/jdbc/pom.xml
src/connector/jdbc/pom.xml
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
...ain/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
+63
-5
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
...dbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
+2
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
...rc/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
+10
-18
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
...src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
+2
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
+2
-3
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
+92
-40
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
...n/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
+30
-52
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+16
-17
src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
...r/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
+0
-1
src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
...r/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
+18
-19
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
...c/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
+1
-1
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
...ctor/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
+13
-1
tests/examples/JDBC/springbootdemo/pom.xml
tests/examples/JDBC/springbootdemo/pom.xml
+3
-1
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java
...ata/example/springbootdemo/SpringbootdemoApplication.java
+1
-1
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java
.../example/springbootdemo/controller/WeatherController.java
+16
-11
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java
...om/taosdata/example/springbootdemo/dao/WeatherMapper.java
+14
-4
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml
...com/taosdata/example/springbootdemo/dao/WeatherMapper.xml
+33
-22
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java
...a/com/taosdata/example/springbootdemo/domain/Weather.java
+30
-5
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java
...osdata/example/springbootdemo/service/WeatherService.java
+29
-6
tests/examples/JDBC/springbootdemo/src/main/resources/application.properties
.../springbootdemo/src/main/resources/application.properties
+8
-6
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
.../main/java/com/taosdata/taosdemo/TaosDemoApplication.java
+12
-2
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
.../com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
+5
-2
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java
...in/java/com/taosdata/taosdemo/service/SqlExecuteTask.java
+36
-0
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java
...mo/src/main/java/com/taosdata/taosdemo/utils/Printer.java
+27
-0
未找到文件。
cmake/install.inc
浏览文件 @
b694b2c3
...
...
@@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
IF
(
TD_MVN_INSTALLED
)
INSTALL
(
FILES
$
{
LIBRARY_OUTPUT_PATH
}
/
taos
-
jdbcdriver
-
2.0.2
0
-
dist
.
jar
DESTINATION
connector
/
jdbc
)
INSTALL
(
FILES
$
{
LIBRARY_OUTPUT_PATH
}
/
taos
-
jdbcdriver
-
2.0.2
1
-
dist
.
jar
DESTINATION
connector
/
jdbc
)
ENDIF
()
ELSEIF
(
TD_DARWIN
)
SET
(
TD_MAKE_INSTALL_SH
"${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh"
)
...
...
src/connector/jdbc/CMakeLists.txt
浏览文件 @
b694b2c3
...
...
@@ -8,7 +8,7 @@ IF (TD_MVN_INSTALLED)
ADD_CUSTOM_COMMAND
(
OUTPUT
${
JDBC_CMD_NAME
}
POST_BUILD
COMMAND mvn -Dmaven.test.skip=true install -f
${
CMAKE_CURRENT_SOURCE_DIR
}
/pom.xml
COMMAND
${
CMAKE_COMMAND
}
-E copy
${
CMAKE_CURRENT_SOURCE_DIR
}
/target/taos-jdbcdriver-2.0.2
0
-dist.jar
${
LIBRARY_OUTPUT_PATH
}
COMMAND
${
CMAKE_COMMAND
}
-E copy
${
CMAKE_CURRENT_SOURCE_DIR
}
/target/taos-jdbcdriver-2.0.2
1
-dist.jar
${
LIBRARY_OUTPUT_PATH
}
COMMAND mvn -Dmaven.test.skip=true clean -f
${
CMAKE_CURRENT_SOURCE_DIR
}
/pom.xml
COMMENT
"build jdbc driver"
)
ADD_CUSTOM_TARGET
(
${
JDBC_TARGET_NAME
}
ALL WORKING_DIRECTORY
${
EXECUTABLE_OUTPUT_PATH
}
DEPENDS
${
JDBC_CMD_NAME
}
)
...
...
src/connector/jdbc/deploy-pom.xml
浏览文件 @
b694b2c3
...
...
@@ -5,7 +5,7 @@
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.2
0
</version>
<version>
2.0.2
1
</version>
<packaging>
jar
</packaging>
<name>
JDBCDriver
</name>
...
...
src/connector/jdbc/pom.xml
浏览文件 @
b694b2c3
...
...
@@ -3,7 +3,7 @@
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.2
0
</version>
<version>
2.0.2
1
</version>
<packaging>
jar
</packaging>
<name>
JDBCDriver
</name>
<url>
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
</url>
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
浏览文件 @
b694b2c3
...
...
@@ -308,7 +308,7 @@ public class DatabaseMetaDataResultSet implements ResultSet {
return
colMetaData
.
getColIndex
()
+
1
;
}
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
@Override
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
浏览文件 @
b694b2c3
...
...
@@ -14,16 +14,13 @@
*****************************************************************************/
package
com.taosdata.jdbc
;
import
java.sql.SQLException
;
import
java.sql.Types
;
import
java.util.HashMap
;
import
java.util.Map
;
public
abstract
class
TSDBConstants
{
public
static
final
String
STATEMENT_CLOSED
=
"statement is closed"
;
public
static
final
String
UNSUPPORTED_METHOD_EXCEPTION_MSG
=
"this operation is NOT supported currently!"
;
public
static
final
String
INVALID_VARIABLES
=
"invalid variables"
;
public
static
final
String
RESULT_SET_IS_CLOSED
=
"resultSet is closed"
;
public
static
final
String
DEFAULT_PORT
=
"6200"
;
public
static
Map
<
Integer
,
String
>
DATATYPE_MAP
=
null
;
...
...
@@ -77,8 +74,65 @@ public abstract class TSDBConstants {
return
WrapErrMsg
(
"unkown error!"
);
}
public
static
int
taosType2JdbcType
(
int
taosType
)
throws
SQLException
{
switch
(
taosType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_NULL
:
return
Types
.
NULL
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Types
.
BOOLEAN
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
Types
.
TINYINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
Types
.
SMALLINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
Types
.
INTEGER
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
Types
.
BIGINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
Types
.
FLOAT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
Types
.
DOUBLE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
Types
.
BINARY
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
Types
.
TIMESTAMP
;
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
Types
.
NCHAR
;
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
}
public
static
int
jdbcType2TaosType
(
int
jdbcType
)
throws
SQLException
{
switch
(
jdbcType
){
case
Types
.
NULL
:
return
TSDBConstants
.
TSDB_DATA_TYPE_NULL
;
case
Types
.
BOOLEAN
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
;
case
Types
.
TINYINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
;
case
Types
.
SMALLINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
;
case
Types
.
INTEGER
:
return
TSDBConstants
.
TSDB_DATA_TYPE_INT
;
case
Types
.
BIGINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
;
case
Types
.
FLOAT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
;
case
Types
.
DOUBLE
:
return
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
;
case
Types
.
BINARY
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
;
case
Types
.
TIMESTAMP
:
return
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
;
case
Types
.
NCHAR
:
return
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
;
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
}
static
{
DATATYPE_MAP
=
new
HashMap
<>();
DATATYPE_MAP
.
put
(
0
,
"NULL"
);
DATATYPE_MAP
.
put
(
1
,
"BOOL"
);
DATATYPE_MAP
.
put
(
2
,
"TINYINT"
);
DATATYPE_MAP
.
put
(
3
,
"SMALLINT"
);
...
...
@@ -90,4 +144,8 @@ public abstract class TSDBConstants {
DATATYPE_MAP
.
put
(
9
,
"TIMESTAMP"
);
DATATYPE_MAP
.
put
(
10
,
"NCHAR"
);
}
public
static
String
jdbcType2TaosTypeName
(
int
type
)
throws
SQLException
{
return
DATATYPE_MAP
.
get
(
jdbcType2TaosType
(
type
));
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
浏览文件 @
b694b2c3
...
...
@@ -18,6 +18,7 @@ public class TSDBErrorNumbers {
public
static
final
int
ERROR_INVALID_FOR_EXECUTE
=
0x230c
;
//not a valid sql for execute: (SQL)
public
static
final
int
ERROR_PARAMETER_INDEX_OUT_RANGE
=
0x230d
;
// parameter index out of range
public
static
final
int
ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED
=
0x230e
;
// connection already closed
public
static
final
int
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
=
0x230f
;
//unknown sql type in tdengine
public
static
final
int
ERROR_UNKNOWN
=
0x2350
;
//unknown error
...
...
@@ -49,6 +50,7 @@ public class TSDBErrorNumbers {
errorNumbers
.
add
(
ERROR_INVALID_FOR_EXECUTE
);
errorNumbers
.
add
(
ERROR_PARAMETER_INDEX_OUT_RANGE
);
errorNumbers
.
add
(
ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED
);
errorNumbers
.
add
(
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
/*****************************************************/
errorNumbers
.
add
(
ERROR_SUBSCRIBE_FAILED
);
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
浏览文件 @
b694b2c3
...
...
@@ -20,7 +20,7 @@ import java.sql.Timestamp;
import
java.sql.Types
;
import
java.util.List
;
public
class
TSDBResultSetMetaData
implements
ResultSetMetaData
{
public
class
TSDBResultSetMetaData
extends
WrapperImpl
implements
ResultSetMetaData
{
List
<
ColumnMetaData
>
colMetaDataList
=
null
;
...
...
@@ -28,14 +28,6 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
this
.
colMetaDataList
=
metaDataList
;
}
public
<
T
>
T
unwrap
(
Class
<
T
>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
}
public
boolean
isWrapperFor
(
Class
<?>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
}
public
int
getColumnCount
()
throws
SQLException
{
return
colMetaDataList
.
size
();
}
...
...
@@ -94,7 +86,7 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
String
getSchemaName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
int
getPrecision
(
int
column
)
throws
SQLException
{
...
...
@@ -125,18 +117,18 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
String
getTableName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
String
getCatalogName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
int
getColumnType
(
int
column
)
throws
SQLException
{
ColumnMetaData
meta
=
this
.
colMetaDataList
.
get
(
column
-
1
);
switch
(
meta
.
getColType
())
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
java
.
sql
.
Types
.
BIT
;
return
Types
.
BOOLEAN
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
java
.
sql
.
Types
.
TINYINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
...
...
@@ -150,13 +142,13 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
java
.
sql
.
Types
.
DOUBLE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
java
.
sql
.
Types
.
CHAR
;
return
Types
.
BINARY
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
java
.
sql
.
Types
.
BIGINT
;
return
java
.
sql
.
Types
.
TIMESTAMP
;
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
java
.
sql
.
Types
.
CHAR
;
return
Types
.
N
CHAR
;
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
public
String
getColumnTypeName
(
int
column
)
throws
SQLException
{
...
...
@@ -173,7 +165,7 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
boolean
isDefinitelyWritable
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
String
getColumnClassName
(
int
column
)
throws
SQLException
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
浏览文件 @
b694b2c3
...
...
@@ -1153,11 +1153,11 @@ public class TSDBResultSetWrapper implements ResultSet {
}
public
<
T
>
T
getObject
(
int
columnIndex
,
Class
<
T
>
type
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
<
T
>
T
getObject
(
String
columnLabel
,
Class
<
T
>
type
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java
浏览文件 @
b694b2c3
...
...
@@ -14,12 +14,11 @@
*****************************************************************************/
package
com.taosdata.jdbc
;
import
javax.management.OperationsException
;
import
java.sql.SQLException
;
public
class
TSDBSubscribe
{
private
TSDBJNIConnector
connecter
=
null
;
private
long
id
=
0
;
private
final
TSDBJNIConnector
connecter
;
private
final
long
id
;
TSDBSubscribe
(
TSDBJNIConnector
connecter
,
long
id
)
throws
SQLException
{
if
(
null
!=
connecter
)
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
浏览文件 @
b694b2c3
...
...
@@ -18,10 +18,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
private
final
String
database
;
private
final
Statement
statement
;
// data
private
ArrayList
<
ArrayList
<
Object
>>
resultSet
=
new
ArrayList
<>()
;
private
ArrayList
<
ArrayList
<
Object
>>
resultSet
;
// meta
private
ArrayList
<
String
>
columnNames
=
new
ArrayList
<>()
;
private
ArrayList
<
Field
>
columns
=
new
ArrayList
<>()
;
private
ArrayList
<
String
>
columnNames
;
private
ArrayList
<
Field
>
columns
;
private
RestfulResultSetMetaData
metaData
;
/**
...
...
@@ -29,11 +29,36 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
*
* @param resultJson: 包含data信息的结果集,有sql返回的结果集
***/
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
)
{
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
)
throws
SQLException
{
this
.
database
=
database
;
this
.
statement
=
statement
;
// column metadata
JSONArray
columnMeta
=
resultJson
.
getJSONArray
(
"column_meta"
);
columnNames
=
new
ArrayList
<>();
columns
=
new
ArrayList
<>();
for
(
int
colIndex
=
0
;
colIndex
<
columnMeta
.
size
();
colIndex
++)
{
JSONArray
col
=
columnMeta
.
getJSONArray
(
colIndex
);
String
col_name
=
col
.
getString
(
0
);
int
col_type
=
TSDBConstants
.
taosType2JdbcType
(
col
.
getInteger
(
1
));
int
col_length
=
col
.
getInteger
(
2
);
columnNames
.
add
(
col_name
);
columns
.
add
(
new
Field
(
col_name
,
col_type
,
col_length
,
""
));
}
this
.
metaData
=
new
RestfulResultSetMetaData
(
this
.
database
,
columns
,
this
);
// row data
JSONArray
data
=
resultJson
.
getJSONArray
(
"data"
);
resultSet
=
new
ArrayList
<>();
for
(
int
rowIndex
=
0
;
rowIndex
<
data
.
size
();
rowIndex
++)
{
ArrayList
row
=
new
ArrayList
();
JSONArray
jsonRow
=
data
.
getJSONArray
(
rowIndex
);
for
(
int
colIndex
=
0
;
colIndex
<
jsonRow
.
size
();
colIndex
++)
{
row
.
add
(
parseColumnData
(
jsonRow
,
colIndex
,
columns
.
get
(
colIndex
).
type
));
}
resultSet
.
add
(
row
);
}
/*
int columnIndex = 0;
for (; columnIndex < data.size(); columnIndex++) {
ArrayList oneRow = new ArrayList<>();
...
...
@@ -52,50 +77,77 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
columns.add(new Field(name, "", 0, ""));
}
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
}
/**
* 由多个resultSet的JSON构造结果集
*
* @param resultJson: 包含data信息的结果集,有sql返回的结果集
* @param fieldJson: 包含多个(最多2个)meta信息的结果集,有describe xxx
**/
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
,
List
<
JSONObject
>
fieldJson
)
{
this
(
database
,
statement
,
resultJson
);
ArrayList
<
Field
>
newColumns
=
new
ArrayList
<>();
for
(
Field
column
:
columns
)
{
Field
field
=
findField
(
column
.
name
,
fieldJson
);
if
(
field
!=
null
)
{
newColumns
.
add
(
field
);
}
else
{
newColumns
.
add
(
column
);
}
}
this
.
columns
=
newColumns
;
this
.
metaData
=
new
RestfulResultSetMetaData
(
this
.
database
,
this
.
columns
,
this
);
}
public
Field
findField
(
String
columnName
,
List
<
JSONObject
>
fieldJsonList
)
{
for
(
JSONObject
fieldJSON
:
fieldJsonList
)
{
JSONArray
fieldDataJson
=
fieldJSON
.
getJSONArray
(
"data"
);
for
(
int
i
=
0
;
i
<
fieldDataJson
.
size
();
i
++)
{
JSONArray
field
=
fieldDataJson
.
getJSONArray
(
i
);
if
(
columnName
.
equalsIgnoreCase
(
field
.
getString
(
0
)))
{
return
new
Field
(
field
.
getString
(
0
),
field
.
getString
(
1
),
field
.
getInteger
(
2
),
field
.
getString
(
3
));
}
}
*/
}
private
Object
parseColumnData
(
JSONArray
row
,
int
colIndex
,
int
sqlType
)
{
switch
(
sqlType
)
{
case
Types
.
NULL
:
return
null
;
case
Types
.
BOOLEAN
:
return
row
.
getBoolean
(
colIndex
);
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
return
row
.
getShort
(
colIndex
);
case
Types
.
INTEGER
:
return
row
.
getInteger
(
colIndex
);
case
Types
.
BIGINT
:
return
row
.
getBigInteger
(
colIndex
);
case
Types
.
FLOAT
:
return
row
.
getFloat
(
colIndex
);
case
Types
.
DOUBLE
:
return
row
.
getDouble
(
colIndex
);
case
Types
.
TIMESTAMP
:
return
new
Timestamp
(
row
.
getDate
(
colIndex
).
getTime
());
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
default
:
return
row
.
getString
(
colIndex
);
}
return
null
;
}
// /**
// * 由多个resultSet的JSON构造结果集
// *
// * @param resultJson: 包含data信息的结果集,有sql返回的结果集
// * @param fieldJson: 包含多个(最多2个)meta信息的结果集,有describe xxx
// **/
// public RestfulResultSet(String database, Statement statement, JSONObject resultJson, List<JSONObject> fieldJson) throws SQLException {
// this(database, statement, resultJson);
// ArrayList<Field> newColumns = new ArrayList<>();
//
// for (Field column : columns) {
// Field field = findField(column.name, fieldJson);
// if (field != null) {
// newColumns.add(field);
// } else {
// newColumns.add(column);
// }
// }
// this.columns = newColumns;
// this.metaData = new RestfulResultSetMetaData(this.database, this.columns, this);
// }
// public Field findField(String columnName, List<JSONObject> fieldJsonList) {
// for (JSONObject fieldJSON : fieldJsonList) {
// JSONArray fieldDataJson = fieldJSON.getJSONArray("data");
// for (int i = 0; i < fieldDataJson.size(); i++) {
// JSONArray field = fieldDataJson.getJSONArray(i);
// if (columnName.equalsIgnoreCase(field.getString(0))) {
// return new Field(field.getString(0), field.getString(1), field.getInteger(2), field.getString(3));
// }
// }
// }
// return null;
// }
public
class
Field
{
String
name
;
String
type
;
int
type
;
int
length
;
String
note
;
public
Field
(
String
name
,
String
type
,
int
length
,
String
note
)
{
public
Field
(
String
name
,
int
type
,
int
length
,
String
note
)
{
this
.
name
=
name
;
this
.
type
=
type
;
this
.
length
=
length
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
浏览文件 @
b694b2c3
...
...
@@ -5,6 +5,7 @@ import com.taosdata.jdbc.TSDBConstants;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
import
java.sql.Types
;
import
java.util.ArrayList
;
public
class
RestfulResultSetMetaData
implements
ResultSetMetaData
{
...
...
@@ -53,14 +54,14 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
boolean
isSigned
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"TINYINT"
:
case
"SMALLINT"
:
case
"INT"
:
case
"BIGINT"
:
case
"FLOAT"
:
case
"DOUBLE"
:
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
case
Types
.
INTEGER
:
case
Types
.
BIGINT
:
case
Types
.
FLOAT
:
case
Types
.
DOUBLE
:
return
true
;
default
:
return
false
;
...
...
@@ -89,14 +90,14 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getPrecision
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
5
;
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
9
;
case
"BINARY"
:
case
"NCHAR"
:
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
return
this
.
fields
.
get
(
column
-
1
).
length
;
default
:
return
0
;
...
...
@@ -105,11 +106,11 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getScale
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
5
;
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
9
;
default
:
return
0
;
...
...
@@ -128,36 +129,13 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getColumnType
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
();
switch
(
type
)
{
case
"BOOL"
:
return
java
.
sql
.
Types
.
BOOLEAN
;
case
"TINYINT"
:
return
java
.
sql
.
Types
.
TINYINT
;
case
"SMALLINT"
:
return
java
.
sql
.
Types
.
SMALLINT
;
case
"INT"
:
return
java
.
sql
.
Types
.
INTEGER
;
case
"BIGINT"
:
return
java
.
sql
.
Types
.
BIGINT
;
case
"FLOAT"
:
return
java
.
sql
.
Types
.
FLOAT
;
case
"DOUBLE"
:
return
java
.
sql
.
Types
.
DOUBLE
;
case
"BINARY"
:
return
java
.
sql
.
Types
.
BINARY
;
case
"TIMESTAMP"
:
return
java
.
sql
.
Types
.
TIMESTAMP
;
case
"NCHAR"
:
return
java
.
sql
.
Types
.
NCHAR
;
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
return
this
.
fields
.
get
(
column
-
1
).
type
;
}
@Override
public
String
getColumnTypeName
(
int
column
)
throws
SQLException
{
String
type
=
fields
.
get
(
column
-
1
).
type
;
return
type
.
toUpperCase
(
);
int
type
=
fields
.
get
(
column
-
1
).
type
;
return
TSDBConstants
.
jdbcType2TaosTypeName
(
type
);
}
@Override
...
...
@@ -177,26 +155,26 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
String
getColumnClassName
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
String
columnClassName
=
""
;
switch
(
type
)
{
case
"BOOL"
:
case
Types
.
BOOLEAN
:
return
Boolean
.
class
.
getName
();
case
"TINYINT"
:
case
"SMALLINT"
:
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
return
Short
.
class
.
getName
();
case
"INT"
:
case
Types
.
INTEGER
:
return
Integer
.
class
.
getName
();
case
"BIGINT"
:
case
Types
.
BIGINT
:
return
Long
.
class
.
getName
();
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
Float
.
class
.
getName
();
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
Double
.
class
.
getName
();
case
"TIMESTAMP"
:
case
Types
.
TIMESTAMP
:
return
Timestamp
.
class
.
getName
();
case
"BINARY"
:
case
"NCHAR"
:
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
return
String
.
class
.
getName
();
}
return
columnClassName
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
b694b2c3
...
...
@@ -151,22 +151,21 @@ public class RestfulStatement extends AbstractStatement {
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"SQL execution error: "
+
resultJson
.
getString
(
"desc"
)
+
"\n"
+
"error code: "
+
resultJson
.
getString
(
"code"
)));
}
// parse table name from sql
String
[]
tableIdentifiers
=
parseTableIdentifier
(
sql
);
if
(
tableIdentifiers
!=
null
)
{
List
<
JSONObject
>
fieldJsonList
=
new
ArrayList
<>();
for
(
String
tableIdentifier
:
tableIdentifiers
)
{
// field meta
String
fields
=
HttpClientPoolUtil
.
execute
(
url
,
"DESCRIBE "
+
tableIdentifier
);
JSONObject
fieldJson
=
JSON
.
parseObject
(
fields
);
if
(
fieldJson
.
getString
(
"status"
).
equals
(
"error"
))
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"SQL execution error: "
+
fieldJson
.
getString
(
"desc"
)
+
"\n"
+
"error code: "
+
fieldJson
.
getString
(
"code"
)));
}
fieldJsonList
.
add
(
fieldJson
);
}
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
,
fieldJsonList
);
}
else
{
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
);
}
// String[] tableIdentifiers = parseTableIdentifier(sql);
// if (tableIdentifiers != null) {
// List<JSONObject> fieldJsonList = new ArrayList<>();
// for (String tableIdentifier : tableIdentifiers) {
// String fields = HttpClientPoolUtil.execute(url, "DESCRIBE " + tableIdentifier);
// JSONObject fieldJson = JSON.parseObject(fields);
// if (fieldJson.getString("status").equals("error")) {
// throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + fieldJson.getString("desc") + "\n" + "error code: " + fieldJson.getString("code")));
// }
// fieldJsonList.add(fieldJson);
// }
// this.resultSet = new RestfulResultSet(database, this, resultJson, fieldJsonList);
// } else {
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
);
// }
this
.
affectedRows
=
0
;
return
resultSet
;
}
...
...
@@ -201,7 +200,7 @@ public class RestfulStatement extends AbstractStatement {
@Override
public
ResultSet
getResultSet
()
throws
SQLException
{
if
(
isClosed
())
throw
new
SQLException
(
TSDBConstants
.
STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_
STATEMENT_CLOSED
);
return
resultSet
;
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
浏览文件 @
b694b2c3
...
...
@@ -13,7 +13,6 @@ 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
;
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
浏览文件 @
b694b2c3
...
...
@@ -48,29 +48,28 @@ public class SubscribeTest {
@Test
public
void
subscribe
()
{
try
{
String
rawSql
=
"select * from "
+
dbName
+
"."
+
tName
+
";"
;
System
.
out
.
println
(
rawSql
);
TSDBSubscribe
subscribe
=
((
TSDBConnection
)
connection
).
subscribe
(
topic
,
rawSql
,
false
);
//
TSDBSubscribe subscribe = ((TSDBConnection) connection).subscribe(topic, rawSql, false);
int
a
=
0
;
while
(
true
)
{
TimeUnit
.
MILLISECONDS
.
sleep
(
1000
);
TSDBResultSet
resSet
=
subscribe
.
consume
();
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
+
"=========="
);
}
a
++;
if
(
a
>=
2
)
{
break
;
}
//
int a = 0;
//
while (true) {
//
TimeUnit.MILLISECONDS.sleep(1000);
//
TSDBResultSet resSet = subscribe.consume();
//
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 + "==========");
//
}
//
a++;
//
if (a >= 2) {
//
break;
//
}
// resSet.close();
}
subscribe
.
close
(
true
);
//
}
//
//
subscribe.close(true);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
浏览文件 @
b694b2c3
...
...
@@ -10,7 +10,7 @@ import java.util.Random;
public
class
RestfulJDBCTest
{
private
static
final
String
host
=
"127.0.0.1"
;
//
private static final String host = "master";
//
private static final String host = "master";
private
static
Connection
connection
;
private
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
浏览文件 @
b694b2c3
...
...
@@ -12,7 +12,7 @@ import java.sql.*;
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
public
class
SQLTest
{
private
static
final
String
host
=
"127.0.0.1"
;
//
private static final String host = "master";
//
private static final String host = "master";
private
static
Connection
connection
;
@Test
...
...
@@ -323,6 +323,18 @@ public class SQLTest {
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@Test
public
void
testCase052
()
{
String
sql
=
"select server_status()"
;
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@Test
public
void
testCase053
()
{
String
sql
=
"select avg(cpu_taosd), avg(cpu_system), max(cpu_cores), avg(mem_taosd), avg(mem_system), max(mem_total), avg(disk_used), max(disk_total), avg(band_speed), avg(io_read), avg(io_write), sum(req_http), sum(req_select), sum(req_insert) from log.dn1 where ts> now - 60m and ts<= now interval(1m) fill(value, 0)"
;
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@BeforeClass
public
static
void
before
()
throws
ClassNotFoundException
,
SQLException
{
Class
.
forName
(
"com.taosdata.jdbc.rs.RestfulDriver"
);
...
...
tests/examples/JDBC/springbootdemo/pom.xml
浏览文件 @
b694b2c3
...
...
@@ -63,7 +63,9 @@
<dependency>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.18
</version>
<version>
2.0.20
</version>
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/src/main/resources/taos-jdbcdriver-2.0.20-dist.jar</systemPath>-->
</dependency>
<dependency>
...
...
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java
浏览文件 @
b694b2c3
...
...
@@ -10,4 +10,4 @@ public class SpringbootdemoApplication {
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
SpringbootdemoApplication
.
class
,
args
);
}
}
}
\ No newline at end of file
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java
浏览文件 @
b694b2c3
...
...
@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
java.util.Map
;
@RequestMapping
(
"/weather"
)
@RestController
...
...
@@ -20,7 +21,7 @@ public class WeatherController {
* @return
*/
@GetMapping
(
"/init"
)
public
boolean
init
()
{
public
int
init
()
{
return
weatherService
.
init
();
}
...
...
@@ -44,19 +45,23 @@ public class WeatherController {
* @return
*/
@PostMapping
(
"/{temperature}/{humidity}"
)
public
int
saveWeather
(
@PathVariable
int
temperature
,
@PathVariable
floa
t
humidity
)
{
public
int
saveWeather
(
@PathVariable
float
temperature
,
@PathVariable
in
t
humidity
)
{
return
weatherService
.
save
(
temperature
,
humidity
);
}
/**
* upload multi weather info
*
* @param weatherList
* @return
*/
@PostMapping
(
"/batch"
)
public
int
batchSaveWeather
(
@RequestBody
List
<
Weather
>
weatherList
)
{
return
weatherService
.
save
(
weatherList
);
@GetMapping
(
"/count"
)
public
int
count
()
{
return
weatherService
.
count
();
}
@GetMapping
(
"/subTables"
)
public
List
<
String
>
getSubTables
()
{
return
weatherService
.
getSubTables
();
}
@GetMapping
(
"/avg"
)
public
List
<
Weather
>
avg
()
{
return
weatherService
.
avg
();
}
}
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java
浏览文件 @
b694b2c3
...
...
@@ -4,16 +4,26 @@ import com.taosdata.example.springbootdemo.domain.Weather;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
import
java.util.Map
;
public
interface
WeatherMapper
{
void
dropDB
();
void
createDB
();
void
createSuperTable
();
void
createTable
(
Weather
weather
);
List
<
Weather
>
select
(
@Param
(
"limit"
)
Long
limit
,
@Param
(
"offset"
)
Long
offset
);
int
insert
(
Weather
weather
);
int
batchInsert
(
List
<
Weather
>
weatherList
);
int
count
(
);
List
<
Weather
>
select
(
@Param
(
"limit"
)
Long
limit
,
@Param
(
"offset"
)
Long
offset
);
List
<
String
>
getSubTables
(
);
void
createDB
();
List
<
Weather
>
avg
();
void
createTable
();
}
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml
浏览文件 @
b694b2c3
...
...
@@ -4,28 +4,29 @@
<mapper
namespace=
"com.taosdata.example.springbootdemo.dao.WeatherMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.taosdata.example.springbootdemo.domain.Weather"
>
<id
column=
"ts"
jdbcType=
"TIMESTAMP"
property=
"ts"
/>
<result
column=
"temperature"
jdbcType=
"
INTEGER"
property=
"temperature"
/>
<result
column=
"humidity"
jdbcType=
"FLOAT"
property=
"humidity"
/>
<id
column=
"ts"
jdbcType=
"TIMESTAMP"
property=
"ts"
/>
<result
column=
"temperature"
jdbcType=
"
FLOAT"
property=
"temperature"
/>
<result
column=
"humidity"
jdbcType=
"FLOAT"
property=
"humidity"
/>
</resultMap>
<update
id=
"createDB"
>
create database if not exists test;
<update
id=
"dropDB"
>
drop database if exists test
</update>
<update
id=
"createDB"
>
create database if not exists test
</update>
<update
id=
"create
Table"
>
create table if not exists test.weather(ts timestamp, temperature
int, humidity float);
<update
id=
"create
SuperTable"
>
create table if not exists test.weather(ts timestamp, temperature
float, humidity float) tags(location nchar(64), groupId int)
</update>
<
sql
id=
"Base_Column_List
"
>
ts, temperature, humidity
</
sql
>
<
update
id=
"createTable"
parameterType=
"com.taosdata.example.springbootdemo.domain.Weather
"
>
create table if not exists test.t#{groupId} using test.weather tags(#{location}, #{groupId})
</
update
>
<select
id=
"select"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from test.weather
order by ts desc
select * from test.weather order by ts desc
<if
test=
"limit != null"
>
limit #{limit,jdbcType=BIGINT}
</if>
...
...
@@ -34,16 +35,26 @@
</if>
</select>
<insert
id=
"insert"
parameterType=
"com.taosdata.example.springbootdemo.domain.Weather"
>
insert into test.
weather (ts, temperature, humidity) values (now, #{temperature,jdbcType=INTEGER}, #{humidity,jdbcType=FLOAT
})
<insert
id=
"insert"
parameterType=
"com.taosdata.example.springbootdemo.domain.Weather"
>
insert into test.
t#{groupId} (ts, temperature, humidity) values (#{ts}, ${temperature}, ${humidity
})
</insert>
<insert
id=
"batchInsert"
parameterType=
"java.util.List"
>
insert into test.weather (ts, temperature, humidity) values
<foreach
separator=
" "
collection=
"list"
item=
"weather"
index=
"index"
>
(now + #{index}a, #{weather.temperature}, #{weather.humidity})
</foreach>
</insert>
<select
id=
"getSubTables"
resultType=
"String"
>
select tbname from test.weather
</select>
<select
id=
"count"
resultType=
"int"
>
select count(*) from test.weather
</select>
<resultMap
id=
"avgResultSet"
type=
"com.taosdata.example.springbootdemo.domain.Weather"
>
<id
column=
"ts"
jdbcType=
"TIMESTAMP"
property=
"ts"
/>
<result
column=
"avg(temperature)"
jdbcType=
"FLOAT"
property=
"temperature"
/>
<result
column=
"avg(humidity)"
jdbcType=
"FLOAT"
property=
"humidity"
/>
</resultMap>
<select
id=
"avg"
resultMap=
"avgResultSet"
>
select avg(temperature), avg(humidity)from test.weather interval(1m)
</select>
</mapper>
\ No newline at end of file
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java
浏览文件 @
b694b2c3
...
...
@@ -6,12 +6,21 @@ import java.sql.Timestamp;
public
class
Weather
{
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss.SSS"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss.SSS"
,
timezone
=
"GMT+8"
)
private
Timestamp
ts
;
private
float
temperature
;
private
float
humidity
;
private
String
location
;
private
int
groupId
;
private
int
temperature
;
public
Weather
()
{
}
private
float
humidity
;
public
Weather
(
Timestamp
ts
,
float
temperature
,
float
humidity
)
{
this
.
ts
=
ts
;
this
.
temperature
=
temperature
;
this
.
humidity
=
humidity
;
}
public
Timestamp
getTs
()
{
return
ts
;
...
...
@@ -21,11 +30,11 @@ public class Weather {
this
.
ts
=
ts
;
}
public
in
t
getTemperature
()
{
public
floa
t
getTemperature
()
{
return
temperature
;
}
public
void
setTemperature
(
in
t
temperature
)
{
public
void
setTemperature
(
floa
t
temperature
)
{
this
.
temperature
=
temperature
;
}
...
...
@@ -36,4 +45,20 @@ public class Weather {
public
void
setHumidity
(
float
humidity
)
{
this
.
humidity
=
humidity
;
}
public
String
getLocation
()
{
return
location
;
}
public
void
setLocation
(
String
location
)
{
this
.
location
=
location
;
}
public
int
getGroupId
()
{
return
groupId
;
}
public
void
setGroupId
(
int
groupId
)
{
this
.
groupId
=
groupId
;
}
}
tests/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java
浏览文件 @
b694b2c3
...
...
@@ -5,25 +5,41 @@ import com.taosdata.example.springbootdemo.domain.Weather;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.sql.Timestamp
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Random
;
@Service
public
class
WeatherService
{
@Autowired
private
WeatherMapper
weatherMapper
;
private
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
private
String
[]
locations
=
{
"北京"
,
"上海"
,
"广州"
,
"深圳"
,
"天津"
};
public
boolean
init
()
{
public
int
init
()
{
weatherMapper
.
dropDB
();
weatherMapper
.
createDB
();
weatherMapper
.
createTable
();
return
true
;
weatherMapper
.
createSuperTable
();
long
ts
=
System
.
currentTimeMillis
();
long
thirtySec
=
1000
*
30
;
int
count
=
0
;
for
(
int
i
=
0
;
i
<
20
;
i
++)
{
Weather
weather
=
new
Weather
(
new
Timestamp
(
ts
+
(
thirtySec
*
i
)),
30
*
random
.
nextFloat
(),
random
.
nextInt
(
100
));
weather
.
setLocation
(
locations
[
random
.
nextInt
(
locations
.
length
)]);
weather
.
setGroupId
(
i
%
locations
.
length
);
weatherMapper
.
createTable
(
weather
);
count
+=
weatherMapper
.
insert
(
weather
);
}
return
count
;
}
public
List
<
Weather
>
query
(
Long
limit
,
Long
offset
)
{
return
weatherMapper
.
select
(
limit
,
offset
);
}
public
int
save
(
int
temperature
,
floa
t
humidity
)
{
public
int
save
(
float
temperature
,
in
t
humidity
)
{
Weather
weather
=
new
Weather
();
weather
.
setTemperature
(
temperature
);
weather
.
setHumidity
(
humidity
);
...
...
@@ -31,8 +47,15 @@ public class WeatherService {
return
weatherMapper
.
insert
(
weather
);
}
public
int
save
(
List
<
Weather
>
weatherList
)
{
return
weatherMapper
.
batchInsert
(
weatherList
);
public
int
count
(
)
{
return
weatherMapper
.
count
(
);
}
public
List
<
String
>
getSubTables
()
{
return
weatherMapper
.
getSubTables
();
}
public
List
<
Weather
>
avg
()
{
return
weatherMapper
.
avg
();
}
}
tests/examples/JDBC/springbootdemo/src/main/resources/application.properties
浏览文件 @
b694b2c3
# datasource config - JDBC-JNI
spring.datasource.driver-class-name
=
com.taosdata.jdbc.TSDBDriver
spring.datasource.url
=
jdbc:TAOS://127.0.0.1:6030/test?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8
spring.datasource.username
=
root
spring.datasource.password
=
taosdata
#
spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver
#
spring.datasource.url=jdbc:TAOS://127.0.0.1:6030/test?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8
#
spring.datasource.username=root
#
spring.datasource.password=taosdata
# datasource config - JDBC-RESTful
#spring.datasource.driver-class-name=com.taosdata.jdbc.rs.RestfulDriver
#spring.datasource.url=jdbc:TAOS-RS://master:6041/test?user=root&password=taosdata
spring.datasource.driver-class-name
=
com.taosdata.jdbc.rs.RestfulDriver
spring.datasource.url
=
jdbc:TAOS-RS://master:6041/test?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8
spring.datasource.username
=
root
spring.datasource.password
=
taosdata
spring.datasource.druid.initial-size
=
5
spring.datasource.druid.min-idle
=
5
...
...
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
浏览文件 @
b694b2c3
...
...
@@ -4,7 +4,7 @@ import com.taosdata.taosdemo.components.DataSourceFactory;
import
com.taosdata.taosdemo.components.JdbcTaosdemoConfig
;
import
com.taosdata.taosdemo.domain.SuperTableMeta
;
import
com.taosdata.taosdemo.service.DatabaseService
;
import
com.taosdata.taosdemo.service.
QueryService
;
import
com.taosdata.taosdemo.service.
SqlExecuteTask
;
import
com.taosdata.taosdemo.service.SubTableService
;
import
com.taosdata.taosdemo.service.SuperTableService
;
import
com.taosdata.taosdemo.service.data.SuperTableMetaGenerator
;
...
...
@@ -32,6 +32,17 @@ public class TaosDemoApplication {
}
// 初始化
final
DataSource
dataSource
=
DataSourceFactory
.
getInstance
(
config
.
host
,
config
.
port
,
config
.
user
,
config
.
password
);
if
(
config
.
executeSql
!=
null
&&
!
config
.
executeSql
.
isEmpty
()
&&
!
config
.
executeSql
.
replaceAll
(
"\\s"
,
""
).
isEmpty
())
{
Thread
task
=
new
Thread
(
new
SqlExecuteTask
(
dataSource
,
config
.
executeSql
));
task
.
start
();
try
{
task
.
join
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
;
}
final
DatabaseService
databaseService
=
new
DatabaseService
(
dataSource
);
final
SuperTableService
superTableService
=
new
SuperTableService
(
dataSource
);
final
SubTableService
subTableService
=
new
SubTableService
(
dataSource
);
...
...
@@ -96,7 +107,6 @@ public class TaosDemoApplication {
// 查询
/**********************************************************************************/
// 删除表
if
(
config
.
dropTable
)
{
...
...
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java
浏览文件 @
b694b2c3
...
...
@@ -42,7 +42,7 @@ public final class JdbcTaosdemoConfig {
public
int
rate
=
10
;
public
long
range
=
1000
l
;
// select task
public
String
executeSql
;
// drop task
public
boolean
dropTable
=
false
;
...
...
@@ -89,7 +89,7 @@ public final class JdbcTaosdemoConfig {
System
.
out
.
println
(
"-rate The proportion of data out of order. effective only if order is 1. min 0, max 100, default is 10"
);
System
.
out
.
println
(
"-range The range of data out of order. effective only if order is 1. default is 1000 ms"
);
// query task
// System.out.println("-sqlFile The select sql file
");
System
.
out
.
println
(
"-executeSql execute a specific sql.
"
);
// drop task
System
.
out
.
println
(
"-dropTable Drop data before quit. Default is false"
);
System
.
out
.
println
(
"--help Give this help list"
);
...
...
@@ -207,6 +207,9 @@ public final class JdbcTaosdemoConfig {
range
=
Integer
.
parseInt
(
args
[++
i
]);
}
// select task
if
(
"-executeSql"
.
equals
(
args
[
i
])
&&
i
<
args
.
length
-
1
)
{
executeSql
=
args
[++
i
];
}
// drop task
if
(
"-dropTable"
.
equals
(
args
[
i
])
&&
i
<
args
.
length
-
1
)
{
...
...
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java
0 → 100644
浏览文件 @
b694b2c3
package
com.taosdata.taosdemo.service
;
import
com.taosdata.taosdemo.utils.Printer
;
import
javax.sql.DataSource
;
import
java.sql.Connection
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
public
class
SqlExecuteTask
implements
Runnable
{
private
final
DataSource
dataSource
;
private
final
String
sql
;
public
SqlExecuteTask
(
DataSource
dataSource
,
String
sql
)
{
this
.
dataSource
=
dataSource
;
this
.
sql
=
sql
;
}
@Override
public
void
run
()
{
try
(
Connection
conn
=
dataSource
.
getConnection
();
Statement
stmt
=
conn
.
createStatement
())
{
long
start
=
System
.
currentTimeMillis
();
boolean
execute
=
stmt
.
execute
(
sql
);
long
end
=
System
.
currentTimeMillis
();
if
(
execute
)
{
ResultSet
rs
=
stmt
.
getResultSet
();
Printer
.
printResult
(
rs
);
}
else
{
Printer
.
printSql
(
sql
,
true
,
(
end
-
start
));
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java
0 → 100644
浏览文件 @
b694b2c3
package
com.taosdata.taosdemo.utils
;
import
java.sql.ResultSet
;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
public
class
Printer
{
public
static
void
printResult
(
ResultSet
resultSet
)
throws
SQLException
{
ResultSetMetaData
metaData
=
resultSet
.
getMetaData
();
while
(
resultSet
.
next
())
{
for
(
int
i
=
1
;
i
<=
metaData
.
getColumnCount
();
i
++)
{
String
columnLabel
=
metaData
.
getColumnLabel
(
i
);
String
value
=
resultSet
.
getString
(
i
);
System
.
out
.
printf
(
"%s: %s\t"
,
columnLabel
,
value
);
}
System
.
out
.
println
();
}
}
public
static
void
printSql
(
String
sql
,
boolean
succeed
,
long
cost
)
{
System
.
out
.
println
(
"[ "
+
(
succeed
?
"OK"
:
"ERROR!"
)
+
" ] time cost: "
+
cost
+
" ms, execute statement ====> "
+
sql
);
}
private
Printer
()
{
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录