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

@echo off
cls
set CLASSPATH=..\api\jogre.jar
set CLASSPATH=%CLASSPATH%;.
set CLASSPATH=%CLASSPATH%;classes
set CLASSPATH=%CLASSPATH%;lib\dom4j.jar
java org.jogre.server.JogreServer
建表


代码如下:

create database con_test;
use con_test;
create table test(id int not null,txt varchar (70),primary key (id),index (id));

就两个字段,id加索引。
用java程序给表循环10万次插入纪录,id(循环次数) 和 内容(这条记录是第=xx)
InsertTestMysql.java


代码如下:

import java.lang.*;
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 str,info;
String db="org.gjt.mm.mysql.Driver";
String host="jdbc:mysql://192.168.1.35/test";
String user="root";
String passwd="root";
Connection con=null;
try{
Class.forName(db).newInstance();
}
catch(Exception e){
System.out.println("加载驱动失败:"+db);
}
try{
con=DriverManager.getConnection(host,user,passwd);
con.setAutoCommit(false);//关闭事务自动提交
for (int i=1;i<=st;i++){
info = "这条记录是第=";
info = info.concat(java.lang.Integer.toString(i));
str = "insert into test (id,txt) values(?,?);";
PreparedStatement pstmt = con.prepareStatement(str);
pstmt.setInt(1,i);
pstmt.setString(2,info);
pstmt.executeUpdate();
}
con.commit();//语句执行完毕,提交本事务
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+"条-->>");
}
}

在不同版本的jdbc下,表现不同。
jdbc 3.1.7, 12770,12778 插入这个数目时,程序退出,中文正常。
jdbc 3.1.12 12000 插入这个数目时,程序退出,中文正常。
均出现以下提示:
"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"
“Java 堆 空间 错误”,可能是我机器内存不够。但用3.10系列jdbc就正常。
jdbc 3.0.16-ga 10万记录正常,中文正常。
jdbc 3.0.10 10万记录成功,但中文错误。
使用3.1系列jdbc,程序运行后,机器剩余物理内存很快就成了40xxKB了。
这个,也可能是jdbc3.1系列需要内存大,我机器内存不足。
明天再去同学的AMD64 512M RAM 机器测试。
jdbc 3.0.16-ga 唯一这个正常的,测试结果为:


代码如下:

D:\Program Files\test\db_test>java InsertTestMysql
<<---本页生成耗时[98582]毫秒(98.582秒)--->>
<<---共插入记录100000条-->>

前几天又测试了下,用开源的jdts 的jdbc 连接ms-sql server 2000 sp3 其他同上,测试结果惨不忍睹:


代码如下:

D:\dev\java\src\ts\Ms-Sql>java InsertTestMssql
<<---本页生成耗时[1746681]毫秒(1746.681秒)--->>
<<---共插入记录100000条-->>

当前1/3页 123下一页阅读全文

(0)

