Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
4900dcdc
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看板
未验证
提交
4900dcdc
编写于
10月 24, 2019
作者:
H
haojun Liao
提交者:
GitHub
10月 24, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #641 from xieyinglin/master
add support preparedstatement execute batch
上级
cd95c32a
2add95e9
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
1053 addition
and
350 deletion
+1053
-350
.gitignore
.gitignore
+2
-0
src/connector/jdbc/pom.xml
src/connector/jdbc/pom.xml
+168
-28
src/connector/jdbc/src/main/java/com/taosdata/jdbc/SavedPreparedStatement.java
...c/main/java/com/taosdata/jdbc/SavedPreparedStatement.java
+433
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
...rc/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
+388
-322
src/connector/jdbc/src/main/java/com/taosdata/jdbc/bean/TSDBPreparedParam.java
...c/main/java/com/taosdata/jdbc/bean/TSDBPreparedParam.java
+62
-0
未找到文件。
.gitignore
浏览文件 @
4900dcdc
...
...
@@ -23,3 +23,5 @@ tests/script/
tests/pytest/
tests/jenkins/
tests/hdfs/
*.iml
src/connector/jdbc/pom.xml
浏览文件 @
4900dcdc
<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>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
1.0.1
</version>
<version>
1.0.2
</version>
<packaging>
jar
</packaging>
<name>
JDBCDriver
</name>
<url>
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
</url>
<description>
TDengine JDBC Driver
</description>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
<licenses>
<license>
<name>
GNU AFFERO GENERAL PUBLIC LICENSE Version 3
</name>
<url>
https://github.com/taosdata/TDengine/blob/master/LICENSE
</url>
<distribution>
repo
</distribution>
</license>
</licenses>
<scm>
<connection>
scm:git:git://github.com/taosdata/TDengine.git
</connection>
<developerConnection>
scm:git:git@github.com:taosdata/TDengine.git
</developerConnection>
<url>
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
</url>
<tag>
HEAD
</tag>
</scm>
<developers>
<developer>
<name>
taosdata
</name>
<email>
support@taosdata.com
</email>
<organization>
https://www.taosdata.com/
</organization>
<organizationUrl>
https://www.taosdata.com/
</organizationUrl>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<java.version>
1.8
</java.version>
<maven-source-plugin.version>
3.0.1
</maven-source-plugin.version>
<maven-compiler-plugin.version>
3.6.0
</maven-compiler-plugin.version>
<maven-gpg-plugin.version>
1.6
</maven-gpg-plugin.version>
<maven-javadoc-plugin.version>
3.1.0
</maven-javadoc-plugin.version>
<maven-surefire-plugin.version>
2.19.1
</maven-surefire-plugin.version>
<maven-deploy-plugin.version>
2.8.2
</maven-deploy-plugin.version>
<nexus-staging-maven-plugin.version>
1.6.7
</nexus-staging-maven-plugin.version>
<maven-release-plugin.version>
2.5.3
</maven-release-plugin.version>
<maven-scm-provider-gitexe.version>
1.9.5
</maven-scm-provider-gitexe.version>
<commons-logging.version>
1.1.2
</commons-logging.version>
<commons-lang3.version>
3.5
</commons-lang3.version>
</properties>
<dependencies>
<dependency>
<groupId>
commons-logging
</groupId>
<artifactId>
commons-logging
</artifactId>
<version>
${commons-logging.version}
</version>
<exclusions>
<exclusion>
<groupId>
*
</groupId>
<artifactId>
*
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
${commons-lang3.version}
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
...
...
@@ -18,7 +80,7 @@
<version>
3.0.0
</version>
<configuration>
<descriptors>
<!--<descriptor>src/main/assembly/assembly.xml</descriptor>-->
<!--<descriptor>src/main/assembly/assembly.xml</descriptor>-->
<descriptor>
src/main/assembly/assembly-jar.xml
</descriptor>
</descriptors>
</configuration>
...
...
@@ -35,18 +97,19 @@
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
2.3.2
</version>
<version>
${maven-compiler-plugin.version}
</version>
<configuration>
<encoding>
UTF-8
</encoding>
<source>
1.8
</source>
<target>
1.8
</target>
<source>
${java.version}
</source>
<target>
${java.version}
</target>
<debug>
true
</debug>
<showDeprecation>
true
</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-source-plugin
</artifactId>
<version>
2.1.2
</version>
<version>
${maven-source-plugin.version}
</version>
<executions>
<execution>
<id>
attach-sources
</id>
...
...
@@ -56,24 +119,101 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-javadoc-plugin
</artifactId>
<version>
${maven-javadoc-plugin.version}
</version>
<configuration>
<encoding>
UTF-8
</encoding>
<charset>
UTF-8
</charset>
<docencoding>
UTF-8
</docencoding>
</configuration>
<executions>
<execution>
<id>
attach-javadocs
</id>
<goals>
<goal>
jar
</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-gpg-plugin
</artifactId>
<version>
${maven-gpg-plugin.version}
</version>
<executions>
<execution>
<id>
sign-artifacts
</id>
<phase>
verify
</phase>
<goals>
<goal>
sign
</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>
maven-deploy-plugin
</artifactId>
<version>
${maven-deploy-plugin.version}
</version>
<executions>
<execution>
<id>
default-deploy
</id>
<phase>
deploy
</phase>
<goals>
<goal>
deploy
</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
${maven-surefire-plugin.version}
</version>
<configuration>
<skipTests>
true
</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>
org.sonatype.plugins
</groupId>
<artifactId>
nexus-staging-maven-plugin
</artifactId>
<version>
${nexus-staging-maven-plugin.version}
</version>
<extensions>
true
</extensions>
<configuration>
<serverId>
ossrh-td
</serverId>
<nexusUrl>
https://oss.sonatype.org/
</nexusUrl>
<autoReleaseAfterClose>
true
</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-release-plugin
</artifactId>
<version>
${maven-release-plugin.version}
</version>
<configuration>
<localCheckout>
true
</localCheckout>
<pushChanges>
false
</pushChanges>
<mavenExecutorId>
forked-path
</mavenExecutorId>
<arguments>
-Dgpg.passphrase=${gpg.passphrase}
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>
org.apache.maven.scm
</groupId>
<artifactId>
maven-scm-provider-gitexe
</artifactId>
<version>
${maven-scm-provider-gitexe.version}
</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>
commons-logging
</groupId>
<artifactId>
commons-logging
</artifactId>
<version>
1.1.2
</version>
<exclusions>
<exclusion>
<groupId>
*
</groupId>
<artifactId>
*
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
3.5
</version>
</dependency>
</dependencies>
<distributionManagement>
<snapshotRepository>
<id>
ossrh-td
</id>
<url>
https://oss.sonatype.org/content/repositories/snapshots
</url>
</snapshotRepository>
<repository>
<id>
ossrh-td
</id>
<url>
https://oss.sonatype.org/service/local/staging/deploy/maven2/
</url>
</repository>
</distributionManagement>
</project>
src/connector/jdbc/src/main/java/com/taosdata/jdbc/SavedPreparedStatement.java
0 → 100644
浏览文件 @
4900dcdc
package
com.taosdata.jdbc
;
import
com.taosdata.jdbc.bean.TSDBPreparedParam
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
* this class is used to precompile the sql of tdengine insert or import ops
*/
public
class
SavedPreparedStatement
{
private
TSDBPreparedStatement
tsdbPreparedStatement
;
/**
* sql param List
*/
private
List
<
TSDBPreparedParam
>
sqlParamList
;
/**
* init param according the sql
*/
private
TSDBPreparedParam
initPreparedParam
;
/**
* is table name dynamic in the prepared sql
*/
private
boolean
isTableNameDynamic
;
/**
* insert or import sql template pattern, the template are the following:
* <p>
* insert/import into tableName [(field1, field2, ...)] [using stables tags(?, ?, ...) ] values(?, ?, ...) (?, ?, ...)
* <p>
* we split it to three part:
* 1. prefix, insert/import
* 2. middle, tableName [(field1, field2, ...)] [using stables tags(?, ?, ...) ]
* 3. valueList, the content after values, for example (?, ?, ...) (?, ?, ...)
*/
private
Pattern
sqlPattern
=
Pattern
.
compile
(
"(?s)(?i)^\\s*(INSERT|IMPORT)\\s+INTO\\s+((?<tablename>\\S+)\\s*(\\(.*\\))?\\s+(USING\\s+(?<stableName>\\S+)\\s+TAGS\\s*\\((?<tagValue>.+)\\))?)\\s*VALUES\\s*(?<valueList>\\(.*\\)).*"
);
/**
* the raw sql template
*/
private
String
sql
;
/**
* the prefix part of sql
*/
private
String
prefix
;
/**
* the middle part of sql
*/
private
String
middle
;
private
int
middleParamSize
;
/**
* the valueList part of sql
*/
private
String
valueList
;
private
int
valueListSize
;
/**
* default param value
*/
private
static
final
String
DEFAULT_VALUE
=
"NULL"
;
private
static
final
String
PLACEHOLDER
=
"?"
;
private
String
tableName
;
/**
* is the parameter add to batch list
*/
private
boolean
isAddBatch
;
public
SavedPreparedStatement
(
String
sql
,
TSDBPreparedStatement
tsdbPreparedStatement
)
throws
SQLException
{
this
.
sql
=
sql
;
this
.
tsdbPreparedStatement
=
tsdbPreparedStatement
;
this
.
sqlParamList
=
new
ArrayList
<>();
parsePreparedParam
(
this
.
sql
);
}
/**
* parse the init param according the sql param
*
* @param sql
*/
private
void
parsePreparedParam
(
String
sql
)
throws
SQLException
{
Matcher
matcher
=
sqlPattern
.
matcher
(
sql
);
if
(
matcher
.
find
())
{
tableName
=
matcher
.
group
(
"tablename"
);
if
(
tableName
!=
null
&&
PLACEHOLDER
.
equals
(
tableName
))
{
// the table name is dynamic
this
.
isTableNameDynamic
=
true
;
}
prefix
=
matcher
.
group
(
1
);
middle
=
matcher
.
group
(
2
);
valueList
=
matcher
.
group
(
"valueList"
);
if
(
middle
!=
null
&&
!
""
.
equals
(
middle
))
{
middleParamSize
=
parsePlaceholder
(
middle
);
}
if
(
valueList
!=
null
&&
!
""
.
equals
(
valueList
))
{
valueListSize
=
parsePlaceholder
(
valueList
);
}
initPreparedParam
=
initDefaultParam
(
tableName
,
middleParamSize
,
valueListSize
);
}
else
{
// not match
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"the sql is not complete!"
));
}
}
private
TSDBPreparedParam
initDefaultParam
(
String
tableName
,
int
middleParamSize
,
int
valueListSize
)
{
TSDBPreparedParam
tsdbPreparedParam
=
new
TSDBPreparedParam
(
tableName
);
tsdbPreparedParam
.
setMiddleParamList
(
getDefaultParamList
(
middleParamSize
));
tsdbPreparedParam
.
setValueList
(
getDefaultParamList
(
valueListSize
));
return
tsdbPreparedParam
;
}
/**
* generate the default param value list
*
* @param paramSize
* @return
*/
private
List
<
Object
>
getDefaultParamList
(
int
paramSize
)
{
List
<
Object
>
paramList
=
new
ArrayList
<>(
paramSize
);
if
(
paramSize
>
0
)
{
for
(
int
i
=
0
;
i
<
paramSize
;
i
++)
{
paramList
.
add
(
i
,
DEFAULT_VALUE
);
}
}
return
paramList
;
}
/**
* calculate the placeholder num
*
* @param value
* @return
*/
private
int
parsePlaceholder
(
String
value
)
{
Pattern
pattern
=
Pattern
.
compile
(
"[?]"
);
Matcher
matcher
=
pattern
.
matcher
(
value
);
int
result
=
0
;
while
(
matcher
.
find
())
{
result
++;
}
return
result
;
}
/**
* set current row params
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the parameter value
*/
public
void
setParam
(
int
parameterIndex
,
Object
x
)
throws
SQLException
{
int
paramSize
=
this
.
middleParamSize
+
this
.
valueListSize
;
String
errorMsg
=
String
.
format
(
"the parameterIndex %s out of the range [1, %s]"
,
parameterIndex
,
this
.
middleParamSize
+
this
.
valueListSize
);
if
(
parameterIndex
<
1
||
parameterIndex
>
paramSize
)
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
errorMsg
));
}
this
.
isAddBatch
=
false
;
//set isAddBatch to false
if
(
x
==
null
)
{
x
=
DEFAULT_VALUE
;
// set default null string
}
parameterIndex
=
parameterIndex
-
1
;
// start from 0 in param list
if
(
this
.
middleParamSize
!=
0
&&
parameterIndex
>=
0
&&
parameterIndex
<
this
.
middleParamSize
)
{
this
.
initPreparedParam
.
setMiddleParam
(
parameterIndex
,
x
);
return
;
}
if
(
this
.
valueListSize
!=
0
&&
parameterIndex
>=
this
.
middleParamSize
&&
parameterIndex
<
paramSize
)
{
this
.
initPreparedParam
.
setValueParam
(
parameterIndex
-
this
.
middleParamSize
,
x
);
return
;
}
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
errorMsg
));
}
public
void
addBatch
()
{
addCurrentRowParamToList
();
this
.
initPreparedParam
=
initDefaultParam
(
tableName
,
middleParamSize
,
valueListSize
);
}
/**
* add current param to batch list
*/
private
void
addCurrentRowParamToList
()
{
if
(
initPreparedParam
!=
null
&&
(
this
.
middleParamSize
>
0
||
this
.
valueListSize
>
0
))
{
this
.
sqlParamList
.
add
(
initPreparedParam
);
// add current param to batch list
}
this
.
isAddBatch
=
true
;
}
/**
* execute the sql with batch sql
*
* @return
* @throws SQLException
*/
public
int
[]
executeBatch
()
throws
SQLException
{
int
result
=
executeBatchInternal
();
return
new
int
[]{
result
};
}
public
int
executeBatchInternal
()
throws
SQLException
{
if
(!
isAddBatch
)
{
addCurrentRowParamToList
();
// add current param to batch list
}
//1. generate batch sql
String
sql
=
generateExecuteSql
();
//2. execute batch sql
int
result
=
executeSql
(
sql
);
//3. clear batch param list
this
.
sqlParamList
.
clear
();
return
result
;
}
/**
* generate the batch sql
*
* @return
*/
private
String
generateExecuteSql
()
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
prefix
);
stringBuilder
.
append
(
" into "
);
if
(!
isTableNameDynamic
)
{
// tablename will not need to be replaced
stringBuilder
.
append
(
middle
);
stringBuilder
.
append
(
" values"
);
stringBuilder
.
append
(
replaceValueListParam
(
valueList
,
sqlParamList
));
}
else
{
// need to replace tablename
if
(
sqlParamList
.
size
()
>
0
)
{
TSDBPreparedParam
firstPreparedParam
=
sqlParamList
.
get
(
0
);
//replace middle part and value part of first row
String
firstRow
=
replaceMiddleAndValuePart
(
firstPreparedParam
);
stringBuilder
.
append
(
firstRow
);
//the first param in the middleParamList is the tableName
String
lastTableName
=
firstPreparedParam
.
getMiddleParamList
().
get
(
0
).
toString
();
if
(
sqlParamList
.
size
()
>
1
)
{
for
(
int
i
=
1
;
i
<
sqlParamList
.
size
();
i
++)
{
TSDBPreparedParam
currentParam
=
sqlParamList
.
get
(
i
);
String
currentTableName
=
currentParam
.
getMiddleParamList
().
get
(
0
).
toString
();
if
(
lastTableName
.
equalsIgnoreCase
(
currentTableName
))
{
// tablename is same with the last row ,so only need to append the part of value
String
values
=
replaceTemplateParam
(
valueList
,
currentParam
.
getValueList
());
stringBuilder
.
append
(
values
);
}
else
{
// tablename difference with the last row
//need to replace middle part and value part
String
row
=
replaceMiddleAndValuePart
(
currentParam
);
stringBuilder
.
append
(
row
);
lastTableName
=
currentTableName
;
}
}
}
}
else
{
stringBuilder
.
append
(
middle
);
stringBuilder
.
append
(
" values"
);
stringBuilder
.
append
(
valueList
);
}
}
return
stringBuilder
.
toString
();
}
/**
* replace the middle and value part
*
* @param tsdbPreparedParam
* @return
*/
private
String
replaceMiddleAndValuePart
(
TSDBPreparedParam
tsdbPreparedParam
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
(
" "
);
String
middlePart
=
replaceTemplateParam
(
middle
,
tsdbPreparedParam
.
getMiddleParamList
());
stringBuilder
.
append
(
middlePart
);
stringBuilder
.
append
(
" values "
);
String
valuePart
=
replaceTemplateParam
(
valueList
,
tsdbPreparedParam
.
getValueList
());
stringBuilder
.
append
(
valuePart
);
stringBuilder
.
append
(
" "
);
return
stringBuilder
.
toString
();
}
/**
* replace the placeholder of the template with TSDBPreparedParam list
*
* @param template
* @param sqlParamList
* @return
*/
private
String
replaceValueListParam
(
String
template
,
List
<
TSDBPreparedParam
>
sqlParamList
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
if
(
sqlParamList
.
size
()
>
0
)
{
for
(
TSDBPreparedParam
tsdbPreparedParam
:
sqlParamList
)
{
String
tmp
=
replaceTemplateParam
(
template
,
tsdbPreparedParam
.
getValueList
());
stringBuilder
.
append
(
tmp
);
}
}
else
{
stringBuilder
.
append
(
template
);
}
return
stringBuilder
.
toString
();
}
/**
* replace the placeholder of the template with paramList
*
* @param template
* @param paramList
* @return
*/
private
String
replaceTemplateParam
(
String
template
,
List
<
Object
>
paramList
)
{
if
(
paramList
.
size
()
>
0
)
{
String
tmp
=
template
;
for
(
int
i
=
0
;
i
<
paramList
.
size
();
++
i
)
{
String
paraStr
=
getParamString
(
paramList
.
get
(
i
));
tmp
=
tmp
.
replaceFirst
(
"["
+
PLACEHOLDER
+
"]"
,
paraStr
);
}
return
tmp
;
}
else
{
return
template
;
}
}
/**
* get the string of param object
*
* @param paramObj
* @return
*/
private
String
getParamString
(
Object
paramObj
)
{
String
paraStr
=
paramObj
.
toString
();
if
(
paramObj
instanceof
Timestamp
||
(
paramObj
instanceof
String
&&
!
DEFAULT_VALUE
.
equalsIgnoreCase
(
paraStr
)))
{
paraStr
=
"'"
+
paraStr
+
"'"
;
}
return
paraStr
;
}
private
int
executeSql
(
String
sql
)
throws
SQLException
{
return
tsdbPreparedStatement
.
executeUpdate
(
sql
);
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
浏览文件 @
4900dcdc
此差异已折叠。
点击以展开。
src/connector/jdbc/src/main/java/com/taosdata/jdbc/bean/TSDBPreparedParam.java
0 → 100644
浏览文件 @
4900dcdc
package
com.taosdata.jdbc.bean
;
import
java.util.List
;
/**
* tdengine batch insert or import param object
*/
public
class
TSDBPreparedParam
{
/**
* tableName, if sTable Name is not null, and this is sub table name.
*/
private
String
tableName
;
/**
* sub middle param list
*/
private
List
<
Object
>
middleParamList
;
/**
* value list
*/
private
List
<
Object
>
valueList
;
public
TSDBPreparedParam
(
String
tableName
)
{
this
.
tableName
=
tableName
;
}
public
String
getTableName
()
{
return
tableName
;
}
public
void
setTableName
(
String
tableName
)
{
this
.
tableName
=
tableName
;
}
public
List
<
Object
>
getMiddleParamList
()
{
return
middleParamList
;
}
public
void
setMiddleParamList
(
List
<
Object
>
middleParamList
)
{
this
.
middleParamList
=
middleParamList
;
}
public
void
setMiddleParam
(
int
parameterIndex
,
Object
x
)
{
this
.
middleParamList
.
set
(
parameterIndex
,
x
);
}
public
List
<
Object
>
getValueList
()
{
return
valueList
;
}
public
void
setValueList
(
List
<
Object
>
valueList
)
{
this
.
valueList
=
valueList
;
}
public
void
setValueParam
(
int
parameterIndex
,
Object
x
)
{
this
.
valueList
.
set
(
parameterIndex
,
x
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录