网络编程
位置:首页>> 网络编程>> 数据库>> Java实现从数据库导出大量数据记录并保存到文件的方法

Java实现从数据库导出大量数据记录并保存到文件的方法

作者:5iasp  发布时间:2024-01-16 09:47:37 

标签:Java,数据库,导出,保存

本文实例讲述了Java实现从数据库导出大量数据记录并保存到文件的方法。分享给大家供大家参考,具体如下:

数据库脚本:


-- 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语句来输出.否则会内存不足导致错误.

主要用途: 可以使用在做接口开发时,给第三方提供数据增量输出的场景使用.

希望本文所述对大家Java程序设计有所帮助。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com