从数据库导出大量数据记录保存到文件的方法和实例

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

从数据库导出大量数据记录保存到文件的方法和实例


数据库脚本:


-- 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
关系型数据库 MySQL 数据库
一台MySQL数据库启动多个实例
一台MySQL数据库启动多个实例
|
2天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
2天前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
15 0
|
7天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
15 1
|
8天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为&#39;张三&#39;,`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, &#39;张三&#39;, 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES (&#39;张三&#39;, 20)`。
11 2
|
8天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
9 2
|
15天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
6天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
37 2
|
22天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
105 0
|
22天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)

热门文章

最新文章