从数据库导出大量数据记录保存到文件的方法和实例
2013-02-07 16:24
591 查看
从数据库导出大量数据记录保存到文件的方法和实例
数据库脚本:
-- Table "t_test" DDL
CREATE TABLE `t_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`createTime` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码:
基本内思想: 就是通过记录开始记录id,执行多次sql来处理. 由于大数据量所以不能使用一条sql语句来输出.否则会内存不足导致错误.
主要用途: 可以使用在做接口开发时,给第三方提供数据增量输出的场景使用.
有问题可以联系qq: 1046011462
数据库脚本:
-- Table "t_test" DDL
CREATE TABLE `t_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`createTime` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
代码:
package com.yanek.test; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestDB { public static void main(String[] args) { Test(); // 生成测试数据 //Exp(); //Exp(0); //System.out.println(readText("/opt/id.txt")); } /** * 导出数据 */ public static void Exp() { Connection Conn=null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; String jdbcUsername = "root"; String jdbcPassword = "root"; Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); System.out.println("conn"+Conn); Exp(Conn); } catch (SQLException e) { e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { Conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void Exp(int startid) { Connection Conn=null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; String jdbcUsername = "root"; String jdbcPassword = "root"; Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); System.out.println("conn"+Conn); Exp(Conn,startid); } catch (SQLException e) { e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { Conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 导出从startid开始的数据 * @param conn * @param start_id */ public static void Exp(Connection conn,int start_id) { int counter = 0; int startid=start_id; boolean flag = true; while (flag) { flag = false; String Sql = "SELECT * FROM t_test WHERE id>" + startid + " order by id asc LIMIT 50"; System.out.println("sql===" + Sql); try { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(Sql); while (rs.next()) { flag = true; int id = rs.getInt("id"); String title = rs.getString("title"); startid = id ; counter++; writeContent(counter+"--id--"+id+"--title-"+title+"\r\n", "/opt/","log.txt",true); System.out.println("i="+counter+"--id--"+id+"--title-"+title); } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } writeContent(""+startid, "/opt/","id.txt",false); } /** * 导出一小时内的数据 * @param conn */ public static void Exp(Connection conn) { int counter = 0; //一小时内的数据 Long timestamp = System.currentTimeMillis() - (60 * 60 * 1000); boolean flag = true; while (flag) { flag = false; String Sql = "SELECT * FROM t_test WHERE createTime>" + timestamp + " LIMIT 50"; System.out.println("sql===" + Sql); try { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(Sql); while (rs.next()) { flag = true; int id = rs.getInt("id"); String title = rs.getString("title"); Long lastmodifytime = rs.getLong("createTime"); timestamp = lastmodifytime; counter++; System.out.println("i="+counter+"--id--"+id+"--title-"+title); } rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void Test() { Connection Conn=null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; String jdbcUsername = "root"; String jdbcPassword = "root"; Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); System.out.println("conn"+Conn); for(int i=1;i<=10000;i++) { add(Conn,"testTitle"+i+"-"+System.currentTimeMillis()); } } catch (SQLException e) { e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { Conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void add(Connection conn,String title) { PreparedStatement pstmt = null; String insert_sql = "insert into t_test(title,createTime) values (?,?)"; System.out.println("sql="+insert_sql); try { pstmt = conn.prepareStatement(insert_sql); pstmt.setString(1,title); pstmt.setLong(2,System.currentTimeMillis()); int ret = pstmt.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 写入内容到文件 * * @param number * @param filename * @return */ public static boolean writeContent(String c, String dirname,String filename,boolean isAppend) { File f=new File(dirname); if (!f.exists()) { f.mkdirs(); } try { FileOutputStream fos = new FileOutputStream( dirname+File.separator+filename,isAppend); OutputStreamWriter writer = new OutputStreamWriter(fos); writer.write(c); writer.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; } /** * 从文件读取内容 * * @param filename * @return */ public static String readText(String filename) { String content = ""; try { File file = new File(filename); if (file.exists()) { FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String str = ""; String newline = ""; while ((str = br.readLine()) != null) { content += newline + str; newline = "\n"; } br.close(); fr.close(); } } catch (IOException e) { e.printStackTrace(); } return content; } }
基本内思想: 就是通过记录开始记录id,执行多次sql来处理. 由于大数据量所以不能使用一条sql语句来输出.否则会内存不足导致错误.
主要用途: 可以使用在做接口开发时,给第三方提供数据增量输出的场景使用.
有问题可以联系qq: 1046011462
相关文章推荐
- Java实现从数据库导出大量数据记录并保存到文件的方法
- Java实现从数据库导出大量数据记录并保存到文件的方法(转)
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- postgresql备份恢复数据库和批量导入导出数据到文件方法
- 数据库中导出CSV文件与EXCEL文件数据对比可能遇到的问题与解决方法
- 将数据库内表中的数据导出到txt文档中,并且显示一个对话框,提示用户保存文件的位置
- scrapy 详细实例-爬取百度贴吧数据并保存到文件和和数据库中
- 使用 nopi导出大量数据保存execal的方法 c#开发
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- 针对从数据库取大量数据导出到Excel的记录摘要
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- ADO 数据库的 导出和导入实例(从数据表导入到文件和把文本文件导入到数据库的数据表中)
- MySQL 快速地从文件中插入大量数据记录的方法
- 读取含有json格式数据的txt文件 并且把数据保存到数据库
- 插入数据读取数据库写入到Text文件保存
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- phpmyadmin导入导出数据库文件最大限制的解决方法
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
- MVC中将上一次导出的EXCEL文件导入验证并保存到数据库中