业务:需要从一个数据库查询百万级数据,在java程序中插入到另一个oracle数据库中

代码:

private final int persize = 1000;

/**

* 推送数据-流程

* @param tableCode 表名

* @param startTime 开始时间

* @param endTime 结束时间

* @return

*/

public boolean pushFrData(String username,String tableCode,String tableName,String startTime,String endTime){

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

System.out.println("导入数据到名录库!");

boolean boo = false;

//表名集合

String [] str = tableCode.split(",");

String [] names = tableName.split(",");

startTime = startTime==""?"2000-01-01":startTime;

endTime = endTime==""?getCurrentDate():endTime;

//System.out.println("service 时间 "+startTime+" > "+endTime);

String start_Time = "to_date('"+startTime+"','%Y-%m-%d')";

String end_Time = "to_date('"+endTime+"','%Y-%m-%d')";

System.out.println("选择推送 "+str.length+" 张表");

//遍历表名集合

for(int i = 0;i

System.out.println("所选数据表: "+str[i]);

//字段集合

String [] arr = fillService.getIdenCode(str[i]);

String iden_code = "";

//遍历字段

for(int j = 0;j

iden_code += ""+arr[j]+",";

}

//表字段

iden_code = iden_code.substring(0,iden_code.length()-1);

//System.out.println(str[i]+"总共 "+arr.length+" 个字段!");

//得到推送数据集合

String sql = "select count(*) from "+str[i] +" where s_ext_timestamp >= "+start_Time+" and s_ext_timestamp < "+end_Time;

System.out.println(sql);

int table_size = Integer.valueOf(frDao.query(sql).get(0).toString());

//System.out.println(table_size/persize);

int times = table_size%persize==0?table_size/persize:table_size/persize+1;

for(int t = 1; t <= times;t++){

int start = (t-1) * persize;

List lists = getData(str[i], iden_code,startTime,endTime,start);

//推送数据

System.out.println("准备导出第 "+t+" 批数据");

push(lists,str[i],iden_code);

System.out.println("已导出第 "+t+" 批数据");

}

try{

if(table_size > 0){

addLog(username,str[i].toString(),names[i].toString(),table_size,"1",sdf.parse(startTime),sdf.parse(endTime));

}

}catch (ParseException e){

System.out.println("日期格式转换异常");

}

}

return boo;

}

/**

* 推送数据

* @param lists 数据集

* @param table 表名

* @param iden_code 字段集

*/

private int push(List lists,String table,String iden_code){

boolean boo = false;

int count = 0;

//遍历数据结果集

if(lists.size()>0){

for(int k = 0;k < lists.size();k++){

Object [] obj = lists.get(k);

String val = ""; //将数据转换成String类型

for(Object s:obj){

//val += "'"+s.toString()+"',";

if(s != null){

val += "'"+s.toString()+"'|";

}else{

val += "''|";

}

}

val = val.substring(0,val.length()-1);

String etpsid = "";

String [] iden = iden_code.split(",");

String [] value = val.split("\\|");

String val2 = "";//格式化数据(日期)

if(iden.length == value.length){

//格式化sql语句的时间

for(int i = 0;i

//判断字段是否是date类型

if(getDateType(table, iden[i])){

//格式化字符串 防止出现datetime类型 1900-01-01 00:00:00.0的情况

if(value[i].length() > 4){

String vv = value[i].substring(value[i].length()-3,value[i].length());

if(vv.contains(".")){

val2 += "to_date("+value[i].substring(0,value[i].length()-3)+"','YYYY-MM-DD HH24:MI:SS'),";

}else{

val2 += "to_date("+value[i]+",'YYYY-MM-DD HH24:MI:SS'),";

}

}else{

val2 += "'',";

}

}else{

val2 += value[i]+",";

}

if("ETPSID".equals(iden[i])){

etpsid = value[i];

}

}

val2 = val2.substring(0,val2.length()-1);

}else{

/*System.out.println(iden.length+" : "+value.length);

for(int j = 0 ;j< value.length;j++){

System.out.println(value[j]);

}*/

System.out.println("推送数据和字段不一致");

}

String mlk_table = getMlkTable(table);

String mlk_code = getMlkCode(iden_code,table);

//插入数据sql

//String sql = "insert into "+table+"("+iden_code+") values ("+val2+")";

//生成流水号

String uuid = UUID.randomUUID().toString();

uuid = uuid.replace("-","");

val2 += ",'"+uuid+"'";

String sql = "insert into "+mlk_table+"("+mlk_code+") values ("+val2+")";

if(etpsid != ""){

//System.out.println(etpsid);

//工商增量数据按日依"企业唯一标识"为关键字,更新、追加至名录库表中

String s_sql = "select * from "+mlk_table+" where 企业唯一标识 = "+etpsid;

//System.out.println(s_sql);

int s = mlDao.query(s_sql).size();

if (s > 0){

String update_sql = "";

String [] update_code = mlk_code.split(",");

for(int j = 0;j < iden_code.split(",").length;j++){

//判断字段是否是date类型

if(getDateType(table, iden[j])){

//格式化字符串 防止出现datetime类型 1900-01-01 00:00:00.0的情况

if(value[j].length() > 4){

String vv = value[j].substring(value[j].length() - 3, value[j].length());

if(vv.contains(".")){

update_sql += update_code[j]+" = "+ "to_date("+value[j].substring(0, value[j].length() - 3)+"','YYYY-MM-DD HH24:MI:SS'),";

}else{

update_sql += update_code[j]+" = "+ "to_date("+value[j]+",'YYYY-MM-DD HH24:MI:SS'),";

}

}else{

update_sql += update_code[j]+" = "+ "'',";

}

}else{

update_sql += update_code[j]+" = "+ value[j]+",";

}

//update_sql += update_code[j]+" = "+update_val[j]+",";

}

update_sql += "流水号 = '"+uuid+"'";

update_sql = "update "+mlk_table+" set "+update_sql+" where 企业唯一标识 = "+etpsid;

//System.out.println("/// /\n"+update_sql+"\n");

sql = update_sql;

System.out.println("更新 "+mlk_table+" 标识 "+etpsid);

}else{

System.out.println("插入 "+mlk_table+" 标识 "+etpsid);

}

}

//System.out.println(sql);

try{

//循环执行sql

mlDao.execute(sql);

count++;

System.out.println(table+" 推送第 "+count+" 条");

}catch (Exception e){

System.out.println("sql执行异常!");

}

}

System.out.println(table+" 表共插入 "+count+" 条数据!");

}else{

System.out.println(table+" 表共插入 "+count+" 条数据!");

System.out.println("导入数据为空!");

}

return count;

}

