Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
47590599
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看板
未验证
提交
47590599
编写于
11月 11, 2021
作者:
wmmhello
提交者:
GitHub
11月 11, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into develop
上级
aec022c4
a3c73a82
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
144 addition
and
45 deletion
+144
-45
documentation20/cn/05.insert/docs.md
documentation20/cn/05.insert/docs.md
+28
-28
documentation20/cn/14.devops/02.collectd/docs.md
documentation20/cn/14.devops/02.collectd/docs.md
+2
-2
packaging/deb/makedeb.sh
packaging/deb/makedeb.sh
+2
-2
packaging/tools/install.sh
packaging/tools/install.sh
+6
-2
packaging/tools/make_install.sh
packaging/tools/make_install.sh
+2
-3
packaging/tools/makepkg.sh
packaging/tools/makepkg.sh
+7
-1
packaging/tools/post.sh
packaging/tools/post.sh
+6
-1
src/tsdb/src/tsdbFile.c
src/tsdb/src/tsdbFile.c
+3
-5
tests/examples/JDBC/JDBCDemo/pom.xml
tests/examples/JDBC/JDBCDemo/pom.xml
+1
-1
tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/BatchInsert.java
...CDemo/src/main/java/com/taosdata/example/BatchInsert.java
+87
-0
未找到文件。
documentation20/cn/05.insert/docs.md
浏览文件 @
47590599
...
...
@@ -145,27 +145,27 @@ st,t1=3,t2=4,t3=t3 c1=3i64,c6="passit" 1626006833640000000
<br/>
如果是无模式写入过程中的数据本身错误,应用会得到 TSDB_CODE_TSC_LINE_SYNTAX_ERROR 错误信息,该错误信息表明错误发生在写入文本中。其他的错误码与原系统一致,可以通过 taos_errstr 获取具体的错误原因。
**后续升级计划**
<br/>
当前版本只提供了 C 版本的 API,后续将提供 其他高级语言的 API,例如 Java/Go/Python/C# 等。此外,在TDengine v2.3及后续版本中,您还可以通过
BLM v3
采用 REST 的方式直接写入无模式数据。
<br/>
当前版本只提供了 C 版本的 API,后续将提供 其他高级语言的 API,例如 Java/Go/Python/C# 等。此外,在TDengine v2.3及后续版本中,您还可以通过
Taos Adapter
采用 REST 的方式直接写入无模式数据。
## <a class="anchor" id="prometheus"></a>Prometheus 直接写入
[
Prometheus
](
https://www.prometheus.io/
)
作为Cloud Native Computing Fundation毕业的项目,在性能监控以及K8S性能监控领域有着非常广泛的应用。TDengine提供一个小工具
[
Bailongma
](
https://github.com/taosdata/Bailongma
)
,只需对Prometheus做简单配置,无需任何代码,就可将Prometheus采集的数据直接写入TDengine,并按规则在TDengine自动创建库和相关表项。博文
[
用Docker容器快速搭建一个Devops监控Demo
](
https://www.taosdata.com/blog/2020/02/03/1189.html
)
即是采用Bailongma将Prometheus和Telegraf的数据写入TDengine中的示例,可以参考。
### 从源代码编译
taosadapter
_prometheus
### 从源代码编译
blm
_prometheus
用户需要从github下载
[
Bailongma
](
https://github.com/taosdata/Bailongma
)
的源码,使用Golang语言编译器编译生成可执行文件。在开始编译前,需要准备好以下条件:
-
Linux操作系统的服务器
-
安装好Golang,1.14版本以上
-
对应的TDengine版本。因为用到了TDengine的客户端动态链接库,因此需要安装好和服务端相同版本的TDengine程序;比如服务端版本是TDengine 2.0.0, 则在Bailongma所在的Linux服务器(可以与TDengine在同一台服务器,或者不同服务器)
Bailongma项目中有一个文件夹
taosadapter
_prometheus,存放了prometheus的写入API程序。编译过程如下:
Bailongma项目中有一个文件夹
blm
_prometheus,存放了prometheus的写入API程序。编译过程如下:
```
bash
cd
taosadapter
_prometheus
cd
blm
_prometheus
go build
```
一切正常的情况下,就会在对应的目录下生成一个
taosadapter
_prometheus的可执行程序。
一切正常的情况下,就会在对应的目录下生成一个
blm
_prometheus的可执行程序。
### 安装 Prometheus
...
...
@@ -176,23 +176,23 @@ go build
参考Prometheus的
[
配置文档
](
https://prometheus.io/docs/prometheus/latest/configuration/configuration/
)
,在Prometheus的配置文件中的
<remote_write>
部分,增加以下配置:
```
- url: "bailongma API服务提供的URL"(参考下面的
taosadapter
_prometheus启动示例章节)
- url: "bailongma API服务提供的URL"(参考下面的
blm
_prometheus启动示例章节)
```
启动Prometheus后,可以通过taos客户端查询确认数据是否成功写入。
### 启动
taosadapter
_prometheus 程序
### 启动
blm
_prometheus 程序
taosadapter_prometheus程序有以下选项,在启动taosadapter_prometheus程序时可以通过设定这些选项来设定taosadapter
_prometheus的配置。
blm_prometheus程序有以下选项,在启动blm_prometheus程序时可以通过设定这些选项来设定blm
_prometheus的配置。
```
bash
--tdengine-name
如果TDengine安装在一台具备域名的服务器上,也可以通过配置TDengine的域名来访问TDengine。在K8S环境下,可以配置成TDengine所运行的service name。
--batch-size
taosadapter
_prometheus会将收到的prometheus的数据拼装成TDengine的写入请求,这个参数控制一次发给TDengine的写入请求中携带的数据条数。
blm
_prometheus会将收到的prometheus的数据拼装成TDengine的写入请求,这个参数控制一次发给TDengine的写入请求中携带的数据条数。
--dbname
设置在TDengine中创建的数据库名称,
taosadapter
_prometheus会自动在TDengine中创建一个以dbname为名称的数据库,缺省值是prometheus。
设置在TDengine中创建的数据库名称,
blm
_prometheus会自动在TDengine中创建一个以dbname为名称的数据库,缺省值是prometheus。
--dbuser
设置访问TDengine的用户名,缺省值是
'root'
。
...
...
@@ -201,16 +201,16 @@ taosadapter_prometheus会将收到的prometheus的数据拼装成TDengine的写
设置访问TDengine的密码,缺省值是
'taosdata'
。
--port
taosadapter
_prometheus对prometheus提供服务的端口号。
blm
_prometheus对prometheus提供服务的端口号。
```
### 启动示例
通过以下命令启动一个
taosadapter
_prometheus的API服务
通过以下命令启动一个
blm
_prometheus的API服务
```
bash
./
taosadapter
_prometheus
-port
8088
./
blm
_prometheus
-port
8088
```
假设
taosadapter
_prometheus所在服务器的IP地址为"10.1.2.3",则在prometheus的配置文件中
<remote_write>
部分增加url为
假设
blm
_prometheus所在服务器的IP地址为"10.1.2.3",则在prometheus的配置文件中
<remote_write>
部分增加url为
```
yaml
remote_write
:
-
url
:
"
http://10.1.2.3:8088/receive"
...
...
@@ -235,7 +235,7 @@ prometheus产生的数据格式如下:
}
}
```
其中,apiserver_request_latencies_bucket为prometheus采集的时序数据的名称,后面{}中的为该时序数据的标签。
taosadapter
_prometheus会以时序数据的名称在TDengine中自动创建一个超级表,并将{}中的标签转换成TDengine的tag值,Timestamp作为时间戳,value作为该时序数据的值。因此在TDengine的客户端中,可以通过以下指令查到这个数据是否成功写入。
其中,apiserver_request_latencies_bucket为prometheus采集的时序数据的名称,后面{}中的为该时序数据的标签。
blm
_prometheus会以时序数据的名称在TDengine中自动创建一个超级表,并将{}中的标签转换成TDengine的tag值,Timestamp作为时间戳,value作为该时序数据的值。因此在TDengine的客户端中,可以通过以下指令查到这个数据是否成功写入。
```
mysql
use prometheus;
select * from apiserver_request_latencies_bucket;
...
...
@@ -314,7 +314,7 @@ taosadapter 相关配置参数请参考 taosadapter --help 命令输出以及相
[
Telegraf
](
https://www.influxdata.com/time-series-platform/telegraf/
)
是一流行的IT运维数据采集开源工具,TDengine提供一个小工具
[
Bailongma
](
https://github.com/taosdata/Bailongma
)
,只需在Telegraf做简单配置,无需任何代码,就可将Telegraf采集的数据直接写入TDengine,并按规则在TDengine自动创建库和相关表项。博文
[
用Docker容器快速搭建一个Devops监控Demo
](
https://www.taosdata.com/blog/2020/02/03/1189.html
)
即是采用bailongma将Prometheus和Telegraf的数据写入TDengine中的示例,可以参考。
### 从源代码编译
taosadapter
_telegraf
### 从源代码编译
blm
_telegraf
用户需要从github下载
[
Bailongma
](
https://github.com/taosdata/Bailongma
)
的源码,使用Golang语言编译器编译生成可执行文件。在开始编译前,需要准备好以下条件:
...
...
@@ -322,14 +322,14 @@ taosadapter 相关配置参数请参考 taosadapter --help 命令输出以及相
-
安装好Golang,1.10版本以上
-
对应的TDengine版本。因为用到了TDengine的客户端动态链接库,因此需要安装好和服务端相同版本的TDengine程序;比如服务端版本是TDengine 2.0.0, 则在Bailongma所在的Linux服务器(可以与TDengine在同一台服务器,或者不同服务器)
Bailongma项目中有一个文件夹
taosadapter
_telegraf,存放了Telegraf的写入API程序。编译过程如下:
Bailongma项目中有一个文件夹
blm
_telegraf,存放了Telegraf的写入API程序。编译过程如下:
```
bash
cd
taosadapter
_telegraf
cd
blm
_telegraf
go build
```
一切正常的情况下,就会在对应的目录下生成一个
taosadapter
_telegraf的可执行程序。
一切正常的情况下,就会在对应的目录下生成一个
blm
_telegraf的可执行程序。
### 安装 Telegraf
...
...
@@ -352,19 +352,19 @@ go build
关于如何使用Telegraf采集数据以及更多有关使用Telegraf的信息,请参考Telegraf官方的
[
文档
](
https://docs.influxdata.com/telegraf/v1.11/
)
。
### 启动
taosadapter
_telegraf 程序
### 启动
blm
_telegraf 程序
taosadapter_telegraf程序有以下选项,在启动taosadapter_telegraf程序时可以通过设定这些选项来设定taosadapter
_telegraf的配置。
blm_telegraf程序有以下选项,在启动blm_telegraf程序时可以通过设定这些选项来设定blm
_telegraf的配置。
```
bash
--host
TDengine服务端的IP地址,缺省值为空。
--batch-size
taosadapter
_telegraf会将收到的telegraf的数据拼装成TDengine的写入请求,这个参数控制一次发给TDengine的写入请求中携带的数据条数。
blm
_telegraf会将收到的telegraf的数据拼装成TDengine的写入请求,这个参数控制一次发给TDengine的写入请求中携带的数据条数。
--dbname
设置在TDengine中创建的数据库名称,
taosadapter
_telegraf会自动在TDengine中创建一个以dbname为名称的数据库,缺省值是prometheus。
设置在TDengine中创建的数据库名称,
blm
_telegraf会自动在TDengine中创建一个以dbname为名称的数据库,缺省值是prometheus。
--dbuser
设置访问TDengine的用户名,缺省值是
'root'
。
...
...
@@ -373,17 +373,17 @@ taosadapter_telegraf会将收到的telegraf的数据拼装成TDengine的写入
设置访问TDengine的密码,缺省值是
'taosdata'
。
--port
taosadapter
_telegraf对telegraf提供服务的端口号。
blm
_telegraf对telegraf提供服务的端口号。
```
### 启动示例
通过以下命令启动一个
taosadapter
_telegraf的API服务:
通过以下命令启动一个
blm
_telegraf的API服务:
```
bash
./
taosadapter
_telegraf
-host
127.0.0.1
-port
8089
./
blm
_telegraf
-host
127.0.0.1
-port
8089
```
假设
taosadapter
_telegraf所在服务器的IP地址为"10.1.2.3",则在telegraf的配置文件中, 在output plugins部分,增加[[outputs.http]]配置项:
假设
blm
_telegraf所在服务器的IP地址为"10.1.2.3",则在telegraf的配置文件中, 在output plugins部分,增加[[outputs.http]]配置项:
```
yaml
url = "http://10.1.2.3:8089/telegraf"
...
...
@@ -416,7 +416,7 @@ telegraf产生的数据格式如下:
}
```
其中,name字段为telegraf采集的时序数据的名称,tags字段为该时序数据的标签。
taosadapter
_telegraf会以时序数据的名称在TDengine中自动创建一个超级表,并将tags字段中的标签转换成TDengine的tag值,timestamp作为时间戳,fields字段中的值作为该时序数据的值。因此在TDengine的客户端中,可以通过以下指令查到这个数据是否成功写入。
其中,name字段为telegraf采集的时序数据的名称,tags字段为该时序数据的标签。
blm
_telegraf会以时序数据的名称在TDengine中自动创建一个超级表,并将tags字段中的标签转换成TDengine的tag值,timestamp作为时间戳,fields字段中的值作为该时序数据的值。因此在TDengine的客户端中,可以通过以下指令查到这个数据是否成功写入。
```
mysql
use telegraf;
...
...
documentation20/cn/14.devops/02.collectd/docs.md
浏览文件 @
47590599
...
...
@@ -40,7 +40,7 @@ IT 运维监测数据通常都是对时间特性比较敏感的数据,例如
```
### 配置 collectd
在 /etc/collectd/collectd.conf 文件中增加如下内容,其中 host 和 port 请填写 TDengine 和
BLM3
配置的实际值:
在 /etc/collectd/collectd.conf 文件中增加如下内容,其中 host 和 port 请填写 TDengine 和
Taos Adapter
配置的实际值:
```
LoadPlugin network
<Plugin network>
...
...
@@ -51,7 +51,7 @@ sudo systemctl start collectd
```
### 配置 StatsD
在 config.js 文件中增加如下内容后启动 StatsD,其中 host 和 port 请填写 TDengine 和
BLM3
配置的实际值:
在 config.js 文件中增加如下内容后启动 StatsD,其中 host 和 port 请填写 TDengine 和
Taos Adapter
配置的实际值:
```
backends 部分添加 "./backends/repeater"
repeater 部分添加 { host:'<TDengine server/cluster host>', port: <port for StatsD>}
...
...
packaging/deb/makedeb.sh
浏览文件 @
47590599
...
...
@@ -45,10 +45,10 @@ mkdir -p ${pkg_dir}${install_home_path}/script
cp
${
compile_dir
}
/../packaging/cfg/taos.cfg
${
pkg_dir
}${
install_home_path
}
/cfg
if
[
-f
"
${
compile_dir
}
/test/cfg/taosadapter.toml"
]
;
then
cp
${
compile_dir
}
/test/cfg/taosadapter.toml
${
pkg_dir
}${
install_home_path
}
/cfg
cp
${
compile_dir
}
/test/cfg/taosadapter.toml
${
pkg_dir
}${
install_home_path
}
/cfg
||
:
fi
if
[
-f
"
${
compile_dir
}
/test/cfg/taosadapter.service"
]
;
then
cp
${
compile_dir
}
/test/cfg/taosadapter.service
${
pkg_dir
}${
install_home_path
}
/cfg
||
:
cp
${
compile_dir
}
/test/cfg/taosadapter.service
${
pkg_dir
}${
install_home_path
}
/cfg
||
:
fi
cp
${
compile_dir
}
/../packaging/deb/taosd
${
pkg_dir
}${
install_home_path
}
/init.d
...
...
packaging/tools/install.sh
浏览文件 @
47590599
...
...
@@ -757,8 +757,12 @@ function install_service_on_systemd() {
}
function
install_taosadapter_service
()
{
if
((
${
service_mod
}
==
0
))
;
then
[
-f
${
script_dir
}
/cfg/taosadapter.service
]
&&
\
${
csudo
}
cp
${
script_dir
}
/cfg/taosadapter.service
${
service_config_dir
}
/
${
csudo
}
cp
${
script_dir
}
/cfg/taosadapter.service
\
${
service_config_dir
}
/
||
:
${
csudo
}
systemctl daemon-reload
fi
}
function
install_service
()
{
...
...
packaging/tools/make_install.sh
浏览文件 @
47590599
...
...
@@ -524,8 +524,7 @@ function install_taosadapter_service() {
[
-f
${
binary_dir
}
/test/cfg/taosadapter.service
]
&&
\
${
csudo
}
cp
${
binary_dir
}
/test/cfg/taosadapter.service
\
${
service_config_dir
}
/
||
:
else
kill_taosadapter
${
csudo
}
systemctl daemon-reload
fi
}
...
...
packaging/tools/makepkg.sh
浏览文件 @
47590599
...
...
@@ -78,7 +78,13 @@ mkdir -p ${install_dir}
mkdir
-p
${
install_dir
}
/inc
&&
cp
${
header_files
}
${
install_dir
}
/inc
mkdir
-p
${
install_dir
}
/cfg
&&
cp
${
cfg_dir
}
/taos.cfg
${
install_dir
}
/cfg/taos.cfg
[
-f
${
cfg_dir
}
/taosadapter.toml
]
&&
cp
${
cfg_dir
}
/taosadapter.toml
${
install_dir
}
/cfg/taosadapter.toml
if
[
-f
"
${
compile_dir
}
/test/cfg/taosadapter.toml"
]
;
then
cp
${
compile_dir
}
/test/cfg/taosadapter.toml
${
install_dir
}
/cfg
||
:
fi
if
[
-f
"
${
compile_dir
}
/test/cfg/taosadapter.service"
]
;
then
cp
${
compile_dir
}
/test/cfg/taosadapter.service
${
install_dir
}
/cfg
||
:
fi
mkdir
-p
${
install_dir
}
/bin
&&
cp
${
bin_files
}
${
install_dir
}
/bin
&&
chmod
a+x
${
install_dir
}
/bin/
*
||
:
mkdir
-p
${
install_dir
}
/init.d
&&
cp
${
init_file_deb
}
${
install_dir
}
/init.d/taosd.deb
...
...
packaging/tools/post.sh
浏览文件 @
47590599
...
...
@@ -467,7 +467,12 @@ function install_service_on_systemd() {
}
function
install_taosadapter_service
()
{
[
-f
${
cfg_dir
}
/taosadapter.service
]
&&
${
csudo
}
cp
${
cfg_dir
}
/taosadapter.service
${
service_config_dir
}
if
((
${
service_mod
}
==
0
))
;
then
[
-f
${
script_dir
}
/cfg/taosadapter.service
]
&&
\
${
csudo
}
cp
${
script_dir
}
/cfg/taosadapter.service
\
${
service_config_dir
}
/
||
:
${
csudo
}
systemctl daemon-reload
fi
}
function
install_service
()
{
...
...
src/tsdb/src/tsdbFile.c
浏览文件 @
47590599
...
...
@@ -79,8 +79,7 @@ void *tsdbDecodeSMFileEx(void *buf, SMFile *pMFile) {
char
*
aname
;
buf
=
tsdbDecodeMFInfo
(
buf
,
&
(
pMFile
->
info
));
buf
=
taosDecodeString
(
buf
,
&
aname
);
strncpy
(
TSDB_FILE_FULL_NAME
(
pMFile
),
aname
,
TSDB_FILENAME_LEN
);
*
(
TSDB_FILE_FULL_NAME
(
pMFile
)
+
TSDB_FILENAME_LEN
-
1
)
=
'\0'
;
tstrncpy
(
TSDB_FILE_FULL_NAME
(
pMFile
),
aname
,
TSDB_FILENAME_LEN
);
TSDB_FILE_SET_CLOSED
(
pMFile
);
tfree
(
aname
);
...
...
@@ -346,8 +345,7 @@ static void *tsdbDecodeSDFileEx(void *buf, SDFile *pDFile) {
// The sync module would send DFileSet with latest verion.
buf
=
tsdbDecodeDFInfo
(
buf
,
&
(
pDFile
->
info
),
TSDB_LATEST_SFS_VER
);
buf
=
taosDecodeString
(
buf
,
&
aname
);
strncpy
(
TSDB_FILE_FULL_NAME
(
pDFile
),
aname
,
TSDB_FILENAME_LEN
);
*
(
TSDB_FILE_FULL_NAME
(
pDFile
)
+
TSDB_FILENAME_LEN
-
1
)
=
'\0'
;
tstrncpy
(
TSDB_FILE_FULL_NAME
(
pDFile
),
aname
,
TSDB_FILENAME_LEN
);
TSDB_FILE_SET_CLOSED
(
pDFile
);
tfree
(
aname
);
...
...
tests/examples/JDBC/JDBCDemo/pom.xml
浏览文件 @
47590599
...
...
@@ -17,7 +17,7 @@
<dependency>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.3
4
</version>
<version>
2.0.3
5
</version>
</dependency>
</dependencies>
...
...
tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/BatchInsert.java
0 → 100644
浏览文件 @
47590599
package
com.taosdata.example
;
import
java.sql.*
;
import
java.util.*
;
public
class
BatchInsert
{
private
static
final
String
host
=
"127.0.0.1"
;
private
static
final
String
user
=
"root"
;
private
static
final
String
password
=
"taosdata"
;
private
static
final
String
dbname
=
"test"
;
private
static
final
String
stbname
=
"stb"
;
private
static
final
int
tables
=
100
;
private
static
final
int
rows
=
500
;
private
static
final
long
ts
=
1604877767000
l
;
private
Connection
conn
;
private
void
init
()
{
// final String url = "jdbc:TAOS://" + host + ":6030/?user=" + user + "&password=" + password;
final
String
url
=
"jdbc:TAOS-RS://"
+
host
+
":6041/?user="
+
user
+
"&password="
+
password
;
// get connection
try
{
Properties
properties
=
new
Properties
();
properties
.
setProperty
(
"charset"
,
"UTF-8"
);
properties
.
setProperty
(
"locale"
,
"en_US.UTF-8"
);
properties
.
setProperty
(
"timezone"
,
"UTC-8"
);
System
.
out
.
println
(
"get connection starting..."
);
conn
=
DriverManager
.
getConnection
(
url
,
properties
);
if
(
conn
!=
null
){
System
.
out
.
println
(
"[ OK ] Connection established."
);
}
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop database if exists "
+
dbname
);
stmt
.
execute
(
"create database if not exists "
+
dbname
);
stmt
.
execute
(
"use "
+
dbname
);
stmt
.
execute
(
"create table "
+
dbname
+
"."
+
stbname
+
"(ts timestamp, col int) tags(id int)"
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
private
String
generateSql
()
{
StringBuilder
sb
=
new
StringBuilder
();
Random
rand
=
new
Random
();
sb
.
append
(
"insert into "
);
for
(
int
i
=
0
;
i
<
tables
;
i
++)
{
sb
.
append
(
dbname
+
".tb"
+
i
+
" using "
+
dbname
+
"."
+
stbname
+
" tags("
+
i
+
") values"
);
for
(
int
j
=
0
;
j
<
rows
;
j
++)
{
sb
.
append
(
"("
);
sb
.
append
(
ts
+
j
);
sb
.
append
(
","
);
sb
.
append
(
rand
.
nextInt
(
1000
));
sb
.
append
(
") "
);
}
}
return
sb
.
toString
();
}
private
void
executeQuery
(
String
sql
)
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
long
start
=
System
.
currentTimeMillis
();
stmt
.
execute
(
sql
);
long
end
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
"insert "
+
tables
*
rows
+
" records, cost "
+
(
end
-
start
)+
"ms"
);
}
catch
(
SQLException
ex
)
{
ex
.
printStackTrace
();
}
}
public
static
void
main
(
String
[]
args
)
{
BatchInsert
bi
=
new
BatchInsert
();
String
sql
=
bi
.
generateSql
();
bi
.
init
();
bi
.
executeQuery
(
sql
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录