当前位置:首页 > 芯闻号 > 充电吧
[导读]从数据库导出大量数据记录保存到文件的方法和实例数据库脚本:-- Table "t_test" DDLCREATE TABLE `t_test` (  `id` int(11) NOT NULL AUT

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


数据库脚本:


-- 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+"rn", "/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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