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 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安装的服务器上。
相关推荐
9. **性能优化**:大量数据导入导出时,可能需要批量处理,避免频繁的数据库交互。还可以考虑使用数据库的批量插入功能,或者使用存储过程来提升效率。 10. **测试与调试**:编写单元测试以验证XML解析、数据库操作...
除了上述方法,还有其他工具和方法,如SQL Server Management Studio (SSMS) 的“导入和导出数据”向导,它可以方便地完成大量数据的迁移。此外,BULK INSERT和INSERT...EXEC等命令也是数据导入导出的常用手段,适用...
mysql数据库大数据量导入导出多种方法,该文档详述SELECT * INTO和mysqldump导出方法。导入方法中包括导入sql,txt文件和load data三种方法
- 在进行大量数据操作时,尽量避免直接在Excel中编辑数据库数据,以免引发并发问题和数据冲突。 - 保持良好的数据组织结构,如使用统一的字段名和数据类型,以简化导入导出过程。 - 导入导出前,检查数据的完整性和...
- 在导入大量数据时,可分批操作以减轻数据库压力。 综上所述,这款“Oracle数据库导入导出工具”提供了一个方便的界面,简化了数据库操作,尤其适合对技术不太熟悉的用户。配合详细的使用说明,用户可以更有效地...
在本项目中,"SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel.zip",我们主要关注的是如何利用Java技术栈来处理Excel文件,并与数据库进行交互。以下是相关知识点的...
1. **数据库一键数据导出导入**:这个功能简化了数据交换的过程,允许用户快速地将数据从一个数据库导出到另一个数据库,或者从外部文件(如CSV、Shapefile等)导入到ArcGIS项目中。这在需要跨系统共享数据或更新...
- 性能优化:大量数据导入时,可以使用批处理操作,减少与数据库的交互次数。 - 安全性:确保数据库连接信息的安全,避免泄露敏感信息。 总的来说,Java结合Apache POI和Servlet,为我们在IDEA环境中实现Excel与...
这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条...
这里我们主要讨论的是针对ORACLE数据库的导入导出工具,它能够帮助用户方便地处理大量数据的传输。 Oracle数据库提供了一个名为“Data Pump”的强大工具,用于高效的数据导入和导出。Data Pump由两个主要组件组成:...
3. 性能:大量数据导入导出会消耗资源,尤其是当网络速度较慢时,可能需要优化数据传输策略或在本地存储中间文件。 4. 安全性:在处理敏感数据时,确保数据导出和导入过程中的安全性,避免数据泄露。 在文件列表中...
以下将详细介绍如何将Excel文件导入到数据库中,以及如何将数据库中的数据导出到Excel中。 首先,将Excel文件导入数据库通常涉及到以下几个步骤: 1. 数据预处理:在Excel中整理数据,确保格式正确,无错误或缺失...
在IT行业中,数据导入导出是一项常见的任务,特别是在企业级应用中,用户可能需要将大量数据从数据库导出为Excel格式,以便于分析、编辑,然后再导入回数据库进行更新或新增。阿里开源的EasyExcel工具结合SpringBoot...
6. 多线程和批处理:对于大量数据,可能需要利用多线程或者批处理技术提高效率。 7. 性能优化:优化数据读取、处理和写入的速度,例如通过缓存、批量操作等方式。 在实际开发中,掌握这些知识点可以帮助你高效地...
标题 "Excel大量数据快速导入数据库源码" 描述的是一个编程解决方案,用于高效地将Excel电子表格中的大量数据批量导入到数据库系统中。这个过程通常涉及到数据预处理、数据清洗和数据传输等步骤,是数据处理工作流程...
在这些情况下,我们需要有效地导出和导入大量数据,以确保服务的连续性和数据的一致性。MySQL提供了多种迁移策略,包括直接导出与导入、使用第三方迁移工具以及直接复制数据文件和库表结构。 首先,直接导出数据并...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
3. **T-SQL语句**:使用Transact-SQL(T-SQL)可以直接从Excel文件导入数据到SQL Server表,或者将数据导出到CSV文件,再由Excel打开。例如,BULK INSERT命令适用于大批量导入,而SELECT INTO语句可用于创建新表并...
这样的工具广泛应用于数据库管理和开发场景,尤其是在处理大量数据或者需要在不同环境之间同步数据时。 首先,我们要理解SQL(Structured Query Language),它是用于管理和处理关系数据库的标准编程语言。SQL语句...
这些工具允许用户以高效的方式移动大量数据,支持表、模式、用户甚至整个数据库的数据操作。 EXPDP用于导出数据,它将数据库对象和数据转换为一个或多个二进制文件,这些文件可以在同一或不同的Oracle数据库上使用...