`
落叶换新叶
  • 浏览: 25279 次
  • 性别: 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
分享到:
评论

相关推荐

    xml与数据库中数据的导入导出

    9. **性能优化**:大量数据导入导出时,可能需要批量处理,避免频繁的数据库交互。还可以考虑使用数据库的批量插入功能,或者使用存储过程来提升效率。 10. **测试与调试**:编写单元测试以验证XML解析、数据库操作...

    在SQL Server数据库之间进行数据导入导出

    除了上述方法,还有其他工具和方法,如SQL Server Management Studio (SSMS) 的“导入和导出数据”向导,它可以方便地完成大量数据的迁移。此外,BULK INSERT和INSERT...EXEC等命令也是数据导入导出的常用手段,适用...

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

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

    excel和数据库之间数据的导入导出

    - 在进行大量数据操作时,尽量避免直接在Excel中编辑数据库数据,以免引发并发问题和数据冲突。 - 保持良好的数据组织结构,如使用统一的字段名和数据类型,以简化导入导出过程。 - 导入导出前,检查数据的完整性和...

    Oracle数据库导入导出工具

    - 在导入大量数据时,可分批操作以减轻数据库压力。 综上所述,这款“Oracle数据库导入导出工具”提供了一个方便的界面,简化了数据库操作,尤其适合对技术不太熟悉的用户。配合详细的使用说明,用户可以更有效地...

    SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip

    在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...

    arcgis实用插件(数据库一键数据导出导入,数据库对比,一键网格,出图,批量标注,数据库挂接,数据库检查等等)

    1. **数据库一键数据导出导入**:这个功能简化了数据交换的过程,允许用户快速地将数据从一个数据库导出到另一个数据库,或者从外部文件(如CSV、Shapefile等)导入到ArcGIS项目中。这在需要跨系统共享数据或更新...

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

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

    数据库导入导出工具(可以导出ORACLE)

    这里我们主要讨论的是针对ORACLE数据库的导入导出工具,它能够帮助用户方便地处理大量数据的传输。 Oracle数据库提供了一个名为“Data Pump”的强大工具,用于高效的数据导入和导出。Data Pump由两个主要组件组成:...

    数据库和excel之间的导入导出

    3. 性能:大量数据导入导出会消耗资源,尤其是当网络速度较慢时,可能需要优化数据传输策略或在本地存储中间文件。 4. 安全性:在处理敏感数据时,确保数据导出和导入过程中的安全性,避免数据泄露。 在文件列表中...

    数据库导入与导出源码(包括导出任何形式)

    6. 多线程和批处理:对于大量数据,可能需要利用多线程或者批处理技术提高效率。 7. 性能优化:优化数据读取、处理和写入的速度,例如通过缓存、批量操作等方式。 在实际开发中,掌握这些知识点可以帮助你高效地...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成exce

    在IT行业中,数据导入导出是一项常见的任务,特别是在企业级应用中,用户可能需要将大量数据从数据库导出为Excel格式,以便于分析、编辑,然后再导入回数据库进行更新或新增。阿里开源的EasyExcel工具结合SpringBoot...

    excel表导入数据库 数据库导出excel(idea平台)

    - 性能优化:大量数据导入时,可以使用批处理操作,减少与数据库的交互次数。 - 安全性:确保数据库连接信息的安全,避免泄露敏感信息。 总的来说,Java结合Apache POI和Servlet,为我们在IDEA环境中实现Excel与...

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

    标题 "Excel大量数据快速导入数据库源码" 描述的是一个编程解决方案,用于高效地将Excel电子表格中的大量数据批量导入到数据库系统中。这个过程通常涉及到数据预处理、数据清洗和数据传输等步骤,是数据处理工作流程...

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

    在这些情况下,我们需要有效地导出和导入大量数据,以确保服务的连续性和数据的一致性。MySQL提供了多种迁移策略,包括直接导出与导入、使用第三方迁移工具以及直接复制数据文件和库表结构。 首先,直接导出数据并...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    3. **T-SQL语句**:使用Transact-SQL(T-SQL)可以直接从Excel文件导入数据到SQL Server表,或者将数据导出到CSV文件,再由Excel打开。例如,BULK INSERT命令适用于大批量导入,而SELECT INTO语句可用于创建新表并...

    数据库数据导出为SQl语句工具,支持各种数据库数据导出

    这样的工具广泛应用于数据库管理和开发场景,尤其是在处理大量数据或者需要在不同环境之间同步数据时。 首先,我们要理解SQL(Structured Query Language),它是用于管理和处理关系数据库的标准编程语言。SQL语句...

    oracle 数据库导入导出

    这些工具允许用户以高效的方式移动大量数据,支持表、模式、用户甚至整个数据库的数据操作。 EXPDP用于导出数据,它将数据库对象和数据转换为一个或多个二进制文件,这些文件可以在同一或不同的Oracle数据库上使用...

    Java导出Oracle数据库数据

    本文将介绍如何使用 Java 语言将 Oracle 数据库数据导出到文件中,并将其导入到 Oracle 数据库中。 从标题和描述中可以看到,本文的主要内容是使用 Java 语言将 Oracle 数据库数据导出到文件中,并将其导入到 ...

Global site tag (gtag.js) - Google Analytics