由于导入数据是多条insert会大量占用cpu,并且慢。下面是把多条插入数据写入一条insert语句的方法。仿照insert into select语句,把多条记录通过select from dual和union把数据合并到一个记录集中。sql拼写程序如下:
String sql = "insert into training_moduleright_info(name,MODELGROUP_ID,status) " ;
boolean first = true ;
for(int cur = 0 ; cur < rows ; cur ++) {
String model = fixnull(sheet.getCell(0,cur).getContents()).trim();
String module = fixnull(sheet.getCell(1,cur).getContents()).trim();
if(first) {
sql += "select '"+module+"',(select a.id from training_modelgroup_info a,training_office_info b where a.office_id = b.id and a.name = '"+model+"' and b.type = '" + type+ "'),'1' from dual" ;
first = false ;
}
else {
sql += " union select '"+module+"',(select a.id from training_modelgroup_info a,training_office_info b where a.office_id = b.id and a.name = '"+model+"' and b.type = '" + type+ "'),'1' from dual" ;
}
}
out.print("execute sql:"+sql+"<br>");
id由于一般都用序列,所以在拼sql的时候不能直接用.nextval,这样我们需要可以写一个id自增长的前触发器。代码如下:
create or replace trigger autoincrease_moduleright_id
before insert on training_moduleright_info
for each row
declare
v_id varchar2(20) ;
v_num number ;
begin
select '000'||to_char(s_moduleright_id.nextval) into v_id from dual;
v_num := length(v_id);
select :new.MODELGROUP_ID||substr(v_id,v_num-2,v_num) into :new.id from dual;
end autoincrease_moduleright_id;
写完后在我的机器上用此方法插入了1000+条数据,只用了0.6秒。速度比1000条insert要快很多。
分享到:
相关推荐
plsql批量导入数据
为了弥补DB2一些客户端无法批量导出insert语句备份数据,特为此做了此工具,本工具可以批量导出DB2数据库的insert语句,可以更方便,而且已经过大量实践验证测试。慢慢体验吧!!!呵呵...
excel文件中批量生成insert语句,为了初始化导入数据库里面的数据,如导入期初库存或者商品档案,员工数据等等
利用.net 语言编程实现对Oracle数据的批量的导入功能
本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的...
Excel 中批量导入图片是一个很常见的问题,特别是在处理大量数据时。如果是少量图片,可以手动插入,但是如果是几十张图片,那就很麻烦了。这篇文章将教您如何使用 Excel 中的宏来批量导入图片。 使用宏批量导入...
Z项目是MIT麻省理工大学的一个项目,其中有很多扩展库,其中一个关于批量导入数据到Sqlserver的方法和程序集,非常不错,很实用。 Z.SqlBulkCopy 支持bulkupdate、bulkinsert、bulkcopy、bulkDelete等扩展方法, ...
Dbload 拥有容错机制,可以重复导入数据,保持已有数据不变,只增加新增记录;还可以将导入失败的数据记录到指定文件中,帮助用户快速找到有问题的数据。Dbload 的常用命令参数如下: Dbload [-d dbname] [-c ...
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
sqlserver的存储过程批量生成insert插入语句 在需要批量导入数据或者保留数据的情况下使用
考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法。在插入操作运行时,会造成系统短暂的“卡死”现象。为了让用户知道插入的状态,需要制作一个进度条来显示插入的进度。 批量插入 项目中...
Ambari搭建hadoop环境下,hive的数据导入
C#实现的批量插入sqlserver数据,使用三种方法,可以看出效率高低,insert是效率最低,sqlbulkcopy和表值参数效率很高且两者效率相当。
Z项目是MIT麻省理工大学的一个项目,其中有很多扩展库,其中一个关于批量导入数据到Sqlserver的方法和程序集,非常不错,很实用。 Z.SqlBulkCopy 支持bulkupdate、bulkinsert、bulkcopy、bulkDelete等扩展方法, ...
C#编写,大数据量数据进行批量插入数据库Access的程序
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。
Z项目是MIT麻省理工大学的一个项目,其中有很多扩展库,其中一个关于批量导入数据到Sqlserver的方法和程序集,非常不错,很实用。 Z.SqlBulkCopy 支持bulkupdate、bulkinsert、bulkcopy、bulkDelete等扩展方法, ...
理论上支持数据的任意导入(Update更新、Insert插入),数据库密码做了加密处理,工具使用也做密码验证(防止被恶意使用),可做软件的实施辅助工具,亦可方便日常操作人员做数据的批量导入,已经过客户测试。...
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。
结果可一键执行,利于数据导出、导入) 参数: @tableName nvarchar(100) --表名 ,@sqlWhere nvarchar(500) --where条件(传空时,导出全部数据) 不足: 不支持text,binary,image,text等类型; 编写:liangning ...