`
lanfei
  • 浏览: 153325 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC 批量插入数据

    博客分类:
  • java
阅读更多
package com.web.test;

import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;

public class TestMysql {

	
	public static int COMMIT_SIZE = 25000; // 插入数量
	public static void main(String args[]) {

	//	writeTestTxt(COMMIT_SIZE);
		//battchInsertByFile();//加载文件后插入
		  battchInsertByStream();//数据生成后插入
	}
	
	public static void  battchInsertByFile() {
		try {
			System.out.println("开始写入数据");
			Connection conn = getConnection();// 取得数据库的连接
			conn.setAutoCommit(false);
			long starTime = System.currentTimeMillis();
            //String sql = "load data infile 'c:/t0.txt' into table t0 fields terminated by ',' enclosed by '\\'' lines terminated by '\\r\\n'";
             String sql = "load data infile 'c:/t0.txt' replace into table t0 character set GBK fields terminated by ',' enclosed by '\\'' lines terminated by '\\r\\n' (`name`,`age`,`description`)";
            PreparedStatement  pstmt = conn.prepareStatement(sql);
			pstmt.execute();
			conn.commit();
			long endTime = System.currentTimeMillis();
			System.out.println("program runs " + (endTime - starTime) + "ms");
			
			// 关闭声明和连接
			pstmt.close();
			conn.close();
		} catch (SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage());
			// 显示数据库连接错误或者查询错误
		}
		
	}
	
	public static void  battchInsertByStream() {

		// 一共多少个
		int COUNT = 100000;

		long a = System.currentTimeMillis();
		Connection conn = null;

		try {

			conn = getConnection();
			long starTime = System.currentTimeMillis();

			conn.setAutoCommit(false);
			PreparedStatement pstmt = conn.prepareStatement("load data local infile '' "
			        + "into table t0 fields terminated by ',' (`name`,`age`,`description`)");
			StringBuilder sb = new StringBuilder();
			for (int i = 1; i <= COUNT; i++) {
				//sb.append(i + "," + i + "abc" + "\n");
				sb.append("name_a"+i+",age_a,english_a\n");
				if (i % COMMIT_SIZE == 0) {
					InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
					((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
					pstmt.execute();
					conn.commit();
					sb.setLength(0);
				}
			}
			InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
			((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
			pstmt.execute();
			conn.commit();

			long endTime = System.currentTimeMillis();
			System.out.println("program runs " + (endTime - starTime) + "ms");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		// 在最好的一行加上:
		System.out.println("\r插入数据条数:" + COUNT + ",提交的阀值:" + COMMIT_SIZE
						+ ",执行耗时 : " + (System.currentTimeMillis() - a) / 1000f
						+ " 秒 ");
	}

	public static Connection getConnection() {
		Connection con = null;
		// 取得连接的url
		String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true";
		// 加载MySQL的jdbc驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			// 使用能访问MySQL数据库的用户名root
			String userName = "root";// 使用口令
			String password = "root";// 打开数据库连接
			con = (Connection) DriverManager.getConnection(url, userName,
					password);
			return con;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	
	public static void  writeTestTxt(int count){
		try{
		     BufferedWriter writer = new BufferedWriter(new FileWriter(new File("c:\\t0.txt")));
		      for(int i=0 ;i<count;i++){
		     writer.write("name2"+i+",age2,english2\r\n");
		     //writer.write("\"101\",\"英语\",\"english\",\"100001\"\r\n");
		      }
		     writer.close();

		}catch(Exception e){

		 }
	}

}

 

 

CREATE TABLE `t0` (
  `id` bigint(20) NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  `age` varchar(50) NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `idx_name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8;

 

分享到:
评论

相关推荐

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    JDBC批量插入 更新 删除等操作

    #### 一、JDBC批量插入 JDBC(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...

    java实现jdbc批量插入数据

    本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量的方法** PreparedStatement是Statement的子接口,允许预编译SQL语句,这...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

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

    "JDBC连接MySQL数据库批量插入数据过程详解" 本文主要介绍了使用JDBC连接MySQL数据库批量插入数据的过程详解,通过示例代码详细介绍了批量插入数据的步骤,对大家的学习或者工作具有一定的参考学习价值。 一、JDBC...

    三种JDBC批量插入编程方法的比较

    总结来说,选择JDBC批量插入方法应基于数据插入的特性和需求。PreparedStatement适合动态参数,Statement适用于静态SQL,CallableStatement用于存储过程。理解它们的优缺点以及正确使用方式,能有效提升数据库操作的...

    jdbc批量操作数据分析与实例

    通过上述分析可知,JDBC批量插入相比于逐条插入具有显著的性能优势。特别是在处理大量数据时,批量插入能够显著提升数据处理的效率。同时,合理的批量大小设置对于充分发挥批量插入的优势至关重要。在实际项目开发中...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    Spring JdbcDaoSupport 批量插入数据

    本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`JdbcDaoSupport`是`AbstractJdbcDaoSupport`的子类,它提供了对JDBC访问的便捷封装,允许开发者无需直接管理...

    批量插入大量数据

    在实际操作中,你可能需要结合具体的技术栈,例如Python的pandas库配合SQLAlchemy,Java的JDBC,或者是Node.js的Sequelize等,使用它们提供的批量插入接口。同时,要关注数据库类型,如MySQL、PostgreSQL、Oracle或...

    Hive几种数据导入方式

    在创建表的同时,也可以通过查询的方式直接向表中插入数据。这种方式通常用于初始数据的填充。 **示例**: ```sql CREATE TABLE new_table AS SELECT * FROM existing_table WHERE condition; ``` 这种方式结合了...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库

    5. **批量插入数据到数据库** 在数据处理过程中,往往还需要将数据批量插入到数据库。EasyExcel提供了一个`executeBatchInsert`方法,可以配合JDBC或其他ORM框架如MyBatis,将数据批量插入到数据库。首先,我们需要...

    jdbc批量 (绝对经典)

    ### JDBC批量操作详解:效率与性能的提升策略 在数据库操作中,批量处理是一种常见的优化技术,用于提高数据处理的效率和性能。JDBC(Java Database Connectivity)作为Java应用程序与数据库交互的标准API,提供了...

    MSSQL批量插入数据优化详细

    在SQL Server中,批量插入数据是一项重要的性能优化技术,尤其当需要处理大量数据时。本文将探讨如何在MSSQL中高效地批量插入数据,并针对给出的代码示例进行分析和优化。 首先,我们来看一个常见的批量插入方法,...

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    SpringJDBC批量处理数据代码示例

    在Java开发中,Spring JDBC是Spring...总的来说,Spring JDBC提供了强大的批量处理能力,通过`NamedParameterJdbcTemplate`的`batchUpdate`方法,我们可以轻松地实现数据的批量插入和更新,有效提升数据库操作的效率。

    oracle数据库中批量插入问题

    在Oracle数据库中,批量插入数据是一项关键技能,尤其在处理大量数据时,它能显著提高数据操作效率。本文将深入探讨Oracle数据库中的批量插入技术,包括其原理、实现方法以及一个具体的C#代码示例。 ### Oracle批量...

    利用poi获取excel数据批量插入大量数据到mysql

    总结,本教程介绍了如何使用Apache POI读取Excel数据并借助JDBC批量插入到MySQL数据库的方法。这种方法适用于需要从Excel数据源导入大量数据到关系型数据库的场景,能够有效地提高数据处理的效率。在实际应用中,...

Global site tag (gtag.js) - Google Analytics