当前位置: 移动技术网 > IT编程>开发语言>Java > MYSQL批量插入数据的实现代码第1/3页

MYSQL批量插入数据的实现代码第1/3页

2019年07月22日  | 移动技术网IT编程  | 我要评论
@echo off cls set classpath=..\api\jogre.jar set classpath=%classpath%;. set classpath

因为micorsoft官方的jdbc不支持手动提交,因此用开源jdts的,反正官方测试报告说jdts性能在ms-sql的java驱动里性能最好。
把insert 语句注释掉, 看你的程序运行10次是否会正常
-->
error即是jvm的問題,大概是garbage collection太慢:roll:
試試每10000條作一次garbage collection 看看:roll:
-->
這句每一次作了3個物件,改一個看看
-->
但是配合3.0.16和3.0.10 都没问题。
我也曾设置过,每执行1000次就提交一次,照样是用3.1的驱动出问题。还是1w2时候。
事务太长了,每插入一条就commit一次;偶插入过3千万条,没有问题的
昨天,用3.1.12驱动,在同学的amd 64 + 512m ram 上测试了,2w记录,使用java -xmx64m -xmx128m 参数运行,可以顺利通过。
但10w记录,照样完蛋。机器消耗的总内存(物理+交换文件)达到1.4gb 后,因为空间不够,自动中止。
如果直接插入而不用事务机制呢?
-->
我每次测试,首先就是默认的自动提交(每语句),用3.1驱动还是出错。
当记录数目小到能正常完成时,自动提交耗时是一次事务的10倍时间(记录不太多时,大于1w,差距缩小到2~3倍)。
自动提交:
复制代码 代码如下:

## 默认
d:\program files\test\db_test>java inserttestmysql
<<---本页生成耗时[43693]毫秒(43.693秒)--->>
<<---共插入记录1000条-->>

一次事务:
复制代码 代码如下:

## 控制commit,一次性提交
d:\program files\test\db_test>java inserttestmysql
<<---本页生成耗时[3846]毫秒(3.846秒)--->>
<<---共插入记录1000条-->>

没问题啊,。我们每天都通过java程序插入几十万条数据做测试,都可以的
//用mysql自己的驱动程序,下面的测试程序插入100000条记录,结果是:
//<<---本页生成耗时[82781]毫秒(82.781秒)--->>
//<<---共插入记录100000条-->>
import java.sql.*;
public class inserttestmysql {
public static void main(string[] args) {
java.util.date now_start = new java.util.date();
long start_time = now_start.gettime();
int st = 100000;
string db = "com.mysql.jdbc.driver";
string host = "jdbc:mysql://192.168.2.108/develop";
string user = "whl";
string passwd = "mvu9h370ug";
connection con = null;
try {
class.forname(db).newinstance();
} catch (exception e) {
system.out.println("加载驱动失败:" + db);
}
try {
con = drivermanager.getconnection(host, user, passwd);
preparedstatement pstmt = con.preparestatement("insert into test (id,txt) values(?,?);");
for (int i = 1; i <= st; i++) {
pstmt.setint(1, i);
pstmt.setstring(2, "这条记录是第=" + i);
pstmt.executeupdate();
}
con.close();
} catch (exception e) {
system.out.println(e);
}
java.util.date now_end = new java.util.date();
long end_time = now_end.gettime();
long use_time = end_time - start_time;
system.out.println("<<---本页生成耗时[" + use_time + "]毫秒("
+ ((double) use_time) / 1000 + "秒)--->>");
system.out.println("\n<<---共插入记录" + st + "条-->>");
}
}
mysql存储过程资料收集
表a
声明
描述
create procedure
建立一个存放在mysql数据库的表格的存储过程。
create function
建立一个用户自定义的函数,尤其是返回数据的存储过程。
alter procedure
更改用create procedure 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。.
alter function
更改用create function 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。.
drop procedure
从mysql的表格中删除一个或多个存储过程。
drop function
从mysql的表格中删除一个或多个存储函数。
show create procedure
返回使用create procedure 建立的预先指定的存储过程的文本。这一声明是sql:2003规范的一个mysql扩展。
show create function
返回使用create function建立的预先指定的存储过程的文本。这一声明是sql:2003规范的一个mysql扩展。
show procedure status
返回一个预先指定的存储过程的特性,包括名称、类型、建立者、建立日期、以及更改日期。这一声明是sql:2003规范的一个mysql扩展。
show function status
返回一个预先指定的存储函数的特性,包括名称、类型、建立者、建立日期、以及更改日期。这一声明是sql:2003规范的一个mysql扩展。
call
调用一个使用create procedure建立的预先指定的存储过程。
begin ... end
包含一组执行的多声明。
declare
用于指定当地变量、环境、处理器,以及指针。
set
用于更改当地和全局服务器变量的值。
select ... into
用于存储显示变量的纵列。
open
用于打开一个指针。
fetch
使用特定指针来获得下一列。
close
用于关闭和打开指针。
if
一个an if-then-else-end if 声明。
case ... when
一个 case声明的结构
loop
一个简单的循环结构;可以使用leave 语句来退出。
leave
用于退出if,case,loop,repeat以及while 语句。
iterate
用于重新开始循环。
repeat
在结束时测试的循环。
while
在开始时测试的循环。
returns
返回一个存储过程的值。
mysql 5.0支持存储过程语句。
一.创建存储过程
1.基本语法:
create procedure sp_name()
begin
.........
end
2.参数传递
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
四.区块,条件,循环
1.区块定义,常用
begin
......
end;
2

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网