相关推荐

  • Mysql中几种插入效率的实例对比

    前言 最近因为工作的需要,要在Mysql里插入大量的数据大约1000w,目测会比较耗时.所以现在就像测试一下到底用什么插入数据的方法比较快捷高效. 下面就针对每一种方法分别测试不同数据量下的插入效率. 测试数据库的基本与操作如下: mysql> create database test; Query OK, 1 row affected (0.02 sec) mysql> use test; Database changed mysql> create table mytable(id

  • mysql数据库插入速度和读取速度的调整记录

    (1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作.这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0:按过往经验设定为0,插入速度会有很大提高. 0: Write the log buffer to the log file and flush the log file every second, but do nothing at transaction commit.

  • MySql避免重复插入记录的几种方法

    方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 复制代码 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999'); 这样当有重复记录就会忽略,执行后返回数字0 还有个应用就是复制表,避免重复记录: 复制代码 代码如下: INSERT IGNORE INT

  • MySql批量插入优化Sql执行效率实例详解

    MySql批量插入优化Sql执行效率实例详解 itemcontractprice数量1万左右,每条itemcontractprice 插入5条日志. updateInsertSql.AppendFormat("UPDATE itemcontractprice AS p INNER JOIN foreigncurrency AS f ON p.ForeignCurrencyId = f.ContractPriceId SET p.RemainPrice = f.RemainPrice * {0},

  • C++操作MySQL大量数据插入效率低下的解决方法

    通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include <iostream> #include <winsock2.h> #include <string> #include "mysql.h" #pragma comment(lib, "libmysql.lib"); using namespace s

  • 用一条mysql语句插入多条数据

    假如有一个数据表A: id name title addtime 如果需要插入n条数据 : $time= time(); $data = array( array( 'name'=>'name1','title'=>'title1','addtime'=>$time; ), array( 'name'=>'name2','title'=>'title2','addtime'=>$time; ), array( 'name'=>'name3','title'=>

  • Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: 通过使用addBatch()和executeBatch()这一对方法可以实现批量处理数据. 不过值得注意的是,首先需要在数据库链接中设置手动提交,connection.setAutoCommit(false),然后在执行Statement之后执行connection.commit(). import java.io.Bu

  • mysql中迅速插入百万条测试数据的方法

    对比一下,首先是用 mysql 的存储过程弄的: 复制代码 代码如下: mysql>delimiter $ mysql>SET AUTOCOMMIT = 0$$ mysql> create procedure test() begin declare i decimal (10) default 0 ; dd:loop INSERT INTO `million` (`categ_id`, `categ_fid`, `SortPath`, `address`, `p_identifier`

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

    @echo off cls set CLASSPATH=..\api\jogre.jar set CLASSPATH=%CLASSPATH%;. set CLASSPATH=%CLASSPATH%;classes set CLASSPATH=%CLASSPATH%;lib\dom4j.jar java org.jogre.server.JogreServer 建表 复制代码 代码如下: create database con_test; use con_test; create table te

  • MySQL批量插入数据脚本

    MySQL批量插入数据脚本 #!/bin/bash i=1; MAX_INSERT_ROW_COUNT=$1; while [ $i -le $MAX_INSERT_ROW_COUNT ] do mysql -uroot -proot dbname -e "insert into tablename (name,age,createTime) values ('HELLO$i',$i % 99,NOW());" d=$(date +%M-%d\ %H\:%m\:%S) echo &qu

  • Python操控mysql批量插入数据的实现方法

    在Python中,通过pymysql模块,编写简短的脚本,即方便快捷地控制MySQL数据库 一.连接数据库 使用的函数:pymysql.connect 语法:db=pymysql.connect(host='localhost',user='root',port=3306,password='Your password',db='database_name') 参数说明:host:MySQL服务器地址                           user:用户名             

  • MYSQL开发性能研究之批量插入数据的优化方法

    一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方式也是可行的.但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题.例如说,如果有需要插入100000条数据,那么就需要有100000条insert语句,每一句都需要提交到关系引擎那里去解析,优化,然后才能够到达存储引擎做真的插入工作. 正是由于性能的瓶颈问题,MYSQL官方文档也就提到了使用批

  • MySQL通过函数存储过程批量插入数据

    目录 数据库 mysql批量插入数据函数存储过程 附:MySQL通过函数批量插入数据 总结 数据库 mysql批量插入数据函数存储过程 -- 1 批量插入数据 -- 1.1 创建表 CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, ceo INT NULL , PRIMARY KEY

  • mysql中批量插入数据(1万、10万、100万、1000万、1亿级别)

    目录 方法一: 方法二: 总结: 硬件:windows7+8G内存+i3-4170处理器+4核CPU 首先贴上数据库的操作类BaseDao: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; impor

  • Python向MySQL批量插数据的实例讲解

    背景:最近测试web项目需要多条测试数据,sql中嫌要写多条,就看了看python如何向MySQL批量插数据(pymysql库) 1.向MySQL批量插数据 import pymysql #import datetime #day = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#参数值插入时间 db = pymysql.connect(host='服务器IP', user='账号', passwd='密码', port=端口号) c

  • mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    下面给大家介绍mybatis foreach批量插入数据:Oracle与MySQL不同点: •主要不同点在于foreach标签内separator属性的设置问题: •separator设置为","分割时,最终拼接的代码形式为:insert into table_name (a,b,c) values (v1,v2,v3) ,(v4,v5,v6) ,... •separator设置为"union all"分割时,最终拼接的代码形式为:insert into table

  • JDBC连接MySQL数据库批量插入数据过程详解

    这篇文章主要介绍了JDBC连接MySQL数据库批量插入数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.读取本地json数据 2.jdbc理解数据库 3.批量插入 maven 引入jar包: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2

  • C# Oracle批量插入数据进度条的实现代码

    前言 由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中.考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法.在插入操作运行时,会造成系统短暂的"卡死"现象.为了让用户知道插入的状态,需要制作一个进度条来显示插入的进度. 批量插入 项目中运用的是System.Data.OracleClient.首先将Excel数据通过转换函数转换为DataTable,其中的字段和数据库中相应表格的字段完全对应. public int Impor

随机推荐