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

利用JDBC对数据库进行批量插入数据操作,执行次数100万

 
阅读更多
http://www.javait.org/?p=877
package com.gxa.edu;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JComboBox;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
 
import java.awt.FlowLayout;
import java.awt.Color;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
/**
 * @author Administrator
 * 国信安百杰高端Java培训
 */
public class Test extends JFrame {
	public final String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=stu";
	public final String username = "sa";
	public final String password = "123456";
	public final String classdriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
 
	public Connection conn;
	public Statement stmt;
	public ResultSet rs;
 
	public Test() {
		try {
			Class.forName(classdriver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
	/**
	 * 利用JDBC来创建表
	 */
	public void createTable() {
		String sql = "create table batch (a1 varchar(10),a2 varchar(500))";
		try {
			conn = DriverManager.getConnection(url, username, password);
			stmt = conn.createStatement();
			boolean f = stmt.execute(sql);
			System.out.println(f);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
 
	/**
	 * 对数据库进行批量插入数据操作
	 * 执行次数100万
	 */
	public void insertBatch() {
		//思路:将100万条数据分成n等份,1等份为1000条数据
		//如何实现?
		//1、必须将Connection接口的自动提交方式改为手动
		//2、利用Statement接口中的如下三个方法:addBatch、clearBath、executeBatch
		try {
			conn = DriverManager.getConnection(url, username, password);
			conn.setAutoCommit(false);
			stmt = conn.createStatement();
			for (int i = 0; i < 1000000; i++) {
				String sql = "insert into batch values ('"+i+"', '第"+i+"条数据')";
				//利用addBatch方法将SQL语句加入到stmt对象中
				stmt.addBatch(sql);
				if (i % 1000 == 0 && i != 0) {
					//利用executeBatch方法执行1000条SQL语句
					stmt.executeBatch();
					stmt.clearBatch();
					conn.commit();
				}
			}
			stmt.executeBatch();
			stmt.clearBatch();
			conn.commit();
			close(); //关闭资源
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
 
	public void close() {
		try {
			if (rs != null) rs.close();
			if (stmt != null) stmt.close();
			if (conn != null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test t = new Test();
		//t.createTable();
		t.insertBatch();
	}
 
}



下面是另外一篇:
http://hi.baidu.com/a393060727/blog/item/152068f4e6d17adef2d38554.html

不过下面少了stmt.clearBatch();这样的操作,而且如果bath 与 PrepareStatement一起使用的话交果会更好。

jdbc连接数据库:首先要找到相应的数据库驱动,指定连接的数据库
加载驱动:Class.forName(驱动名);
获得连接:Connection con = DriverManager.getConnection("数据库连接","用户名","密码");
执行SQL语句:Statement && PreparedStatement
写法:Statement stmt = con.createStatement(); 或PreparedStatement pstm = con.preparedStatement(sql);
执行查询:返回结果ResultSet集 stmt.executeQuery(sql语句);
执行增删改:返回影响行数 int count = stmt.executeUpdate(sql语句);
获得游标:rs.next();判断是否有下一个游标 返回一个boolean
获得结果类型:rs.get类型名(字段名)
操作完成,关闭顺序,后打开的先关闭。

调用存储过程:CallableStatement csmt =con.prepareCall("{call p(?,?,?,?)}");
创建一个调用存储过程的对象,调用存储过程,存储过程名字叫p,他有4个参数
csmt.registerOutParament(3,Types.INTEGER);
csmt.registerOutParament(4,Types.INTEGER);//设置输出数,并设置类型
csmt.setInt(1,3);
csmt.setInt(2,5);
csmt.setInt(4,7);//设置参数的值
csmt.execute();//执行操作
csmt.getInt(3);
csmt.getInt(4);//获取存储过程的输出值
csmt.close();//关闭执行结果


批处理Batch
用:
Statement stmt = con.createStatement();
stmt.addButch(SQL语句);
stmt.addButch(SQL语句);
stmt.addButch(SQL语句);
stmt.addButch(SQL语句);
stmt.executeButh();
或:
PreparedStatement pstm = null;
pstm = con.prepareStatement("insert into aa values(?,?,?)");
     pstm.setInt(1, 12);
     pstm.setString(2,"李五A");
     pstm.setString(3, "中文A");
     pstm.addBatch();
     pstm.setInt(1, 22);
     pstm.setString(2,"李五B");
     pstm.setString(3, "中文B");
     pstm.addBatch();
     pstm.setInt(1, 32);
     pstm.setString(2,"李五C");
     pstm.setString(3, "中文C");
     pstm.addBatch();



//批量执行上面3条语句. 一口吞了,很爽
int [] counts = statement.executeBatch();  

//Commit it 咽下去,到肚子(DB)里面
connection.commit();


分享到:
评论

相关推荐

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

    通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...

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

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

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

    批量更新的原理与批量插入类似,都是通过`PreparedStatement`的`addBatch()`方法将多个更新操作加入到一个批处理队列中,然后调用`executeBatch()`方法执行这些更新操作。这种方式可以显著减少网络往返次数,提高...

    jdbc-批量插入数据

    // 执行批量插入 int[] updateCounts = pstmt.executeBatch(); // 关闭资源 pstmt.close(); conn.close(); ``` 在上面的代码中,我们创建了一个`PreparedStatement`实例,然后为每条数据调用`addBatch()`方法。...

    java利用jdbc连接数据库之插入数据.docx

    本文档详细介绍了如何使用Java编程语言结合JDBC(Java Database Connectivity)技术来实现与数据库的连接,并完成数据的插入操作。JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一...

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

    现在,我们可以创建一个Java类,使用Spring JDBC Template进行批量插入操作。首先,定义一个User对象,包含`name`和`email`属性,然后创建一个`UserDao`类,如下所示: ```java public class User { private ...

    java使用jdbc将数据库数据导出到csv文件.pdf

    Java 使用 JDBC 将数据库数据导出到 CSV 文件 Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出...

    jdbc批量插入大字段

    - **事务管理**:将批量插入操作包裹在事务中,可以确保数据的一致性。如果在批量操作中发生错误,整个事务可以回滚,避免了部分插入的数据不一致问题。 - **使用Oracle特定的Blob处理**:Oracle提供了`oracle.sql....

    JDBC与Java数据库编程

    通过本章节的学习,我们了解了JDBC的基本概念、体系结构、API及其版本发展情况,同时也学习了如何使用JDBC来进行基础的数据库操作。接下来,我们将在后续章节中深入探讨JDBC的高级应用以及其他相关的主题。

    实验3 JDBC操作数据库3

    实验3 JDBC操作数据库3主要目的是通过Java的JDBC技术来熟悉和掌握数据库的连接与操作。这个实验涉及了以下几个核心知识点: 1. **MySQL数据库**:实验中提到了使用MySQL作为关系型数据库管理系统,它是开源且广泛...

    oracle数据库中批量插入问题

    2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口(如ODBC、JDBC、Oracle Data Provider for .NET等)进行批量插入操作。这种方式更灵活,可以适应更复杂的数据处理需求。 ### C#代码示例解析 提供...

    基于JDBC从数据库中读取数据,在百度地图批量标注地点例程

    基于JDBC从数据库中读取数据,在百度地图批量标注地点例程

    java 通过JDBC对数据库进行查询

    本篇将详细讲解如何使用JDBC对数据库进行查询。 首先,我们需要理解JDBC的基本工作流程,这通常包括以下步骤: 1. 加载驱动:在Java程序中,我们使用`Class.forName()`方法加载数据库驱动。例如,对于MySQL,我们...

    eclipse JDBC连接数据库及jsp操作数据库数据详细教程.docx

    eclipse JDBC连接数据库及jsp操作数据库数据详细教程 本教程旨在指导读者如何使用Eclipse、JDBC和JSP来连接数据库并操作数据库数据。整个教程分为三部分:安装准备工作、安装Tomcat和MyEclipse、配置JDBC连接数据库...

    作业6 JSP JDBC操作数据库

    实验目的:理解JDBC接口操作数据库的方法,熟练掌握数据的增删改查。 实验内容: 1. 在MySQL或其他DBS中创建一个数据库TestDB,其中创建表user,表至少3个字段(编号,用户名,密码),然后向数据库中插入若干条记录...

    用JDBC向Students表中插入数据

    在IT行业中,数据库管理和数据操作是一项基础且至关重要的技能,特别是在使用Java进行Web开发时。本文将详细讲解如何使用JDBC(Java Database Connectivity)来向一个名为“Students”的数据库表中插入数据,同时也...

    传智播客JDBC_完成对数据库的CRUD操作.rar

    本教程“传智播客JDBC_完成对数据库的CRUD操作”主要涵盖了如何利用JDBC进行数据库的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 一、创建(Create) 创建数据通常涉及到...

    使用JDBC操作数据库

    它允许程序员通过编写Java代码来执行SQL语句,实现对数据库的读写操作。本篇文章将详细阐述如何使用JDBC来操作数据库。 首先,我们需要了解JDBC的核心组件。JDBC API主要包括以下部分: 1. **Driver Manager**:这...

    JDBC连接数据库的操作

    本文将详细解析如何使用JDBC进行数据库连接及基本操作。 #### 1. JDBC的基本概念 JDBC提供了以下几个核心接口: - `DriverManager`:用于加载JDBC驱动程序并建立数据库连接。 - `Connection`:表示与数据库之间的...

Global site tag (gtag.js) - Google Analytics