如何在数据库中批量插入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在数据库中批量插入数据相关的知识,希望对你有一定的参考价值。
如何在数据库中批量插入数据,其中有日期字段,即根据日期进行循环,将一段时间内的各天插入数据
参考技术A 可以使用oracle sql loader批量导入数据:生成测试数据的EXCEL文件,把EXCEL文件另存为CSV(逗号分隔)(*.csv),控制文件设置为用逗号分隔。
示例:
LOAD DATA
INFILE ‘d:\car.csv’
APPEND INTO TABLE t_car_temp
FIELDS TERMINATED BY ","
(phoneno,vip_car)
保存为input.ctl
最后在命令行下输入:
C:\>sqlldr userid=system/manager
control=input.ctl(在unix环境下亦同)
默认日志文件名为:input.log
默认坏记录文件为:input.bad 参考技术B 你可以将两个日期之前的天数求出来,然后作为控制循环的次数,然后定义个起始日期,循环里对这个日期进行递增。
像下面这样 :
DECLARE
V_DATE DATE;
V_DAYS NUMBER;
V_DATE_BEGIN DATE;
V_DATE_END DATE;
BEGIN
V_DATE_BEGIN := TO_DATE('20101101',
'yyyymmdd');
V_DATE_END := TO_DATE('20100301',
'yyyymmdd');
V_DAYS := V_DATE_END - V_DATE_BEGIN;
FOR I IN 1 .. V_DAYS
LOOP
V_DATE := V_DATE_BEGIN + I;
insert into tablename values (v_days) ;
END LOOP;
END;本回答被提问者和网友采纳 参考技术C 只能循环插入数据, 参考技术D 应该使用insert into语句,我也是菜鸟一枚,只知道这么多咯
java批量插入数据库数据
在项目中往往需要一次向数据库中插入多条数据,如果使用for循环的方式插入,效率慢且资源消耗高
接下来看看如何批量将数据写入数据库中
一、Dao
ReportSampleDao.java文件
import com.seewo.module.report.dto.ReportSampleReqDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Mapper
public interface ReportSampleDao
/**
* 批量插入报告详情数据
*/
void batchAddSample(@Param("samples") List<ReportSampleReqDto> samples);
二、Mapper
ReportSampleMapper.html文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.seewo.dao.dao.ReportSampleDao">
<insert id="batchAddSample">
INSERT INTO report_sample
(report_id, elapsed, label, response_code, response_message, url)
VALUES
<foreach collection="samples" item="sample" index="index" separator=",">
(
#sample.reportId,
#sample.elapsed,
#sample.label,
#sample.responseCode,
#sample.responseMessage,
#sample.url
)
</foreach>
</insert>
</mapper>
三、调用
ReportSampleImpl.java文件
@Resource
private ReportSampleDao reportSampleDao;
public Integer saveErrorSampleList(String reportId)
List<ReportSampleReqDto> reportSamples = new ArrayList<>();
// ...
reportSampleDao.batchAddSample(reportSamples);
四、foreach collection的用法
foreach元素的属性主要有item,index,collection,open,separator,close
- item:集合中每一个元素进行迭代时的别名
- index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置
- open:该语句以什么开始
- separator:在每次进行迭代之间以什么符号作为分隔符
- close:以什么结束
在使用foreach时最关键也最容易出错的是collection属性,该属性是必须指定的,在不同情况下collection属性的值不一样,有3种情况:
- 如果传入的是单参数且参数类型是一个List时,collection属性值为list
- 如果传入的是单参数且参数类型是一个array数组时,collection的属性值为array
- 如果传入的参数是多个时,需要把它们封装成一个Map,当然单参数也可
4.1 单参数List类型
collection的值为list时,对应的Mapper如下:
<select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#item
</foreach>
</select>
测试代码:
@Test
public void dynamicForeachTest()
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List ids = new ArrayList();
ids.add(1);
ids.add(3);
ids.add(6);
List blogs = blogMapper.dynamicForeachTest(ids);
for(Blog blog : blogs)
System.out.println(blog);
session.close();
4.2 单参数array数组类型
collection为array时,对应的Mapper代码
<select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
select * from t_blog where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#item
</foreach>
</select>
测试代码:
@Test
public void dynamicForeach2Test()
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
int[] ids = new int[] 1,3,6,9;
List blogs = blogMapper.dynamicForeach2Test(ids);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
4.3 参数封装成Map类型
collection的值为ids,是传入的参数Map的key,对应的Mapper代码
<select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
select * from t_blog where title like "%"#title"%" and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#item
</foreach>
</select>
测试代码:
@Test
public void dynamicForeach3Test()
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
final List ids = new ArrayList();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(6);
ids.add(7);
ids.add(9);
Map params = new HashMap();
params.put("ids", ids);
params.put("title", "中国");
List blogs = blogMapper.dynamicForeach3Test(params);
for(Blog blog : blogs)
System.out.println(blog);
session.close();
以上是关于如何在数据库中批量插入数据的主要内容,如果未能解决你的问题,请参考以下文章