Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d4bcce0d
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d4bcce0d
编写于
10月 29, 2019
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
6fec7de2
bd2b9f06
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
204 addition
and
200 deletion
+204
-200
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
...dbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
+204
-200
未找到文件。
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
浏览文件 @
d4bcce0d
...
...
@@ -19,102 +19,104 @@ import java.sql.SQLWarning;
import
java.util.List
;
public
class
TSDBJNIConnector
{
static
volatile
Boolean
isInitialized
=
false
;
static
{
System
.
loadLibrary
(
"taos"
);
}
/**
* Connection pointer used in C
*/
private
long
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
/**
* Result set pointer for the current connection
*/
private
long
taosResultSetPointer
=
TSDBConstants
.
JNI_NULL_POINTER
;
/**
* result set status in current connection
*/
private
boolean
isResultsetClosed
=
true
;
private
int
affectedRows
=
-
1
;
/**
* Whether the connection is closed
*/
public
boolean
isClosed
()
{
return
this
.
taos
==
TSDBConstants
.
JNI_NULL_POINTER
;
}
/**
* Returns the status of last result set in current connection
* @return
*/
public
boolean
isResultsetClosed
()
{
return
this
.
isResultsetClosed
;
}
/**
* Initialize static variables in JNI to optimize performance
*/
public
static
void
init
(
String
configDir
,
String
locale
,
String
charset
,
String
timezone
)
throws
SQLWarning
{
synchronized
(
isInitialized
)
{
if
(!
isInitialized
)
{
initImp
(
configDir
);
if
(
setOptions
(
0
,
locale
)
<
0
)
{
throw
new
SQLWarning
(
TSDBConstants
.
WrapErrMsg
(
"Failed to set locale: "
+
locale
+
". System default will be used."
));
}
static
volatile
Boolean
isInitialized
=
false
;
static
{
System
.
loadLibrary
(
"taos"
);
System
.
out
.
println
(
"java.library.path:"
+
System
.
getProperty
(
"java.library.path"
));
}
/**
* Connection pointer used in C
*/
private
long
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
/**
* Result set pointer for the current connection
*/
private
long
taosResultSetPointer
=
TSDBConstants
.
JNI_NULL_POINTER
;
/**
* result set status in current connection
*/
private
boolean
isResultsetClosed
=
true
;
private
int
affectedRows
=
-
1
;
/**
* Whether the connection is closed
*/
public
boolean
isClosed
()
{
return
this
.
taos
==
TSDBConstants
.
JNI_NULL_POINTER
;
}
/**
* Returns the status of last result set in current connection
*
* @return
*/
public
boolean
isResultsetClosed
()
{
return
this
.
isResultsetClosed
;
}
/**
* Initialize static variables in JNI to optimize performance
*/
public
static
void
init
(
String
configDir
,
String
locale
,
String
charset
,
String
timezone
)
throws
SQLWarning
{
synchronized
(
isInitialized
)
{
if
(!
isInitialized
)
{
initImp
(
configDir
);
if
(
setOptions
(
0
,
locale
)
<
0
)
{
throw
new
SQLWarning
(
TSDBConstants
.
WrapErrMsg
(
"Failed to set locale: "
+
locale
+
". System default will be used."
));
}
if
(
setOptions
(
1
,
charset
)
<
0
)
{
throw
new
SQLWarning
(
TSDBConstants
.
WrapErrMsg
(
"Failed to set charset: "
+
charset
+
". System default will be used."
));
}
if
(
setOptions
(
2
,
timezone
)
<
0
)
{
throw
new
SQLWarning
(
TSDBConstants
.
WrapErrMsg
(
"Failed to set timezone: "
+
timezone
+
". System default will be used."
));
}
isInitialized
=
true
;
TaosGlobalConfig
.
setCharset
(
getTsCharset
());
}
}
}
if
(
setOptions
(
2
,
timezone
)
<
0
)
{
throw
new
SQLWarning
(
TSDBConstants
.
WrapErrMsg
(
"Failed to set timezone: "
+
timezone
+
". System default will be used."
));
}
isInitialized
=
true
;
TaosGlobalConfig
.
setCharset
(
getTsCharset
());
}
}
}
public
static
native
void
initImp
(
String
configDir
);
public
static
native
void
initImp
(
String
configDir
);
public
static
native
int
setOptions
(
int
optionIndex
,
String
optionValue
);
public
static
native
int
setOptions
(
int
optionIndex
,
String
optionValue
);
public
static
native
String
getTsCharset
();
/**
* Get connection pointer
*
* @throws SQLException
*/
public
boolean
connect
(
String
host
,
int
port
,
String
dbName
,
String
user
,
String
password
)
throws
SQLException
{
if
(
this
.
taos
!=
TSDBConstants
.
JNI_NULL_POINTER
)
{
this
.
closeConnectionImp
(
this
.
taos
);
this
.
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
}
this
.
taos
=
this
.
connectImp
(
host
,
port
,
dbName
,
user
,
password
);
if
(
this
.
taos
==
TSDBConstants
.
JNI_NULL_POINTER
)
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
this
.
getErrMsg
()),
""
,
this
.
getErrCode
());
}
return
true
;
}
private
native
long
connectImp
(
String
host
,
int
port
,
String
dbName
,
String
user
,
String
password
);
/**
* Execute DML/DDL operation
*
* @throws SQLException
*/
public
int
executeQuery
(
String
sql
)
throws
SQLException
{
/**
* Get connection pointer
*
* @throws SQLException
*/
public
boolean
connect
(
String
host
,
int
port
,
String
dbName
,
String
user
,
String
password
)
throws
SQLException
{
if
(
this
.
taos
!=
TSDBConstants
.
JNI_NULL_POINTER
)
{
this
.
closeConnectionImp
(
this
.
taos
);
this
.
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
}
this
.
taos
=
this
.
connectImp
(
host
,
port
,
dbName
,
user
,
password
);
if
(
this
.
taos
==
TSDBConstants
.
JNI_NULL_POINTER
)
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
this
.
getErrMsg
()),
""
,
this
.
getErrCode
());
}
return
true
;
}
private
native
long
connectImp
(
String
host
,
int
port
,
String
dbName
,
String
user
,
String
password
);
/**
* Execute DML/DDL operation
*
* @throws SQLException
*/
public
int
executeQuery
(
String
sql
)
throws
SQLException
{
if
(!
this
.
isResultsetClosed
)
{
freeResultSet
(
taosResultSetPointer
);
freeResultSet
(
taosResultSetPointer
);
}
int
code
;
try
{
code
=
this
.
executeQueryImp
(
sql
.
getBytes
(
TaosGlobalConfig
.
getCharset
()),
this
.
taos
);
...
...
@@ -122,7 +124,7 @@ public class TSDBJNIConnector {
e
.
printStackTrace
();
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"Unsupported encoding"
));
}
affectedRows
=
code
;
affectedRows
=
code
;
if
(
code
<
0
)
{
affectedRows
=
-
1
;
if
(
code
==
TSDBConstants
.
JNI_TDENGINE_ERROR
)
{
...
...
@@ -140,157 +142,159 @@ public class TSDBJNIConnector {
isResultsetClosed
=
false
;
}
return
code
;
}
}
private
native
int
executeQueryImp
(
byte
[]
sqlBytes
,
long
connection
);
private
native
int
executeQueryImp
(
byte
[]
sqlBytes
,
long
connection
);
/**
* Get recent error code by connection
*/
public
int
getErrCode
()
{
return
Math
.
abs
(
this
.
getErrCodeImp
(
this
.
taos
));
}
/**
* Get recent error code by connection
*/
public
int
getErrCode
()
{
return
Math
.
abs
(
this
.
getErrCodeImp
(
this
.
taos
));
}
private
native
int
getErrCodeImp
(
long
connection
);
private
native
int
getErrCodeImp
(
long
connection
);
/**
* Get recent error message by connection
*/
public
String
getErrMsg
()
{
return
this
.
getErrMsgImp
(
this
.
taos
);
}
/**
* Get recent error message by connection
*/
public
String
getErrMsg
()
{
return
this
.
getErrMsgImp
(
this
.
taos
);
}
private
native
String
getErrMsgImp
(
long
connection
);
private
native
String
getErrMsgImp
(
long
connection
);
/**
* Get resultset pointer
/**
* Get resultset pointer
* Each connection should have a single open result set at a time
*/
public
long
getResultSet
()
{
*/
public
long
getResultSet
()
{
return
taosResultSetPointer
;
}
}
private
native
long
getResultSetImp
(
long
connection
);
private
native
long
getResultSetImp
(
long
connection
);
/**
* Free resultset operation from C to release resultset pointer by JNI
*/
public
int
freeResultSet
(
long
result
)
{
/**
* Free resultset operation from C to release resultset pointer by JNI
*/
public
int
freeResultSet
(
long
result
)
{
int
res
=
TSDBConstants
.
JNI_SUCCESS
;
if
(
result
!=
taosResultSetPointer
&&
taosResultSetPointer
!=
TSDBConstants
.
JNI_NULL_POINTER
)
{
throw
new
RuntimeException
(
"Invalid result set pointer"
);
}
else
if
(
taosResultSetPointer
!=
TSDBConstants
.
JNI_NULL_POINTER
){
}
else
if
(
taosResultSetPointer
!=
TSDBConstants
.
JNI_NULL_POINTER
)
{
res
=
this
.
freeResultSetImp
(
this
.
taos
,
result
);
isResultsetClosed
=
true
;
// reset resultSetPointer to 0 after freeResultSetImp() return
taosResultSetPointer
=
TSDBConstants
.
JNI_NULL_POINTER
;
}
else
{
isResultsetClosed
=
true
;
}
}
return
res
;
}
}
/**
* Close the open result set which is associated to the current connection. If the result set is already
* closed, return 0 for success.
*
* @return
*/
public
int
freeResultSet
()
{
int
resCode
=
TSDBConstants
.
JNI_SUCCESS
;
public
int
freeResultSet
()
{
int
resCode
=
TSDBConstants
.
JNI_SUCCESS
;
if
(!
isResultsetClosed
)
{
resCode
=
this
.
freeResultSetImp
(
this
.
taos
,
this
.
taosResultSetPointer
);
taosResultSetPointer
=
TSDBConstants
.
JNI_NULL_POINTER
;
isResultsetClosed
=
true
;
isResultsetClosed
=
true
;
}
return
resCode
;
}
private
native
int
freeResultSetImp
(
long
connection
,
long
result
);
private
native
int
freeResultSetImp
(
long
connection
,
long
result
);
/**
* Get affected rows count
*/
public
int
getAffectedRows
()
{
int
affectedRows
=
this
.
affectedRows
;
/**
* Get affected rows count
*/
public
int
getAffectedRows
()
{
int
affectedRows
=
this
.
affectedRows
;
if
(
affectedRows
<
0
)
{
affectedRows
=
this
.
getAffectedRowsImp
(
this
.
taos
);
}
return
affectedRows
;
}
private
native
int
getAffectedRowsImp
(
long
connection
);
/**
* Get schema metadata
*/
public
int
getSchemaMetaData
(
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
)
{
return
this
.
getSchemaMetaDataImp
(
this
.
taos
,
resultSet
,
columnMetaData
);
}
private
native
int
getSchemaMetaDataImp
(
long
connection
,
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
);
/**
* Get one row data
*/
public
int
fetchRow
(
long
resultSet
,
TSDBResultSetRowData
rowData
)
{
return
this
.
fetchRowImp
(
this
.
taos
,
resultSet
,
rowData
);
}
private
native
int
fetchRowImp
(
long
connection
,
long
resultSet
,
TSDBResultSetRowData
rowData
);
/**
* Execute close operation from C to release connection pointer by JNI
*
* @throws SQLException
*/
public
void
closeConnection
()
throws
SQLException
{
int
code
=
this
.
closeConnectionImp
(
this
.
taos
);
if
(
code
<
0
)
{
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
code
),
""
,
this
.
getErrCode
());
}
else
if
(
code
==
0
)
{
this
.
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
}
else
{
throw
new
SQLException
(
"Undefined error code returned by TDengine when closing a connection"
);
}
private
native
int
getAffectedRowsImp
(
long
connection
);
/**
* Get schema metadata
*/
public
int
getSchemaMetaData
(
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
)
{
return
this
.
getSchemaMetaDataImp
(
this
.
taos
,
resultSet
,
columnMetaData
);
}
private
native
int
getSchemaMetaDataImp
(
long
connection
,
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
);
/**
* Get one row data
*/
public
int
fetchRow
(
long
resultSet
,
TSDBResultSetRowData
rowData
)
{
return
this
.
fetchRowImp
(
this
.
taos
,
resultSet
,
rowData
);
}
private
native
int
fetchRowImp
(
long
connection
,
long
resultSet
,
TSDBResultSetRowData
rowData
);
/**
* Execute close operation from C to release connection pointer by JNI
*
* @throws SQLException
*/
public
void
closeConnection
()
throws
SQLException
{
int
code
=
this
.
closeConnectionImp
(
this
.
taos
);
if
(
code
<
0
)
{
throw
new
SQLException
(
TSDBConstants
.
FixErrMsg
(
code
),
""
,
this
.
getErrCode
());
}
else
if
(
code
==
0
)
{
this
.
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
}
else
{
throw
new
SQLException
(
"Undefined error code returned by TDengine when closing a connection"
);
}
}
private
native
int
closeConnectionImp
(
long
connection
);
/**
* Subscribe to a table in TSDB
*/
public
long
subscribe
(
String
host
,
String
user
,
String
password
,
String
database
,
String
table
,
long
time
,
int
period
){
return
subscribeImp
(
host
,
user
,
password
,
database
,
table
,
time
,
period
);
}
private
native
long
subscribeImp
(
String
host
,
String
user
,
String
password
,
String
database
,
String
table
,
long
time
,
int
period
);
/**
* Consume a subscribed table
*/
public
TSDBResultSetRowData
consume
(
long
subscription
)
{
return
this
.
consumeImp
(
subscription
);
}
private
native
TSDBResultSetRowData
consumeImp
(
long
subscription
);
/**
* Unsubscribe a table
* @param subscription
*/
public
void
unsubscribe
(
long
subscription
)
{
unsubscribeImp
(
subscription
);
}
private
native
void
unsubscribeImp
(
long
subscription
);
/**
* Validate if a <I>create table</I> sql statement is correct without actually creating that table
*/
public
boolean
validateCreateTableSql
(
String
sql
)
{
long
connection
=
taos
;
int
res
=
validateCreateTableSqlImp
(
connection
,
sql
.
getBytes
());
}
private
native
int
closeConnectionImp
(
long
connection
);
/**
* Subscribe to a table in TSDB
*/
public
long
subscribe
(
String
host
,
String
user
,
String
password
,
String
database
,
String
table
,
long
time
,
int
period
)
{
return
subscribeImp
(
host
,
user
,
password
,
database
,
table
,
time
,
period
);
}
private
native
long
subscribeImp
(
String
host
,
String
user
,
String
password
,
String
database
,
String
table
,
long
time
,
int
period
);
/**
* Consume a subscribed table
*/
public
TSDBResultSetRowData
consume
(
long
subscription
)
{
return
this
.
consumeImp
(
subscription
);
}
private
native
TSDBResultSetRowData
consumeImp
(
long
subscription
);
/**
* Unsubscribe a table
*
* @param subscription
*/
public
void
unsubscribe
(
long
subscription
)
{
unsubscribeImp
(
subscription
);
}
private
native
void
unsubscribeImp
(
long
subscription
);
/**
* Validate if a <I>create table</I> sql statement is correct without actually creating that table
*/
public
boolean
validateCreateTableSql
(
String
sql
)
{
long
connection
=
taos
;
int
res
=
validateCreateTableSqlImp
(
connection
,
sql
.
getBytes
());
return
res
!=
0
?
false
:
true
;
}
}
private
native
int
validateCreateTableSqlImp
(
long
connection
,
byte
[]
sqlBytes
);
private
native
int
validateCreateTableSqlImp
(
long
connection
,
byte
[]
sqlBytes
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录