java程序跨服务器跨数据库批量导入导出百万级数据
/**@author G007N
* 日期:2012年4月4日
* java程序跨服务器跨数据库批量导入导出百万级数据
* 本例主要是从sqlserver 2008数据库导入数据到oracle 10.2.0数据库
*/
public static void main(String args[]) throws Exception {
ResultSet rs = null;
Statement s1 = null;
Statement s2 = null;
Connection cn1 = null;
Connection cn2 = null;
long startTime = 0;//开始时间
long endTime = 0; //结束时间
int count = 1; //计数
int onerun = 0; //执行的最大数
int datanum = 0; //总条数
int num = 0; //取整最大数据
try {
startTime = System.currentTimeMillis();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
cn1 = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.16:1521:oracleDb","test","test2012");
cn2 = DriverManager.getConnection("jdbc:sqlserver://192.168.1.18:1433;databaseName=dbsql;user=sa;password=db2012");
cn1.setAutoCommit(false);//插入oracle数据库时使用事务批量提交
if (cn2 != null) {
s1 = cn1.createStatement();
s2 = cn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = s2.executeQuery("select count(vcBusiFlowNo) from tb_His2_Ask_Pay_Fee");
if (rs.next()) {//先查询sqlserver数据源表,获取总数据条数
datanum = rs.getInt(1);
}
System.out.println("总记录数:"+datanum+"条");
onerun = 10000;//执行的最大数
num = datanum/onerun*onerun;//计算出总条数符合每批10000的数量是多少
s2.setMaxRows(datanum);
s2.setFetchSize(onerun);//每批执行的数据条数
rs = s2.executeQuery("select nSerialNo,vcBusiFlowNo,vcBusiTypeID,vcBusiNumber,vcUserName,vcUserAddress,vcUserLinkTel,nPayFee,vcBusiMonth,vcComments,dOperDate,vcOperID,vcDealerID,vcAreaCode,vcDealerGradeID from tb_His2_Ask_Pay_Fee");
while (rs.next()) {
s1.addBatch("insert into tb_His2_Ask_Pay_Fee(nSerialNo,vcBusiFlowNo,vcBusiTypeID,vcBusiNumber,vcUserName,vcUserAddress,vcUserLinkTel,nPayFee,vcBusiMonth,vcComments,dOperDate,vcOperID,vcDealerID,vcAreaCode,vcDealerGradeID) values('"
+rs.getString("nSerialNo")+"','"
+rs.getString("vcBusiFlowNo")+"','"
+rs.getString("vcBusiTypeID")+"','"
+rs.getString("vcBusiNumber")+"','"
+rs.getString("vcUserName")+"','"
+rs.getString("vcUserAddress")+"','"
+rs.getString("vcUserLinkTel")+"','"
+rs.getString("nPayFee")+"','"
+rs.getString("vcBusiMonth")+"','"
+rs.getString("vcComments")+"','"
+rs.getString("dOperDate")+"','"
+rs.getString("vcOperID")+"','"
+rs.getString("vcDealerID")+"','"
+rs.getString("vcAreaCode")+"','"
+rs.getString("vcDealerGradeID")+"')");
if (count > num) {//10000取整后剩余的小数据量就顺序插入
s1.executeBatch();
cn1.commit();
s1.clearBatch();
} else {//数据够批次的就按批量插入
if (count % onerun == 0) {//10000条一批插入
s1.executeBatch();
cn1.commit();
s1.clearBatch();
}
}
count++;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
rs.close();
s2.close();
s1.close();
cn2.close();
cn1.close();
}
endTime = System.currentTimeMillis();
System.out.println("成功移植数据:"+(count-1)+"条,耗时"+(endTime-startTime)/1000+"秒");
}
执行结果如下:
总记录数:2268422条
成功移植数据:2268422条,耗时6346秒
分享到:
相关推荐
当涉及到不同数据库系统间的数据交互,如从SQL Server到MySQL,JAVA作为一种强大的后端编程语言,提供了丰富的库和工具来实现跨数据库服务器的数据导出和导入功能。本文将深入探讨如何使用JAVA来实现这一目标。 ...
数据库可以提供高效的查询和数据管理功能,同时支持批量导入导出。 7. **数据预处理**:在导入Excel前,对数据进行清洗和预处理,如删除重复项、填充缺失值、转换数据类型,可以提高导入效率和数据质量。 8. **...
2. **使用Oracle Data Pump API**: Oracle提供了`expdp`和`impdp`命令行工具用于数据泵导入导出,但在Java中,我们可以使用`OracleDataPump`接口来调用这些功能。首先,我们需要获取`DatabaseMetadata`,然后创建`...
在本主题中,我们将讨论如何利用Spring 3.0 MVC和Apache POI库来处理Excel文件,实现批量导入数据库和导出数据的功能。 Apache POI是一个强大的开源库,专门用于读写Microsoft Office格式的文件,特别是Excel(....
为了提高数据导入导出的效率,可以使用批量操作,如`mset()`和`hmset()`,或者在处理大量数据时开启管道(Pipeline)模式。 5. **安全考虑**: 在实际操作中,应避免在生产环境中直接使用`keys(*)`命令,因为它可能...
Excel数据的批量导入与导出 二,小程序端技术选型 原生微信小程序 css3 JavaScript 三,Java后台技术点 管理后台 后台登录 饭店管理员 菜品类目 excel批量导入与导出 菜品管理 菜品批量导入与导出 订单管理 饭店...
而Servlet则常被用来处理HTTP请求,它可以在服务器端执行业务逻辑,如数据的导入导出操作,然后通过JSP呈现结果。JSP页面可以包含HTML、CSS、JavaScript以及嵌入的Java代码,用于动态生成和展示数据。 总的来说,这...
6. **效率优化**:工具可能采用了多线程、批量操作等技术,以提高数据导入导出的速度和效率,同时减轻对Elasticsearch和MySQL服务器的压力。 7. **易用性**:为了简化用户的操作流程,工具可能提供命令行界面或图形...
这些工具通常支持数据的增删改查操作,并提供批量操作的能力,如导出数据为CSV或Excel格式,或者导入数据到数据库。 4. **数据可视化** 一些高级的JAVA数据库小工具还提供了数据可视化功能,如图表、报表等,帮助...
本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出功能。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它简化了新Spring应用的初始搭建以及开发过程。SpringBoot通过...
在这个场景中,我们讨论的是如何使用Servlet和JSP(JavaServer Pages)来处理Excel文件的导入和导出,尤其是与MySQL数据库的交互。Excel文件有两种主要格式:XLS(Excel 97-2003工作簿)和XLSX(Excel 2007及以后...
本文将详细介绍如何使用Java语言实现从数据库导出数据到TXT文件的功能,这不仅适用于简单的文本导出场景,还能够为更复杂的批量数据处理提供解决方案。 #### 一、理解需求与目标 根据题目提供的信息,“使用Java把...
在IT行业中,数据的导入与导出是常见的需求,特别是在Web应用中,用户可能需要将数据从Excel表格中批量导入到系统,或者将系统内的数据导出为Excel格式供进一步处理。本教程将介绍如何利用Java技术栈,包括JSP、...
文档导入导出是信息化管理中常见的一项操作,它允许用户将数据从一种格式转换到另一种格式,以便在不同的系统或应用程序之间交换信息。在本例中,我们将关注一个使用"ling to sql"技术的小实例,这可能是一个工具或...
1. **选择数据库和表**:用户可以选择需要导出数据的特定数据库和表,避免导出不必要的信息。 2. **格式化SQL语句**:导出的SQL语句应该易于阅读和理解,通常包括适当的缩进和换行。 3. **处理特殊字符和数据类型*...
这里提到的"高性能的oracle文本处理器"和"sqlload"是指Oracle的SQL*Loader工具,它是一个高效的数据加载程序,能够快速地将大量数据从文本文件批量导入到Oracle数据库中。 **Oracle SQL*Loader基础** SQL*Loader是...
在这个场景下,Excel导入导出允许用户方便地与数据库交互,进行数据的批量处理和分析。 1. **Excel导入**:用户可以从本地电脑选择Excel文件,将其内容上传到Web应用。这个过程通常涉及以下步骤: - 文件上传:...
在Java开发中,处理Excel文件是一项常见的任务,尤其是在数据导入导出、数据分析和报表生成等场景。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,包括Excel(.xlsx 和 .xls)文档。本篇文章将...
Oracle 数据库在日常操作中,经常需要进行数据的导入导出,这有助于数据备份、迁移、分析等任务。本文将介绍两种 Oracle 数据导出的方法,适用于不同数据量规模的情况。 首先,我们来看一种适合小数据量导出的方法...
2. **数据库管理工具**:Oracle提供了多种管理工具,如DBA工具(EXP/IMP、SQLLOAD等)用于数据库的导入导出、备份恢复。还有Oracle Administration Tools用于数据库的维护,以及高级语言接口如Pro*C、Pro*Cobol等,...