数据库脚本:
-- 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 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 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+ "
" , "/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 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 = "
" ; } br.close(); fr.close(); } } catch (IOException e) { e.printStackTrace(); } return content; } } |
基本思想: 就是通过记录开始记录id,执行多次sql来处理. 由于大数据量所以不能使用一条sql语句来输出.否则会内存不足导致错误.
主要用途: 可以使用在做接口开发时,给第三方提供数据增量输出的场景使用.