- 浏览: 16121 次
- 性别:
- 来自: 深圳
-
最新评论
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 7041、反射代码 package util; import ... -
读写CSV文件的代码
2010-04-14 15:48 1349不同的中间件对应不同的JDK,weblogic8,需要使用JD ... -
ANT应用积累
2010-04-13 17:55 1168Ant的一些简单应用(摘自一次小项目的学习经验) ... -
Eclipse使用积累
2010-04-13 09:22 6251、在Eclipse里面调整JVM参数,以及输入控制台参数:展 ... -
JDCB的基本写法和数据库连接池的实现
2010-04-12 14:21 23091、使用静态方法实现 package util; im ... -
Java中classpath的相关问题
2009-09-30 13:59 554最近在学习java的一些基础知识,遇到了很多 ...
相关推荐
您的数据库可能很大,数据可能很多,那您早已经想过如何将这些数据库中的一张表数据导出到XML 文件中,如何处理? 这个脚本会帮助你完成所有的功能,你只需要下载,然后当作sql语句执行即可运行。。。
Delphi数据库字段转换、替换工具源代码,程序的主要功能是将数据库的指定字段替换为其它字段,也就是根据一张表中对应的两组数据,替换掉另一张表中的数据。
可直接把一张表内的数据复制到另一张表内,也可以把一张表的某字段的数据复制到另一张表的某字段。功能非常实用。(选择区域内数据) 2、加入输出Excel、Html、rtf、csv、txt文件格式。(选择区域内数据)
1、在Java开发中,常常需要将数据库表列字段换成Java实体类字段。但是手动实现这个转换过程比较慢,且容易出错,影响开发效率。为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表...
可直接把一张表内的数据复制到另一张表内,也可以把一张表的某字段的数据复制到另一张表的某字段。功能非常实用。(选择区域内数据) 2、加入输出Excel、Html、rtf、csv、txt文件格式。(选择区域内数据) 注:本...
设计思想 把DBMS抽象成类Database,这个类负责管理数据库连接以及提供表对象。 把数据库中的一张或多张表抽象成... 把对个Row的集合抽象成RowSet,这个类中用一个vector把多个Row对象保存起来并提供一些相关操作。
这是数据库连接、对数据表(任何数据表)进行增删改查等操作的工具类,采用反射机制和泛型完成,其中有个配置文件,在配置文件中修改要连接的数据库驱动、数据库连接URL、数据库用户名、密码;
kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用
关系(Relation): 一个关系就是一张二维表, 每张表有一个表名。 . 元组(Tuple): 关系表中的一行称为一个元组。元组可表示一个实体或实体之间的联系。 . 属性( Attribute): 关系表中的一个列称为关系 的一个属性,...
路径表示法设有一个path字段记录了从树的根节点到当前节点的完整路径。这种方法的优点是能够快速查找节点,但缺点在于一旦某个节点的位置发生变化时,就要维护该节点及其子节点的路径,对于操作频繁的树这是非常繁琐...
第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束 第九章 对数据的操作 在已创建表中插入新的数据 修改...
1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。 2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。 3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。 ...
kettle对数据分表插入 数据库Oracle etl工具 kettle 通过java脚本,hash算法,实现分表数据写入
2. 一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。例如,拿转账来说,假设用户 A 和用户 B 两者的钱加起来一共是 20000,那么不管 A 和 B 之间如何转账,...
* 提供了强大的数据转换功能,能够将数据模型转换成 SQL 语句 PowerDesigner 的应用场景包括: * 数据库设计和开发 * 数据 warehouse 设计和开发 * 业务流程设计和优化 * 项目管理和控制 PowerDesigner 是一个...
19. 一个关系就是一张表,每个关系有一个关系名,每个关系在计算机中作为一个文件存储起来。 20. 关系中的元组和属性分别对应二维表中的行和列。 21. 属性的取值范围称为该属性的域。 22. 关系中的属性或属性组合...
本来最近在研究微信公众平台的,老大临时交我个任务,把excel表格里的数据导入sql数据库,我想这so easy嘛。 没想都在上面消磨了两天… 把情况介绍下:在数据库中有如下这样结构的表(A表) 我只取关键的及列里面...
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速...
SQL Server转换为MySQL工具...这个表里面的数据并不多,花费时间稍长,大概有10分钟,如果表大的话,可能用程序来转换会快一些,有方便的办法也请告之为谢 下面就是转换成功后的表格了,里面的数据OK,中文也没有什么问题.
答:概念模型是现实世界到机器世界的一个中间层次, 作用:用于信息世界的建模,是现实世界到信息世界的第一层抽象,数据库设计人员进 行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。...