Java写入大字符串到oracle数据库_java程序如何提高oracle百万级数据的insert效率相关推荐

  1. oracle数据库 cmd,cmd命令操作Oracle数据库

    //注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%--&*之类的  所以在Oracle数据库设置密码是不要太复杂 /String Database ...

  2. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  3. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  4. oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...

    Oracle数据库添加字段的语法:alter table tablename add (column datatype [default  value][null/not null],-.); Ora ...

  5. linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...

    本文主要向大家介绍了Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 步骤思路: 1:查看ORACLE_ ...

  6. oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法

    oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法 win7 下   cmd  运行   sqlplus  ...

  7. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

    oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...

  8. 用vc对oracle数据库编程,用VC开发基于ORACLE数据库应用程序

    用VC开发基于ORACLE数据库应用程序 徐智文 [期刊名称]<包钢科技> [年(卷),期]2006(032)001 [摘要]VC++是一个强大的客户端开发工具,可以很方便地开发出基于PR ...

  9. Oracle数据库中的方案,学习Oracle数据库_理解Oracle数据库中的方案

    理解数据库.表空间.数据文件之间的关系. 每个表空间由一个或多个数据文件组成.数据文件用于在物理上存储表空间中所有逻辑结构的数据.表空间中数据文件的大小之和就是表空间的存储容量(图中系统表空间存储容量 ...

最新文章

  1. nslookup type值_nslookup命令详解【转】
  2. 【VMware vSAN 6.6】2.1.带有本地存储的服务器:vSAN硬件服务器解决方案
  3. UI事件与内容,舞台与演员
  4. safari使用canvas引入域外的图片
  5. 面试官系统精讲Java源码及大厂真题 - 17 并发 List、Map源码面试题
  6. 【CV竞赛】百度车道线检测,正在报名中,8.9万元奖金
  7. php和python-python与php比较
  8. 怎么在Guitar Pro乐谱中加入哇音
  9. JavaScript中B继承A的方法
  10. oc基础-oc中之集合NSSet,NSMutableSet
  11. 条码标签打印软件连接不了数据库怎么办?
  12. 获取电脑上连接的USB打印机
  13. android 打开闹钟,Android中的闹钟设置关闭和打开
  14. Apache ShenYu网关初体验
  15. 中国十大软件测试网站
  16. 卓训教育:家庭教育的重要性,家庭教育的理念及基本方法
  17. 歪写数学史(数学界的花木兰——苏菲﹒热尔曼)
  18. VMware出现点虚拟机和新建虚拟机没反应的解决办法
  19. Latex修改局部字体大小
  20. 测试管理工具列表大全

热门文章

  1. MySQL(3)数据库用户管理
  2. linux模拟题,Linux操作系统模拟题.doc
  3. linux下gem卸载,gem 安装卸载pod
  4. #每日一题:小计算器(模拟)
  5. 独家下载!《零售数据中台通关指南》,带你玩转新零售
  6. 非易失性内存在阿里生产环境的首次应用:Tair NVM最佳实践总结
  7. 一个由正则表达式引发的血案
  8. 大地图开发管理:《巫师3》Umbra遮挡剔除技术
  9. Linux复习资料(一)、VM虚拟机安装教程
  10. 加快mysql导入、导出速度