`
落叶换新叶
  • 浏览: 24360 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数据库大量数据导出导入

阅读更多

1.jdbc批量导入数据 大约3秒导入32万条记录

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;


public class HttpXmlSender_export_data {

	public static void main(String[] args) throws Exception {
		List<String> list = IOTool.getContentFromText("D:\\tpdata\\twoElement\\test.txt", "UTF-8");
		long startTime = System.currentTimeMillis();
		insertBatch(list);
		long endTime = System.currentTimeMillis();
		System.out.println("耗时:"+(endTime-startTime));
	}
	
	/**
	 * 分割数组
	 * @param dataString
	 * @param regex
	 * @return
	 */
	public static String[] splitToData(String dataString,String regex) {
		dataString = dataString + regex+"tmpData";
		String[] arrs = dataString.split(regex);
		return arrs;
	}
	
	public static int insertBatch(List<String> list) {
		Connection conn = getConn();
		try {
			conn.setAutoCommit(false);
			String sql = "insert into TMP_20190730_X(name,phone) values(?,?)";
			PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
			for(int i=0;i<list.size();i++) {
				String[] data = splitToData(list.get(i),";");
				
				pstmt.setString(1, data[0]);
				pstmt.setString(2, data[1]);
				pstmt.addBatch();
				if(i%500==0||i==list.size()-1) {
					pstmt.executeBatch();
				}
			}
			conn.commit();
			pstmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		close(conn);
		
	    return 0;
	}
	
	public static void close(Connection conn) {
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	private static Connection getConn() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		// 生产
		String url = "";
		Connection conn = null;
		try {
		    Class.forName(driver); //classLoader,加载对应驱动
		  //  conn = DriverManager.getConnection(url, "tpsc_test", "tpsc_test");
		    conn = DriverManager.getConnection(url, "", "");  //生产
		} catch (ClassNotFoundException e) {
		    e.printStackTrace();
		} catch (SQLException e) {
		    e.printStackTrace();
		}
		return conn;
	}
}

 

2.IOTool工具类

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.alibaba.fastjson.JSON;


public class IOTool {

	//=============================================导入数据=============================================
	/**
	 * 读取text文件
	 * @param filePath
	 * @param charSet
	 * @return
	 * @throws Exception
	 */
	public static List<String> getContentFromText(String filePath,String charSet) throws Exception {
		List<String> list = new ArrayList<String>();
		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),charSet));
		String contentLine = "";
		while((contentLine = reader.readLine())!=null) {
			list.add(contentLine);
		}
		return list;
	}
	public static List<String> getContentFromCsv(String filePath) throws Exception {
		List<String> list = new ArrayList<String>();
		BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
		String contentLine = "";
		// 遍历数据行并存储在名为records的ArrayList中,每一行records中存储的对象为一个String数组
		while ((contentLine = file.readLine()) != null) {
			list.add(contentLine);
		}
		return list;
	}
	/**
	 * 读取Excel数据
	 * @param filePath
	 * @param columns
	 * @return
	 * @throws Exception
	 */
	public static List<String> getContentFromExcle(String filePath,int columns) throws Exception {
		List<String> list = new ArrayList<String>();
		StringBuffer sb = new StringBuffer();
		Workbook wb = getWorkbook(filePath);
		int sheets = wb.getNumberOfSheets();
		for(int i=0;i<sheets;i++) {
			Sheet sheet = wb.getSheetAt(i);
			for(int j=0;j<=sheet.getLastRowNum();j++) {
				Row row = sheet.getRow(j);
				for(int k=0;k<columns;k++) {	
					Cell cell = row.getCell(k);
					String data = getStringCell(cell);
					sb.append(data+",");
				}
				String str = sb.toString();
				// 清空StringBuffer
				sb.setLength(0);
				str = str.substring(0,str.length()-1);
				list.add(str);
			}
		}
        return list;
	}
	
	public static String getStringCell(Cell cell) {
		String cellValue = "";
        if (cell == null) {
            return cellValue;
        }
        // 判断数据的类型
        switch (cell.getCellType()) {
        case Cell.CELL_TYPE_NUMERIC: // 数字
            //short s = cell.getCellStyle().getDataFormat();
            SimpleDateFormat sdf = null;
            // 验证short值
            if (cell.getCellStyle().getDataFormat() == 14) {
                sdf = new SimpleDateFormat("yyyy/MM/dd");
                Date date = cell.getDateCellValue();
                cellValue = sdf.format(date);
             } else if (cell.getCellStyle().getDataFormat() == 21) {
                sdf = new SimpleDateFormat("HH:mm:ss");
                Date date = cell.getDateCellValue();
                cellValue = sdf.format(date);
             } else if (cell.getCellStyle().getDataFormat() == 22) {
                sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                Date date = cell.getDateCellValue();
                cellValue = sdf.format(date);
             } else if (cell.getCellStyle().getDataFormat() == 0) {//处理数值格式
                cell.setCellType(Cell.CELL_TYPE_STRING);
                cellValue = String.valueOf(cell.getRichStringCellValue().getString());
             }else {
                throw new RuntimeException("日期格式错误!!!");
             }
               
            break;
        case Cell.CELL_TYPE_STRING: // 字符串
            cellValue = String.valueOf(cell.getStringCellValue());
            break;
        case Cell.CELL_TYPE_BOOLEAN: // Boolean
            cellValue = String.valueOf(cell.getBooleanCellValue());
            break;
        case Cell.CELL_TYPE_FORMULA: // 公式
            cellValue = String.valueOf(cell.getCellFormula());
            break;
        case Cell.CELL_TYPE_BLANK: // 空值
            cellValue = null;
            break;
        case Cell.CELL_TYPE_ERROR: // 故障
            cellValue = "非法字符";
            break;
        default:
            cellValue = "未知类型";
            break;
        }
        return cellValue;
	}
	
	public static void main(String[] args) throws Exception {
		String str = ",,aaa,,ddd,44";
		String[] arr = str.split(",");
		System.out.println(JSON.toJSONString(arr));
		
	//	List<String> list = getContentFromCsv("D:\\tpdata\\test.csv");
	//	for(String str :list) {
	//		System.out.println(str);
	//	}
		
		
	//	33,,,,33,
	//	,,aaa,,ddd,44
	}
	
	public static Workbook getWorkbook(String filePath) throws IOException{
        Workbook wb = null;
        FileInputStream in = new FileInputStream(filePath);
        if(filePath.endsWith("xls")){     //Excel&nbsp;2003
            wb = new HSSFWorkbook(in);
        }else if(filePath.endsWith("xlsx")){    // Excel 2007/2010
            wb = new XSSFWorkbook(in);
        }
        return wb;
        
    }
	
	//=============================================导出数据=================================
	
	/**
	 * 导出txt
	 */
	public static void exportDataToTxt(List<String> list) throws Exception {
		if(list==null || list.size()==0) {
			return ;
		}
		String dateString = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
		String path = "D:\\tpdata\\export\\"+ dateString+".txt";
		File file = new File(path);
		file.createNewFile();
		 
		RandomAccessFile raf=new RandomAccessFile(file, "rw");
		for(String str:list) {
			raf.seek(raf.length());
			raf.writeBytes(str+"\r\n");
		}
		raf.close();
		
	}
}

 3.导出数据,oracle采用sqluldr2,将三个文件放入pl/sql的bin目录下



 打开cmd,输入sqluldr2.exe USER=username/password@WX SQL=D:\tpdata\sql\sql_1.txt head=yes FILE=D:\tpdata\sql\export\test.txt



 

可以把sql语句放入sql_1.txt中,如果使用csv作为输出文件,会有行数限制,最多只有1048576条

 

 

4.mysql 数据导入导出

 show variables like '%secure%';  查看secure_file_priv路径


也可以修改路径,找到my.ini文件修改,修改后重启mysql服务

 

导入:

SELECT * FROM pay INTO OUTFILE 'D:\\tpdata\\mysql\\data2.txt' FIELDS TERMINATED BY ',' ;

导出

LOAD DATA INFILE 'D:\\tpdata\\mysql\\test2.txt' INTO TABLE pay FIELDS TERMINATED BY ',';

 

这种方式有点缺点,文件都会在mysql安装的服务器上。

 

 

 

  • 大小: 11.6 KB
  • 大小: 10.2 KB
  • 大小: 3.3 KB
分享到:
评论

相关推荐

    mysql数据库大数据量导入导出多种方法

    mysql数据库大数据量导入导出多种方法,该文档详述SELECT * INTO和mysqldump导出方法。导入方法中包括导入sql,txt文件和load data三种方法

    从数据库将大量数据导出到Excel文件程序总结

    这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条...

    MySQL数据库迁移快速导出导入大量数据

    今天小编就为大家分享一篇关于MySQL数据库迁移快速导出导入大量数据,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    MySQL数据库迁移快速导出导入大量数据(外发).txt

    使用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE快速导出导入数据 LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。MySQL官方文档也说明了,该方法比一次性插入一条数据性能快20倍。

    Excel大量数据快速导入数据库源码

    使Excel数据同步到数据库中的源码

    .Net Mvc之NPOI Excel数据导出和批量导入功能实现

    在我们的实践开发中我们经常会遇到很多关于报表问题的数据展示,当然了有报表肯定是少不了数据的导出和导入的一些功能的啦,我这个demo就是专门使用nopi第三方库对excel的数据批量导入和数据导出的相关功能实现。

    将大量数据从数据库导入到Excel文档

    这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条...

    从MySQL导入导出大量数据的程序实现方法

    大家一定使用过 PHPmyadmin 里面的数据库导入,导出功能,非常方便。但是在实际应用中,我发现如下几个问题: 1 数据库超过一定尺寸,比如6M 这时使用导出一般没问题,可以正确的保存到本机硬盘上面,但是导入则...

    Excel大量数据快速导入数据库源码.zip

    好例子网下载的完整项目中Excel导入和导出,经测试完美运行,可完美导出大数据Excel.

    oracle 快速导出数据至cvs文件

    非常好用的,速度超快,免费的。请支持原作者,微博名:云计算民工。我只是搬运工。教程请自行去搜。

    海量数据导入与导出MATLAB的有效方法.pdf

    海量数据导入与导出MATLAB的有效方法.pdf

    C#实现客户端数据导入导出源代码及说明文档

    网站开发中经常遇到大量数据导入数据库,或者数据库导出到文档中。本文结合项目实际,总结出比较实用的Excel文件导入到数据库和数据库导出到Excel表格中,供大家学习参考。 一、 数据库表与Excel表结构 1、 Excel表...

    php excal 导入导出 绝对好用

    1,建立mysql数据库,把excel_demo.sql导入到你的数据库,采取utf-8编码; 2,导入时候请按照xls/demo.xls的格式导入,在linux系统下 xls目录要有下的权限; 3, 默认只有一条数据,导出至少有一条数据; 4,如果数据...

    DataMange:应用于数据库的导入导出功能

    ##应用于数据库的导入导出功能-金航开发中数据库经常会用到关系型数据库的导入导出,导入可以使用模板批量导出,但是在一定的时间内大量的数据导入是个问题,用ORM可能难以完成,所以第一考虑数据库引擎下的load方法...

    使用注解导入导出各类多表头及各种导入数据验证的i简单工具类

    使用注解导入导出各类多表头,单表头,及各种导入数据验证(含非空,字符长度,数据包含与排他,正则验证及自定义验证(使用数据库操作)等)的i简单工具类

    批量数据导入

    数据库之间的数据导入 主要用于项目重构时对于大量数据的导出

    任意数据库类型数据转换系统 OBDB2DB 1.85

    1.80 更新至 1.85 过程中,根据大量用户用户反馈的问题进行了大量修正,并完善了之前不太重视的 Access 数据库的导入导出功能。在功能上本版本暂时没有增加(所以版本号没有跳到 1.9),以稳定性为主要目标。 最新...

    Full Convert数据库转换器

    因为将大量数据从一种数据库类型转换为另一种数据库类型是一件非常复杂和麻烦的事情。 Full Convert是一个非常强大但用户友好,通用和多功能的数据库转换。它支持所有流行数据库引擎之间的非常快速的数据转换...

    Java实现excel大数据量导入

    主要为大家详细介绍了Java实现excel大数据量导入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Global site tag (gtag.js) - Google Analytics