- 浏览: 15960 次
- 性别:
- 来自: 深圳
最新评论
1、没有使用数据库连接池(主要思想是分页查询、分批插入)
package util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class BatchProcess { public static void batchInsert(int m, int n) { long start = System.currentTimeMillis(); String insertSql = "INSERT INTO LIJING727_ORIGDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; for (int i = 0; i < m; i++) { Connection conn = DbConnStatic.getConnection(); try { PreparedStatement pstmt = conn.prepareStatement(insertSql); for (int j = 0; j < n; j++) { pstmt.setInt(1, i * n + j + 1); pstmt.setString(2, "test" + 2); pstmt.setString(3, "test" + 3); pstmt.setString(4, "test" + 4); pstmt.setString(5, "test" + 5); pstmt.setString(6, "test" + 6); pstmt.setString(7, "test" + 7); pstmt.setString(8, "test" + 8); pstmt.setString(9, "test" + 9); pstmt.setString(10, "test" + 10); pstmt.addBatch(); } pstmt.executeBatch(); pstmt.close(); // conn.close(); // DbConnection.freeConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } long end = System.currentTimeMillis(); System.out .println("批量插入数据" + m + "*" + n + " 用时" + (end - start) / 1000f); } public static void deleteAllData() { long start = System.currentTimeMillis(); Connection conn = DbConnStatic.getConnection(); try { Statement stmt = conn.createStatement(); String sql1 = "DELETE FROM LIJING727_ORIGDATA"; //String sql2 = "DELETE FROM LIJING727_TEMPDATA"; stmt.execute(sql1); //stmt.execute(sql2); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("批量删除所有数据 用时" + (end - start) / 1000f); } public static void transferData(int m, int n) { long start = System.currentTimeMillis(); String insertSql = "INSERT INTO LIJING727_TEMPDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; String selectSql = "SELECT * FROM (SELECT rownum r,a.* " + "FROM LIJING727_ORIGDATA a WHERE rownum <= ?) WHERE r >= ?"; for (int i = 0; i < m; i++) { Connection insertConn = new DbConn().getConnection(); Connection selectConn = new DbConn().getConnection(); try { PreparedStatement selectPstmt = selectConn.prepareStatement(selectSql); PreparedStatement insertPstmt = insertConn.prepareStatement(insertSql); selectPstmt.setInt(1, (i+1) * n); selectPstmt.setInt(2, i * n + 1); ResultSet rs = selectPstmt.executeQuery(); while (rs.next()) { insertPstmt.setInt(1, rs.getInt(2)); insertPstmt.setString(2, rs.getString(3)); insertPstmt.setString(3, rs.getString(4)); insertPstmt.setString(4, rs.getString(5)); insertPstmt.setString(5, rs.getString(6)); insertPstmt.setString(6, rs.getString(7)); insertPstmt.setString(7, rs.getString(8)); insertPstmt.setString(8, rs.getString(9)); insertPstmt.setString(9, rs.getString(10)); insertPstmt.setString(10, rs.getString(11)); insertPstmt.addBatch(); } insertPstmt.executeBatch(); insertPstmt.close(); selectPstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } long end = System.currentTimeMillis(); System.out .println("批量转换" + m + "*" + n + " 用时" + (end - start) / 1000f); } }
2、使用数据库连接池
package util; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import oracle.jdbc.driver.OraclePreparedStatement; public class MultiThreadProcess { public static void batchInsert(int m, int n) throws ClassNotFoundException, SQLException, InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); DbPool dbPool = new DbPool(); dbPool.createPool(); long start = System.currentTimeMillis(); for (int i = 0; i < m; i++) { exec.execute(new BatchInsertTask(dbPool, i, n, start)); // Thread thread = new Thread(new BatchInsertTask(dbPool, i, n, // start)); // thread.join(); // 线程挂接,当前线程阻塞,thread执行完后,主线程才能执行 // exec.execute(thread); // thread.start(); } exec.shutdown(); } public static void batchTransfer(int m, int n) throws ClassNotFoundException, SQLException, InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); DbPool dbPool = new DbPool(); dbPool.createPool(); long start = System.currentTimeMillis(); for (int i = 0; i < m; i++) { exec.execute(new BatchTransferTask(dbPool, i, n, start)); } exec.shutdown(); } } class BatchInsertTask implements Runnable { DbPool dbPool; int threadNum = 0; int batchNum = 0; long start; BatchInsertTask(DbPool dbPool, int threadNum, int batchNum, long startTime) { this.dbPool = dbPool; this.threadNum = threadNum; this.batchNum = batchNum; start = startTime; } @Override public void run() { String insertSql = "INSERT INTO LIJING727_ORIGDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; try { Connection conn = dbPool.getConnection(); OraclePreparedStatement pstmt = (OraclePreparedStatement) conn .prepareStatement(insertSql); for (int j = 0; j < batchNum; j++) { pstmt.setInt(1, threadNum * batchNum + j + 1); pstmt.setString(2, "test" + 2); pstmt.setString(3, "test" + 3); pstmt.setString(4, "test" + 4); pstmt.setString(5, "test" + 5); pstmt.setString(6, "test" + 6); pstmt.setString(7, "test" + 7); pstmt.setString(8, "test" + 8); pstmt.setString(9, "test" + 9); pstmt.setString(10, "test" + 10); pstmt.addBatch(); } pstmt.executeBatch(); pstmt.close(); dbPool.returnConnection(conn); long end = System.currentTimeMillis(); System.out.println("批量插入数据用时" + (end - start) / 1000f); } catch (SQLException e) { e.printStackTrace(); } } } class BatchTransferTask implements Runnable { DbPool dbPool; int threadNum = 0; int batchNum = 0; long start; BatchTransferTask(DbPool dbPool, int threadNum, int batchNum, long startTime) { this.dbPool = dbPool; this.threadNum = threadNum; this.batchNum = batchNum; start = startTime; } @Override public void run() { String insertSql = "INSERT INTO LIJING727_TEMPDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; String selectSql = "SELECT b.DATA0,b.DATA1,b.DATA2,b.DATA3,b.DATA4," + "b.DATA5,b.DATA6,b.DATA7,b.DATA8,b.DATA9" + " FROM (SELECT rownum r," + "a.DATA0,a.DATA1,a.DATA2,a.DATA3,a.DATA4,a.DATA5,a.DATA6," + "a.DATA7,a.DATA8,a.DATA9" + " FROM LIJING727_ORIGDATA a WHERE rownum <= ?) b" + " WHERE r >= ?"; // String selectSql = "SELECT b.DATA0,b.DATA1,b.DATA2,b.DATA3,b.DATA4," // + "b.DATA5,b.DATA6,b.DATA7,b.DATA8,b.DATA9" // + " FROM (SELECT rownum r,a.*" // + " FROM LIJING727_ORIGDATA a WHERE rownum <= ?) b" // + " WHERE r >= ?"; try { Connection insertConn = dbPool.getConnection(); Connection selectConn = dbPool.getConnection(); OraclePreparedStatement selectPstmt = (OraclePreparedStatement) selectConn .prepareStatement(selectSql); OraclePreparedStatement insertPstmt = (OraclePreparedStatement) insertConn .prepareStatement(insertSql); selectPstmt.setInt(1, (threadNum + 1) * batchNum); selectPstmt.setInt(2, threadNum * batchNum + 1); ResultSet rs = selectPstmt.executeQuery(); while (rs.next()) { insertPstmt.setInt(1, rs.getInt(1)); insertPstmt.setString(2, rs.getString(2)); insertPstmt.setString(3, rs.getString(3)); insertPstmt.setString(4, rs.getString(4)); insertPstmt.setString(5, rs.getString(5)); insertPstmt.setString(6, rs.getString(6)); insertPstmt.setString(7, rs.getString(7)); insertPstmt.setString(8, rs.getString(8)); insertPstmt.setString(9, rs.getString(9)); insertPstmt.setString(10, rs.getString(10)); insertPstmt.addBatch(); } rs.close(); insertPstmt.executeBatch(); insertPstmt.close(); selectPstmt.close(); dbPool.returnConnection(insertConn); dbPool.returnConnection(selectConn); long end = System.currentTimeMillis(); System.out.println("批量转换数据用时" + (end - start) / 1000f); } catch (SQLException e) { e.printStackTrace(); } } }
如果数据量很大,造成JVM溢出,可以在查询时的是分次处理,减少JVM的负担。
package util; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import oracle.jdbc.driver.OraclePreparedStatement; public class MultiBatchProcess { public static void batchInsert(int threadNum, int timeNum, int batchNum) throws ClassNotFoundException, SQLException, InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); DbPool dbPool = new DbPool(); dbPool.createPool(); long start = System.currentTimeMillis(); for (int i = 0; i < threadNum; i++) { exec.execute(new BatchInsert(dbPool, i, timeNum, batchNum, start)); } exec.shutdown(); } public static void batchTranfer(int threadNum, int timeNum, int batchNum) throws ClassNotFoundException, SQLException, InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); DbPool dbPool = new DbPool(); dbPool.createPool(); long start = System.currentTimeMillis(); for (int i = 0; i < threadNum; i++) { exec .execute(new BatchTransfer(dbPool, i, timeNum, batchNum, start)); } exec.shutdown(); } } class BatchTransfer implements Runnable { DbPool dbPool; int threadNo = 0; int timeNum = 0; int batchNum = 0; long start = 0; BatchTransfer(DbPool dbPool, int threadNum, int timeNum, int batchnum, long start) { this.dbPool = dbPool; this.threadNo = threadNum; this.timeNum = timeNum; this.batchNum = batchnum; this.start = start; } @Override public void run() { String insertSql = "INSERT INTO LIJING727_TEMPDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; String selectSql = "SELECT b.DATA0,b.DATA1,b.DATA2,b.DATA3,b.DATA4," + "b.DATA5,b.DATA6,b.DATA7,b.DATA8,b.DATA9" + " FROM (SELECT rownum r," + "a.DATA0,a.DATA1,a.DATA2,a.DATA3,a.DATA4,a.DATA5,a.DATA6," + "a.DATA7,a.DATA8,a.DATA9" + " FROM LIJING727_ORIGDATA a WHERE rownum <= ?) b" + " WHERE r >= ?"; // String selectSql = "SELECT b.DATA0,b.DATA1,b.DATA2,b.DATA3,b.DATA4," // + "b.DATA5,b.DATA6,b.DATA7,b.DATA8,b.DATA9" // + " FROM (SELECT rownum r,a.*" // + " FROM LIJING727_ORIGDATA a WHERE rownum <= ?) b" // + " WHERE r >= ?"; try { Connection insertConn = dbPool.getConnection(); Connection selectConn = dbPool.getConnection(); OraclePreparedStatement selectPstmt = (OraclePreparedStatement) selectConn .prepareStatement(selectSql); OraclePreparedStatement insertPstmt = (OraclePreparedStatement) insertConn .prepareStatement(insertSql); for (int i = 0; i < timeNum; i++) { selectPstmt.setInt(1, threadNo * timeNum * batchNum + (i + 1) * batchNum); selectPstmt.setInt(2, threadNo * timeNum * batchNum + i * batchNum + 1); ResultSet rs = selectPstmt.executeQuery(); while (rs.next()) { insertPstmt.setInt(1, rs.getInt(1)); insertPstmt.setString(2, rs.getString(2)); insertPstmt.setString(3, rs.getString(3)); insertPstmt.setString(4, rs.getString(4)); insertPstmt.setString(5, rs.getString(5)); insertPstmt.setString(6, rs.getString(6)); insertPstmt.setString(7, rs.getString(7)); insertPstmt.setString(8, rs.getString(8)); insertPstmt.setString(9, rs.getString(9)); insertPstmt.setString(10, rs.getString(10)); insertPstmt.addBatch(); } rs.close(); insertPstmt.executeBatch(); insertPstmt.clearBatch(); } insertPstmt.close(); selectPstmt.close(); dbPool.returnConnection(insertConn); dbPool.returnConnection(selectConn); long end = System.currentTimeMillis(); System.out.println("批量转换数据用时" + (end - start) / 1000f); } catch (SQLException e) { e.printStackTrace(); } } } class BatchInsert implements Runnable { DbPool dbPool; int threadNo = 0; int timeNum = 0; int batchNum = 0; long start = 0; BatchInsert(DbPool dbPool, int threadNum, int timeNum, int batchnum, long start) { this.dbPool = dbPool; this.threadNo = threadNum; this.timeNum = timeNum; this.batchNum = batchnum; this.start = start; } @Override public void run() { String insertSql = "INSERT INTO LIJING727_ORIGDATA(DATA0,DATA1," + "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES " + "(?,?,?,?,?,?,?,?,?,?)"; try { Connection conn = dbPool.getConnection(); OraclePreparedStatement pstmt = (OraclePreparedStatement) conn .prepareStatement(insertSql); for (int i = 0; i < timeNum; i++) { for (int j = 0; j < batchNum; j++) { pstmt.setInt(1, threadNo * timeNum * batchNum + i * batchNum + j + 1); pstmt.setString(2, "test" + 2); pstmt.setString(3, "test" + 3); pstmt.setString(4, "test" + 4); pstmt.setString(5, "test" + 5); pstmt.setString(6, "test" + 6); pstmt.setString(7, "test" + 7); pstmt.setString(8, "test" + 8); pstmt.setString(9, "test" + 9); pstmt.setString(10, "test" + 10); pstmt.addBatch(); } pstmt.executeBatch(); pstmt.clearBatch(); } pstmt.close(); dbPool.returnConnection(conn); long end = System.currentTimeMillis(); System.out.println("批量插入数据用时" + (end - start) / 1000f); } catch (SQLException e) { e.printStackTrace(); } } }
发表评论
-
PPT相关资料
2010-05-16 15:06 0forever love - 王力宏) ( ... -
简单的反射代码
2010-04-28 19:34 6931、反射代码 package util; import ... -
读写CSV文件的代码
2010-04-14 15:48 1336不同的中间件对应不同的JDK,weblogic8,需要使用JD ... -
ANT应用积累
2010-04-13 17:55 1156Ant的一些简单应用(摘自一次小项目的学习经验) ... -
Eclipse使用积累
2010-04-13 09:22 6161、在Eclipse里面调整JVM参数,以及输入控制台参数:展 ... -
JDCB的基本写法和数据库连接池的实现
2010-04-12 14:21 22971、使用静态方法实现 package util; im ... -
Java中classpath的相关问题
2009-09-30 13:59 547最近在学习java的一些基础知识,遇到了很多 ...
相关推荐
您的数据库可能很大,数据可能很多,那您早已经想过如何将这些数据库中的一张表数据导出到XML 文件中,如何处理? 这个脚本会帮助你完成所有的功能,你只需要下载,然后当作sql语句执行即可运行。。。
Delphi数据库字段转换、替换工具源代码,程序的主要功能是将数据库的指定字段替换为其它字段,也就是根据一张表中对应的两组数据,替换掉另一张表中的数据。
可直接把一张表内的数据复制到另一张表内,也可以把一张表的某字段的数据复制到另一张表的某字段。功能非常实用。(选择区域内数据) 2、加入输出Excel、Html、rtf、csv、txt文件格式。(选择区域内数据)
可直接把一张表内的数据复制到另一张表内,也可以把一张表的某字段的数据复制到另一张表的某字段。功能非常实用。(选择区域内数据) 2、加入输出Excel、Html、rtf、csv、txt文件格式。(选择区域内数据) 注:本...
设计思想 把DBMS抽象成类Database,这个类负责管理数据库连接以及提供表对象。 把数据库中的一张或多张表抽象成... 把对个Row的集合抽象成RowSet,这个类中用一个vector把多个Row对象保存起来并提供一些相关操作。
这是数据库连接、对数据表(任何数据表)进行增删改查等操作的工具类,采用反射机制和泛型完成,其中有个配置文件,在配置文件中修改要连接的数据库驱动、数据库连接URL、数据库用户名、密码;
关系(Relation): 一个关系就是一张二维表, 每张表有一个表名。 . 元组(Tuple): 关系表中的一行称为一个元组。元组可表示一个实体或实体之间的联系。 . 属性( Attribute): 关系表中的一个列称为关系 的一个属性,...
1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。 2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。 3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。 ...
第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束 第九章 对数据的操作 在已创建表中插入新的数据 修改...
本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛。 没想都在上面消磨了两天… 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面...
SQL Server转换为MySQL工具...这个表里面的数据并不多,花费时间稍长,大概有10分钟,如果表大的话,可能用程序来转换会快一些,有方便的办法也请告之为谢 下面就是转换成功后的表格了,里面的数据OK,中文也没有什么问题.
答:概念模型是现实世界到机器世界的一个中间层次, 作用:用于信息世界的建模,是现实世界到信息世界的第一层抽象,数据库设计人员进 行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。...
视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...
关系模型数据结构 (1)关系 一个关系也就是通常所说的一张表。 关系具有以下特征: 1.关系中不能有任意两条完全相同的记录。 2.关系中的记录是非排序的。 3.关系中记录的字段是非排序的。 4.字段名称不能相同。 5....
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一...
(3)自行设计2张视图(1张基于单表创建,一张基于多表创建)、2个触发器(1个用户动态约束检查,1个用户表间约束检查)、2个索引(参照11.1节,1个基于单列创建,1个基于组合列创建),各对象用自己的学号+对象名...
由E_R模型转换成数据表,建立表间联系。规范表设计至4NF(如有特殊情 况未达到4NF需说明理由)。 6. 数据库实现。基于Access或SQL SERVER环境,建立数据库,建立数据表,建立表间联系,实现各种数据约束。 7. 调试...
一种基于树形结构的Sql结果集向Json数据的转换算法.pdf
本文实例讲述了PHP实现数据库统计时间戳按天分组输出数据的方法。分享给大家供大家参考,具体如下: 比如统计每天用户注册数,数据库表存了一张用户注册记录表: create table table_name(id int primary key,...
A 人工管理阶段 B 文件系统阶段 C 数据库系统阶段 D 系统管理阶段 6:在一个关系中,不能有完全相同的___A______。 A 元组 B 标记 C 分量 D 域 7: E-R图是表示概念模型的有效工具之一,E-R图中使用菱形框表示 ___A__...