Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
352cde98
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
352cde98
编写于
9月 11, 2020
作者:
S
Shengliang Guan
提交者:
GitHub
9月 11, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3480 from taosdata/hotfix/td-1350
Hotfix/td 1350
上级
e78c8e9b
54143e06
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
769 addition
and
373 deletion
+769
-373
src/connector/jdbc/deploy-pom.xml
src/connector/jdbc/deploy-pom.xml
+2
-3
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
.../jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
+16
-14
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
...rc/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
+2
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+230
-217
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
...main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
+1
-0
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
...nector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
+2
-5
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
...jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
+3
-5
src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
...ctor/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
+0
-2
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
...rc/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
+108
-0
src/connector/jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java
.../jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java
+47
-0
tests/examples/JDBC/SpringJdbcTemplate/pom.xml
tests/examples/JDBC/SpringJdbcTemplate/pom.xml
+77
-71
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/App.java
...ringJdbcTemplate/src/main/java/com/taosdata/jdbc/App.java
+0
-44
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/App.java
...main/java/com/taosdata/jdbc/example/jdbcTemplate/App.java
+48
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/ExecuteAsStatement.java
...ata/jdbc/example/jdbcTemplate/dao/ExecuteAsStatement.java
+6
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/WeatherDao.java
...om/taosdata/jdbc/example/jdbcTemplate/dao/WeatherDao.java
+17
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/impl/ExecuteAsStatementImpl.java
...example/jdbcTemplate/dao/impl/ExecuteAsStatementImpl.java
+19
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/impl/WeatherDaoImpl.java
...ta/jdbc/example/jdbcTemplate/dao/impl/WeatherDaoImpl.java
+64
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/domain/Weather.java
...om/taosdata/jdbc/example/jdbcTemplate/domain/Weather.java
+54
-0
tests/examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml
...ingJdbcTemplate/src/main/resources/applicationContext.xml
+6
-5
tests/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/jdbc/AppTest.java
...JdbcTemplate/src/test/java/com/taosdata/jdbc/AppTest.java
+3
-5
tests/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/jdbc/example/jdbcTemplate/BatcherInsertTest.java
...taosdata/jdbc/example/jdbcTemplate/BatcherInsertTest.java
+64
-0
未找到文件。
src/connector/jdbc/deploy-pom.xml
浏览文件 @
352cde98
...
...
@@ -93,14 +93,13 @@
<version>
3.6.1
</version>
<configuration>
<encoding>
UTF-8
</encoding>
<source>
11
</source>
<target>
11
</target>
<source>
8
</source>
<target>
8
</target>
<debug>
true
</debug>
<showDeprecation>
true
</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-source-plugin
</artifactId>
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
浏览文件 @
352cde98
...
...
@@ -57,9 +57,9 @@ public class TSDBConnection implements Connection {
File
cfgDir
=
loadConfigDir
(
info
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_CONFIG_DIR
));
File
cfgFile
=
cfgDir
.
listFiles
((
dir
,
name
)
->
"taos.cfg"
.
equalsIgnoreCase
(
name
))[
0
];
List
<
String
>
endpoints
=
loadConfigEndpoints
(
cfgFile
);
if
(!
endpoints
.
isEmpty
()){
info
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
,
endpoints
.
get
(
0
).
split
(
":"
)[
0
]);
info
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
,
endpoints
.
get
(
0
).
split
(
":"
)[
1
]);
if
(!
endpoints
.
isEmpty
())
{
info
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
,
endpoints
.
get
(
0
).
split
(
":"
)[
0
]);
info
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
,
endpoints
.
get
(
0
).
split
(
":"
)[
1
]);
}
//load taos.cfg end
...
...
@@ -69,15 +69,15 @@ public class TSDBConnection implements Connection {
info
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PASSWORD
));
}
private
List
<
String
>
loadConfigEndpoints
(
File
cfgFile
){
private
List
<
String
>
loadConfigEndpoints
(
File
cfgFile
)
{
List
<
String
>
endpoints
=
new
ArrayList
<>();
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
FileReader
(
cfgFile
)))
{
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
FileReader
(
cfgFile
)))
{
String
line
=
null
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
if
(
line
.
trim
().
startsWith
(
"firstEp"
)
||
line
.
trim
().
startsWith
(
"secondEp"
)){
endpoints
.
add
(
line
.
substring
(
line
.
indexOf
(
'p'
)
+
1
).
trim
());
while
((
line
=
reader
.
readLine
())
!=
null
)
{
if
(
line
.
trim
().
startsWith
(
"firstEp"
)
||
line
.
trim
().
startsWith
(
"secondEp"
))
{
endpoints
.
add
(
line
.
substring
(
line
.
indexOf
(
'p'
)
+
1
).
trim
());
}
if
(
endpoints
.
size
()
>
1
)
if
(
endpoints
.
size
()
>
1
)
break
;
}
}
catch
(
FileNotFoundException
e
)
{
...
...
@@ -91,7 +91,7 @@ public class TSDBConnection implements Connection {
/**
* @param cfgDirPath
* @return return the config dir
*
*
*/
**/
private
File
loadConfigDir
(
String
cfgDirPath
)
{
if
(
cfgDirPath
==
null
)
return
loadDefaultConfigDir
();
...
...
@@ -103,8 +103,8 @@ public class TSDBConnection implements Connection {
/**
* @return search the default config dir, if the config dir is not exist will return null
*
*
/
private
File
loadDefaultConfigDir
(){
*/
private
File
loadDefaultConfigDir
()
{
File
cfgDir
;
File
cfgDir_linux
=
new
File
(
"/etc/taos"
);
cfgDir
=
cfgDir_linux
.
exists
()
?
cfgDir_linux
:
null
;
...
...
@@ -132,7 +132,9 @@ public class TSDBConnection implements Connection {
public
Statement
createStatement
()
throws
SQLException
{
if
(!
this
.
connector
.
isClosed
())
{
return
new
TSDBStatement
(
this
.
connector
);
TSDBStatement
statement
=
new
TSDBStatement
(
this
,
this
.
connector
);
statement
.
setConnection
(
this
);
return
statement
;
}
else
{
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
TSDBConstants
.
JNI_CONNECTION_NULL
));
}
...
...
@@ -153,7 +155,7 @@ public class TSDBConnection implements Connection {
public
PreparedStatement
prepareStatement
(
String
sql
)
throws
SQLException
{
if
(!
this
.
connector
.
isClosed
())
{
return
new
TSDBPreparedStatement
(
this
.
connector
,
sql
);
return
new
TSDBPreparedStatement
(
this
,
this
.
connector
,
sql
);
}
else
{
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
TSDBConstants
.
JNI_CONNECTION_NULL
));
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
浏览文件 @
352cde98
...
...
@@ -42,8 +42,8 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
private
SavedPreparedStatement
savedPreparedStatement
;
TSDBPreparedStatement
(
TSDBJNIConnector
connecter
,
String
sql
)
{
super
(
connecter
);
TSDBPreparedStatement
(
TSDB
Connection
connection
,
TSDB
JNIConnector
connecter
,
String
sql
)
{
super
(
connect
ion
,
connect
er
);
init
(
sql
);
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
浏览文件 @
352cde98
...
...
@@ -19,153 +19,164 @@ import java.util.ArrayList;
import
java.util.List
;
public
class
TSDBStatement
implements
Statement
{
private
TSDBJNIConnector
connecter
=
null
;
private
TSDBJNIConnector
connecter
=
null
;
/** To store batched commands */
protected
List
<
String
>
batchedArgs
;
/**
* To store batched commands
*/
protected
List
<
String
>
batchedArgs
;
/** Timeout for a query */
protected
int
queryTimeout
=
0
;
/**
* Timeout for a query
*/
protected
int
queryTimeout
=
0
;
private
Long
pSql
=
0
l
;
private
Long
pSql
=
0
l
;
/**
* Status of current statement
*/
private
boolean
isClosed
=
true
;
private
int
affectedRows
=
0
;
private
boolean
isClosed
=
true
;
private
int
affectedRows
=
0
;
TSDBStatement
(
TSDBJNIConnector
connecter
)
{
this
.
connecter
=
connecter
;
this
.
isClosed
=
false
;
}
private
TSDBConnection
connection
;
public
<
T
>
T
unwrap
(
Class
<
T
>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
)
;
}
public
void
setConnection
(
TSDBConnection
connection
)
{
this
.
connection
=
connection
;
}
public
boolean
isWrapperFor
(
Class
<?>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
TSDBStatement
(
TSDBConnection
connection
,
TSDBJNIConnector
connecter
)
{
this
.
connection
=
connection
;
this
.
connecter
=
connecter
;
this
.
isClosed
=
false
;
}
public
ResultSet
executeQuery
(
String
sql
)
throws
SQLException
{
public
<
T
>
T
unwrap
(
Class
<
T
>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isWrapperFor
(
Class
<?>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
ResultSet
executeQuery
(
String
sql
)
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
// TODO make sure it is not a update query
pSql
=
this
.
connecter
.
executeQuery
(
sql
);
pSql
=
this
.
connecter
.
executeQuery
(
sql
);
long
resultSetPointer
=
this
.
connecter
.
getResultSet
();
long
resultSetPointer
=
this
.
connecter
.
getResultSet
();
if
(
resultSetPointer
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
TSDBConstants
.
JNI_CONNECTION_NULL
));
}
if
(
resultSetPointer
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
TSDBConstants
.
JNI_CONNECTION_NULL
));
}
// create/insert/update/delete/alter
if
(
resultSetPointer
==
TSDBConstants
.
JNI_NULL_POINTER
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
return
null
;
}
if
(
resultSetPointer
==
TSDBConstants
.
JNI_NULL_POINTER
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
return
null
;
}
if
(!
this
.
connecter
.
isUpdateQuery
(
pSql
))
{
return
new
TSDBResultSet
(
this
.
connecter
,
resultSetPointer
);
}
else
{
this
.
connecter
.
freeResultSet
(
pSql
);
return
null
;
}
if
(!
this
.
connecter
.
isUpdateQuery
(
pSql
))
{
return
new
TSDBResultSet
(
this
.
connecter
,
resultSetPointer
);
}
else
{
this
.
connecter
.
freeResultSet
(
pSql
);
return
null
;
}
}
}
public
int
executeUpdate
(
String
sql
)
throws
SQLException
{
public
int
executeUpdate
(
String
sql
)
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
// TODO check if current query is update query
pSql
=
this
.
connecter
.
executeQuery
(
sql
);
long
resultSetPointer
=
this
.
connecter
.
getResultSet
();
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
));
}
if
(
resultSetPointer
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
TSDBConstants
.
JNI_CONNECTION_NULL
));
}
this
.
affectedRows
=
this
.
connecter
.
getAffectedRows
(
pSql
);
this
.
connecter
.
freeResultSet
(
pSql
);
this
.
affectedRows
=
this
.
connecter
.
getAffectedRows
(
pSql
);
this
.
connecter
.
freeResultSet
(
pSql
);
return
this
.
affectedRows
;
}
return
this
.
affectedRows
;
}
public
String
getErrorMsg
(
long
pSql
)
{
return
this
.
connecter
.
getErrMsg
(
pSql
);
}
public
String
getErrorMsg
(
long
pSql
)
{
return
this
.
connecter
.
getErrMsg
(
pSql
);
}
public
void
close
()
throws
SQLException
{
public
void
close
()
throws
SQLException
{
if
(!
isClosed
)
{
if
(!
this
.
connecter
.
isResultsetClosed
())
{
this
.
connecter
.
freeResultSet
();
}
isClosed
=
true
;
}
}
}
public
int
getMaxFieldSize
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getMaxFieldSize
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setMaxFieldSize
(
int
max
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setMaxFieldSize
(
int
max
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getMaxRows
()
throws
SQLException
{
// always set maxRows to zero, meaning unlimitted rows in a resultSet
return
0
;
}
public
int
getMaxRows
()
throws
SQLException
{
// always set maxRows to zero, meaning unlimitted rows in a resultSet
return
0
;
}
public
void
setMaxRows
(
int
max
)
throws
SQLException
{
// always set maxRows to zero, meaning unlimitted rows in a resultSet
}
public
void
setMaxRows
(
int
max
)
throws
SQLException
{
// always set maxRows to zero, meaning unlimitted rows in a resultSet
}
public
void
setEscapeProcessing
(
boolean
enable
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setEscapeProcessing
(
boolean
enable
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getQueryTimeout
()
throws
SQLException
{
return
queryTimeout
;
}
public
int
getQueryTimeout
()
throws
SQLException
{
return
queryTimeout
;
}
public
void
setQueryTimeout
(
int
seconds
)
throws
SQLException
{
this
.
queryTimeout
=
seconds
;
}
public
void
setQueryTimeout
(
int
seconds
)
throws
SQLException
{
this
.
queryTimeout
=
seconds
;
}
public
void
cancel
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
cancel
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
SQLWarning
getWarnings
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
SQLWarning
getWarnings
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
clearWarnings
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
clearWarnings
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setCursorName
(
String
name
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setCursorName
(
String
name
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
)
throws
SQLException
{
public
boolean
execute
(
String
sql
)
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
boolean
res
=
true
;
pSql
=
this
.
connecter
.
executeQuery
(
sql
);
long
resultSetPointer
=
this
.
connecter
.
getResultSet
();
boolean
res
=
true
;
pSql
=
this
.
connecter
.
executeQuery
(
sql
);
long
resultSetPointer
=
this
.
connecter
.
getResultSet
();
if
(
resultSetPointer
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
this
.
connecter
.
freeResultSet
(
pSql
);
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
...
...
@@ -173,145 +184,147 @@ public class TSDBStatement implements Statement {
res
=
false
;
}
return
res
;
}
return
res
;
}
public
ResultSet
getResultSet
()
throws
SQLException
{
public
ResultSet
getResultSet
()
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
long
resultSetPointer
=
connecter
.
getResultSet
();
TSDBResultSet
resSet
=
null
;
long
resultSetPointer
=
connecter
.
getResultSet
();
TSDBResultSet
resSet
=
null
;
if
(
resultSetPointer
!=
TSDBConstants
.
JNI_NULL_POINTER
)
{
resSet
=
new
TSDBResultSet
(
connecter
,
resultSetPointer
);
}
return
resSet
;
}
return
resSet
;
}
public
int
getUpdateCount
()
throws
SQLException
{
public
int
getUpdateCount
()
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
return
this
.
affectedRows
;
}
public
boolean
getMoreResults
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setFetchDirection
(
int
direction
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getFetchDirection
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
/*
* used by spark
*/
public
void
setFetchSize
(
int
rows
)
throws
SQLException
{
}
/*
* used by spark
*/
public
int
getFetchSize
()
throws
SQLException
{
return
4096
;
}
public
int
getResultSetConcurrency
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getResultSetType
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
addBatch
(
String
sql
)
throws
SQLException
{
if
(
batchedArgs
==
null
)
{
batchedArgs
=
new
ArrayList
<
String
>();
}
batchedArgs
.
add
(
sql
);
}
public
void
clearBatch
()
throws
SQLException
{
batchedArgs
.
clear
();
}
public
int
[]
executeBatch
()
throws
SQLException
{
return
this
.
affectedRows
;
}
public
boolean
getMoreResults
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
setFetchDirection
(
int
direction
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getFetchDirection
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
/*
* used by spark
*/
public
void
setFetchSize
(
int
rows
)
throws
SQLException
{
}
/*
* used by spark
*/
public
int
getFetchSize
()
throws
SQLException
{
return
4096
;
}
public
int
getResultSetConcurrency
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getResultSetType
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
addBatch
(
String
sql
)
throws
SQLException
{
if
(
batchedArgs
==
null
)
{
batchedArgs
=
new
ArrayList
<
String
>();
}
batchedArgs
.
add
(
sql
);
}
public
void
clearBatch
()
throws
SQLException
{
batchedArgs
.
clear
();
}
public
int
[]
executeBatch
()
throws
SQLException
{
if
(
isClosed
)
{
throw
new
SQLException
(
"Invalid method call on a closed statement."
);
}
if
(
batchedArgs
==
null
)
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"Batch is empty!"
));
}
else
{
int
[]
res
=
new
int
[
batchedArgs
.
size
()];
for
(
int
i
=
0
;
i
<
batchedArgs
.
size
();
i
++)
{
res
[
i
]
=
executeUpdate
(
batchedArgs
.
get
(
i
));
}
return
res
;
}
}
public
Connection
getConnection
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
getMoreResults
(
int
current
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
ResultSet
getGeneratedKeys
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
int
autoGeneratedKeys
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
int
[]
columnIndexes
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
String
[]
columnNames
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
int
autoGeneratedKeys
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
int
[]
columnIndexes
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
String
[]
columnNames
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getResultSetHoldability
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isClosed
()
throws
SQLException
{
return
isClosed
;
}
public
void
setPoolable
(
boolean
poolable
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isPoolable
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
closeOnCompletion
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isCloseOnCompletion
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
if
(
batchedArgs
==
null
)
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"Batch is empty!"
));
}
else
{
int
[]
res
=
new
int
[
batchedArgs
.
size
()];
for
(
int
i
=
0
;
i
<
batchedArgs
.
size
();
i
++)
{
res
[
i
]
=
executeUpdate
(
batchedArgs
.
get
(
i
));
}
return
res
;
}
}
public
Connection
getConnection
()
throws
SQLException
{
if
(
this
.
connecter
!=
null
)
return
this
.
connection
;
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
getMoreResults
(
int
current
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
ResultSet
getGeneratedKeys
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
int
autoGeneratedKeys
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
int
[]
columnIndexes
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
executeUpdate
(
String
sql
,
String
[]
columnNames
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
int
autoGeneratedKeys
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
int
[]
columnIndexes
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
execute
(
String
sql
,
String
[]
columnNames
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
int
getResultSetHoldability
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isClosed
()
throws
SQLException
{
return
isClosed
;
}
public
void
setPoolable
(
boolean
poolable
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isPoolable
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
void
closeOnCompletion
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
public
boolean
isCloseOnCompletion
()
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORT_METHOD_EXCEPTIONZ_MSG
);
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
浏览文件 @
352cde98
...
...
@@ -23,6 +23,7 @@ import java.sql.SQLException;
public
class
SqlSyntaxValidator
{
private
TSDBConnection
tsdbConnection
;
public
SqlSyntaxValidator
(
Connection
connection
)
{
this
.
tsdbConnection
=
(
TSDBConnection
)
connection
;
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
浏览文件 @
352cde98
...
...
@@ -8,8 +8,7 @@ import org.junit.BeforeClass;
public
class
BaseTest
{
private
static
boolean
testCluster
=
false
;
private
static
TDNodes
nodes
=
new
TDNodes
();
private
static
TDNodes
nodes
=
new
TDNodes
();
@BeforeClass
public
static
void
setupEnv
()
{
...
...
@@ -19,11 +18,9 @@ public class BaseTest {
nodes
.
getTDNode
(
1
).
setRunning
(
1
);
nodes
.
stop
(
1
);
}
nodes
.
setTestCluster
(
testCluster
);
nodes
.
deploy
(
1
);
nodes
.
start
(
1
);
nodes
.
start
(
1
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
浏览文件 @
352cde98
...
...
@@ -7,13 +7,11 @@ import org.junit.Test;
import
java.sql.*
;
import
java.util.Properties
;
import
java.util.Random
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
java.util.Properties
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.
*
;
import
java.util.concurrent.
TimeUnit
;
import
static
org
.
junit
.
Assert
.
assert
True
;
import
static
org
.
junit
.
Assert
.
assert
Equals
;
public
class
BatchInsertTest
extends
BaseTest
{
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
浏览文件 @
352cde98
...
...
@@ -34,7 +34,6 @@ public class SelectTest extends BaseTest {
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
...
...
@@ -66,6 +65,5 @@ public class SelectTest extends BaseTest {
statement
.
close
();
connection
.
close
();
Thread
.
sleep
(
10
);
}
}
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.cases
;
import
com.taosdata.jdbc.lib.TSDBCommon
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.sql.Connection
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Random
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.TimeUnit
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
public
class
BatchInsertTest
{
static
String
host
=
"localhost"
;
static
String
dbName
=
"test"
;
static
String
stbName
=
"meters"
;
static
int
numOfTables
=
30
;
final
static
int
numOfRecordsPerTable
=
1000
;
static
long
ts
=
1496732686000
l
;
final
static
String
tablePrefix
=
"t"
;
private
Connection
connection
;
@Before
public
void
before
()
{
try
{
connection
=
TSDBCommon
.
getConn
(
host
);
TSDBCommon
.
createDatabase
(
connection
,
dbName
);
TSDBCommon
.
createStable
(
connection
,
stbName
);
TSDBCommon
.
createTables
(
connection
,
numOfTables
,
stbName
,
tablePrefix
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
@Test
public
void
testBatchInsert
(){
ExecutorService
executorService
=
Executors
.
newFixedThreadPool
(
numOfTables
);
for
(
int
i
=
0
;
i
<
numOfTables
;
i
++)
{
final
int
index
=
i
;
executorService
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
long
startTime
=
System
.
currentTimeMillis
();
Statement
statement
=
connection
.
createStatement
();
// get statement
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"INSERT INTO "
+
tablePrefix
+
index
+
" VALUES"
);
Random
rand
=
new
Random
();
for
(
int
j
=
1
;
j
<=
numOfRecordsPerTable
;
j
++)
{
sb
.
append
(
"("
+
(
ts
+
j
)
+
", "
);
sb
.
append
(
rand
.
nextInt
(
100
)
+
", "
);
sb
.
append
(
rand
.
nextInt
(
100
)
+
", "
);
sb
.
append
(
rand
.
nextInt
(
100
)
+
")"
);
}
statement
.
addBatch
(
sb
.
toString
());
statement
.
executeBatch
();
long
endTime
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
"Thread "
+
index
+
" takes "
+
(
endTime
-
startTime
)
+
" microseconds"
);
connection
.
commit
();
statement
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
});
}
executorService
.
shutdown
();
try
{
executorService
.
awaitTermination
(
Long
.
MAX_VALUE
,
TimeUnit
.
NANOSECONDS
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
try
{
Statement
statement
=
connection
.
createStatement
();
ResultSet
rs
=
statement
.
executeQuery
(
"select * from meters"
);
int
num
=
0
;
while
(
rs
.
next
())
{
num
++;
}
assertEquals
(
num
,
numOfTables
*
numOfRecordsPerTable
);
rs
.
close
();
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
}
@After
public
void
after
()
{
try
{
if
(
connection
!=
null
)
connection
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/connector/jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.lib
;
import
com.taosdata.jdbc.TSDBDriver
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.util.Properties
;
public
class
TSDBCommon
{
public
static
Connection
getConn
(
String
host
)
throws
SQLException
,
ClassNotFoundException
{
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
Properties
properties
=
new
Properties
();
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
,
host
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_CHARSET
,
"UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_LOCALE
,
"en_US.UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_TIME_ZONE
,
"UTC-8"
);
return
DriverManager
.
getConnection
(
"jdbc:TAOS://"
+
host
+
":0/"
,
properties
);
}
public
static
void
createDatabase
(
Connection
connection
,
String
dbName
)
throws
SQLException
{
Statement
statement
=
connection
.
createStatement
();
statement
.
executeUpdate
(
"drop database if exists "
+
dbName
);
statement
.
executeUpdate
(
"create database if not exists "
+
dbName
);
statement
.
executeUpdate
(
"use "
+
dbName
);
statement
.
close
();
}
public
static
void
createStable
(
Connection
connection
,
String
stbName
)
throws
SQLException
{
Statement
statement
=
connection
.
createStatement
();
String
createTableSql
=
"create table "
+
stbName
+
"(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))"
;
statement
.
executeUpdate
(
createTableSql
);
statement
.
close
();
}
public
static
void
createTables
(
Connection
connection
,
int
numOfTables
,
String
stbName
,
String
tablePrefix
)
throws
SQLException
{
Statement
statement
=
connection
.
createStatement
();
for
(
int
i
=
0
;
i
<
numOfTables
;
i
++)
{
String
loc
=
i
%
2
==
0
?
"beijing"
:
"shanghai"
;
String
createSubTalbesSql
=
"create table "
+
tablePrefix
+
i
+
" using "
+
stbName
+
" tags("
+
i
+
", '"
+
loc
+
"')"
;
statement
.
executeUpdate
(
createSubTalbesSql
);
}
statement
.
close
();
}
}
tests/examples/JDBC/SpringJdbcTemplate/pom.xml
浏览文件 @
352cde98
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
SpringJdbcTemplate
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
SpringJdbcTemplate
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<name>
SpringJdbcTemplate
</name>
<url>
http://www.taosdata.com
</url>
<name>
SpringJdbcTemplate
</name>
<url>
http://www.taosdata.com
</url>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
</properties>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
</properties>
<dependencies>
<dependencies>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context
</artifactId>
<version>
4.3.2
.RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context
</artifactId>
<version>
5.2.8
.RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-jdbc
</artifactId>
<version>
4.3.2
.RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-jdbc
</artifactId>
<version>
5.1.9
.RELEASE
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.11
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-test
</artifactId>
<version>
5.1.9.RELEASE
</version>
</dependency>
<dependency>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.2
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.13
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<dependency>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.4
</version>
</dependency>
<build>
<plugins>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.0
</version>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-assembly-plugin
</artifactId>
<version>
3.1.0
</version>
<configuration>
<archive>
<manifest>
<mainClass>
com.taosdata.jdbc.App
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>
make-assembly
</id>
<phase>
package
</phase>
<goals>
<goal>
single
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.0
</version>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-assembly-plugin
</artifactId>
<version>
3.1.0
</version>
<configuration>
<archive>
<manifest>
<mainClass>
com.taosdata.jdbc.example.jdbcTemplate.App
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>
make-assembly
</id>
<phase>
package
</phase>
<goals>
<goal>
single
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/App.java
已删除
100644 → 0
浏览文件 @
e78c8e9b
package
com.taosdata.jdbc
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.support.ClassPathXmlApplicationContext
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Map
;
public
class
App
{
public
static
void
main
(
String
[]
args
)
{
ApplicationContext
ctx
=
new
ClassPathXmlApplicationContext
(
"applicationContext.xml"
);
JdbcTemplate
jdbcTemplate
=
(
JdbcTemplate
)
ctx
.
getBean
(
"jdbcTemplate"
);
// create database
jdbcTemplate
.
execute
(
"create database if not exists db "
);
// create table
jdbcTemplate
.
execute
(
"create table if not exists db.tb (ts timestamp, temperature int, humidity float)"
);
String
insertSql
=
"insert into db.tb values(now, 23, 10.3) (now + 1s, 20, 9.3)"
;
// insert rows
int
affectedRows
=
jdbcTemplate
.
update
(
insertSql
);
System
.
out
.
println
(
"insert success "
+
affectedRows
+
" rows."
);
// query for list
List
<
Map
<
String
,
Object
>>
resultList
=
jdbcTemplate
.
queryForList
(
"select * from db.tb"
);
if
(!
CollectionUtils
.
isEmpty
(
resultList
)){
for
(
Map
<
String
,
Object
>
row
:
resultList
){
System
.
out
.
printf
(
"%s, %d, %s\n"
,
row
.
get
(
"ts"
),
row
.
get
(
"temperature"
),
row
.
get
(
"humidity"
));
}
}
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/App.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.ExecuteAsStatement
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.WeatherDao
;
import
com.taosdata.jdbc.example.jdbcTemplate.domain.Weather
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.support.ClassPathXmlApplicationContext
;
import
java.sql.Timestamp
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Random
;
public
class
App
{
private
static
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
public
static
void
main
(
String
[]
args
)
{
ApplicationContext
ctx
=
new
ClassPathXmlApplicationContext
(
"applicationContext.xml"
);
ExecuteAsStatement
executor
=
ctx
.
getBean
(
ExecuteAsStatement
.
class
);
// drop database
executor
.
doExecute
(
"drop database if exists test"
);
// create database
executor
.
doExecute
(
"create database if not exists test"
);
//use database
executor
.
doExecute
(
"use test"
);
// create table
executor
.
doExecute
(
"create table if not exists test.weather (ts timestamp, temperature int, humidity float)"
);
WeatherDao
weatherDao
=
ctx
.
getBean
(
WeatherDao
.
class
);
Weather
weather
=
new
Weather
(
new
Timestamp
(
new
Date
().
getTime
()),
random
.
nextFloat
()
*
50.0f
,
random
.
nextInt
(
100
));
// insert rows
int
affectedRows
=
weatherDao
.
add
(
weather
);
System
.
out
.
println
(
"insert success "
+
affectedRows
+
" rows."
);
// query for list
int
limit
=
10
,
offset
=
0
;
List
<
Weather
>
weatherList
=
weatherDao
.
queryForList
(
limit
,
offset
);
for
(
Weather
w
:
weatherList
)
{
System
.
out
.
println
(
w
);
}
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/ExecuteAsStatement.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate.dao
;
public
interface
ExecuteAsStatement
{
void
doExecute
(
String
sql
);
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/WeatherDao.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate.dao
;
import
com.taosdata.jdbc.example.jdbcTemplate.domain.Weather
;
import
java.util.List
;
public
interface
WeatherDao
{
int
add
(
Weather
weather
);
int
[]
batchInsert
(
List
<
Weather
>
weatherList
);
List
<
Weather
>
queryForList
(
int
limit
,
int
offset
);
int
count
();
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/impl/ExecuteAsStatementImpl.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate.dao.impl
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.ExecuteAsStatement
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.stereotype.Repository
;
@Repository
public
class
ExecuteAsStatementImpl
implements
ExecuteAsStatement
{
@Autowired
private
JdbcTemplate
jdbcTemplate
;
@Override
public
void
doExecute
(
String
sql
)
{
jdbcTemplate
.
execute
(
sql
);
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/dao/impl/WeatherDaoImpl.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate.dao.impl
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.WeatherDao
;
import
com.taosdata.jdbc.example.jdbcTemplate.domain.Weather
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.BatchPreparedStatementSetter
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils
;
import
org.springframework.jdbc.core.simple.SimpleJdbcInsert
;
import
org.springframework.stereotype.Repository
;
import
java.sql.PreparedStatement
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Repository
public
class
WeatherDaoImpl
implements
WeatherDao
{
@Autowired
private
JdbcTemplate
jdbcTemplate
;
@Override
public
int
add
(
Weather
weather
)
{
return
jdbcTemplate
.
update
(
"insert into test.weather(ts, temperature, humidity) VALUES(?,?,?)"
,
weather
.
getTs
(),
weather
.
getTemperature
(),
weather
.
getHumidity
()
);
}
@Override
public
int
[]
batchInsert
(
List
<
Weather
>
weatherList
)
{
return
jdbcTemplate
.
batchUpdate
(
"insert into test.weather(ts, temperature, humidity) values( ?, ?, ?)"
,
new
BatchPreparedStatementSetter
()
{
@Override
public
void
setValues
(
PreparedStatement
ps
,
int
i
)
throws
SQLException
{
ps
.
setTimestamp
(
1
,
weatherList
.
get
(
i
).
getTs
());
ps
.
setFloat
(
2
,
weatherList
.
get
(
i
).
getTemperature
());
ps
.
setInt
(
3
,
weatherList
.
get
(
i
).
getHumidity
());
}
@Override
public
int
getBatchSize
()
{
return
weatherList
.
size
();
}
});
}
@Override
public
List
<
Weather
>
queryForList
(
int
limit
,
int
offset
)
{
return
jdbcTemplate
.
query
(
"select * from test.weather limit ? offset ?"
,
(
rs
,
rowNum
)
->
{
Timestamp
ts
=
rs
.
getTimestamp
(
"ts"
);
float
temperature
=
rs
.
getFloat
(
"temperature"
);
int
humidity
=
rs
.
getInt
(
"humidity"
);
return
new
Weather
(
ts
,
temperature
,
humidity
);
},
limit
,
offset
);
}
@Override
public
int
count
()
{
return
jdbcTemplate
.
queryForObject
(
"select count(*) from test.weather"
,
Integer
.
class
);
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/jdbc/example/jdbcTemplate/domain/Weather.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate.domain
;
import
java.sql.Timestamp
;
public
class
Weather
{
private
Timestamp
ts
;
private
float
temperature
;
private
int
humidity
;
public
Weather
()
{
}
public
Weather
(
Timestamp
ts
,
float
temperature
,
int
humidity
)
{
this
.
ts
=
ts
;
this
.
temperature
=
temperature
;
this
.
humidity
=
humidity
;
}
@Override
public
String
toString
()
{
return
"Weather{"
+
"ts="
+
ts
+
", temperature="
+
temperature
+
", humidity="
+
humidity
+
'}'
;
}
public
Timestamp
getTs
()
{
return
ts
;
}
public
void
setTs
(
Timestamp
ts
)
{
this
.
ts
=
ts
;
}
public
float
getTemperature
()
{
return
temperature
;
}
public
void
setTemperature
(
float
temperature
)
{
this
.
temperature
=
temperature
;
}
public
int
getHumidity
()
{
return
humidity
;
}
public
void
setHumidity
(
int
humidity
)
{
this
.
humidity
=
humidity
;
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml
浏览文件 @
352cde98
...
...
@@ -5,20 +5,21 @@
xsi:schemaLocation=
"
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
"
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire=
"byName"
>
<bean
id=
"dataSource"
class=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<property
name=
"driverClassName"
value=
"com.taosdata.jdbc.TSDBDriver"
></property>
<property
name=
"url"
value=
"jdbc:TAOS://1
27.0.0.1:6030/log
"
></property>
<property
name=
"url"
value=
"jdbc:TAOS://1
92.168.236.137:6030/
"
></property>
<property
name=
"username"
value=
"root"
></property>
<property
name=
"password"
value=
"taosdata"
></property>
</bean>
<bean
id
=
"jdbcTemplate"
class=
"org.springframework.jdbc.core.JdbcTemplate"
>
<property
name=
"dataSource"
ref
=
"dataSource"
></property>
<bean
id
=
"jdbcTemplate"
class=
"org.springframework.jdbc.core.JdbcTemplate"
>
<property
name=
"dataSource"
ref
=
"dataSource"
></property>
</bean>
<context:component-scan
base-package=
"com.taosdata.jdbc.example.jdbcTemplate"
/>
</beans>
tests/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/jdbc/AppTest.java
浏览文件 @
352cde98
...
...
@@ -7,14 +7,12 @@ import org.junit.Test;
/**
* Unit test for simple App.
*/
public
class
AppTest
{
public
class
AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public
void
shouldAnswerWithTrue
()
{
assertTrue
(
true
);
public
void
shouldAnswerWithTrue
()
{
assertTrue
(
true
);
}
}
tests/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/jdbc/example/jdbcTemplate/BatcherInsertTest.java
0 → 100644
浏览文件 @
352cde98
package
com.taosdata.jdbc.example.jdbcTemplate
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.ExecuteAsStatement
;
import
com.taosdata.jdbc.example.jdbcTemplate.dao.WeatherDao
;
import
com.taosdata.jdbc.example.jdbcTemplate.domain.Weather
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Random
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
({
"classpath:applicationContext.xml"
})
public
class
BatcherInsertTest
{
@Autowired
private
WeatherDao
weatherDao
;
@Autowired
private
ExecuteAsStatement
executor
;
private
static
final
int
numOfRecordsPerTable
=
1000
;
private
static
long
ts
=
1496732686000
l
;
private
static
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
@Before
public
void
before
()
{
// drop database
executor
.
doExecute
(
"drop database if exists test"
);
// create database
executor
.
doExecute
(
"create database if not exists test"
);
//use database
executor
.
doExecute
(
"use test"
);
// create table
executor
.
doExecute
(
"create table if not exists test.weather (ts timestamp, temperature int, humidity float)"
);
}
@Test
public
void
batchInsert
()
{
List
<
Weather
>
weatherList
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
numOfRecordsPerTable
;
i
++)
{
ts
+=
1000
;
Weather
weather
=
new
Weather
(
new
Timestamp
(
ts
),
random
.
nextFloat
()
*
50.0f
,
random
.
nextInt
(
100
));
weatherList
.
add
(
weather
);
}
long
start
=
System
.
currentTimeMillis
();
weatherDao
.
batchInsert
(
weatherList
);
long
end
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
"batch insert("
+
numOfRecordsPerTable
+
" rows) time cost ==========> "
+
(
end
-
start
)
+
" ms"
);
int
count
=
weatherDao
.
count
();
assertEquals
(
count
,
numOfRecordsPerTable
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录