首先说一下这个大批量,是指有上千万的数据量。
例子:
有一张短信历史表,其数据有上千万条数据,要进行数据备份到文本文件,就是执行如下SQL然后将结果集写入到文件中!
select
t.msisdn,t.source,t.seq,t.area,t.send_date,t.msg,t.optcode from
hnsms.SMS_SEND_10086_HIS_102 t
数据库:Oracle
下面主要列一下我写文件操作的不同实现方法,及运行结果:
第一种:-----------------------------------------------------------------------------
package wap.ftp;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import wap.util.PublicUtil;
public class FileWriteTest {
private Connection conn_a = null;
private PreparedStatement pstmt_a = null;
private ResultSet rs_a = null;
private String FilePath = "";
private File fileName = null;
private FileWriter writer;
private PrintWriter pw;
private String fileAllPath = "";
Map map = new HashMap();
public void init(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
map = PublicUtil.readConfigFile();
conn_a =
DriverManager.getConnection((String)map.get("URL"),(String)map.get("USERNAME"),(String)map.get("PASSWORD"));
FilePath = PublicUtil.readServerPath();
} catch (Exception e)
{
e.printStackTrace();
}
}
public void readDataToFile(){
long totalStart = System.currentTimeMillis();
init();
try {
Date date = new
Date();
SimpleDateFormat sdf =
new SimpleDateFormat("yyyyMMdd");
//SimpleDateFormat sdf2 =
new SimpleDateFormat("yyyy/MM/dd HH:mm");
String nowDateStr =
sdf.format(date);
fileAllPath
= FilePath+nowDateStr+".txt";
fileName = new
File(fileAllPath);
try {
writer = new FileWriter(fileAllPath);
pw=new PrintWriter(writer);
} catch (IOException e) {
e.printStackTrace();
}
//createFile("");
//读配置文件--取SQL
String sql_a= (String)map.get("SQL");
System.out.println(sql_a);
pstmt_a =
conn_a.prepareStatement(sql_a);
rs_a = pstmt_a.executeQuery();
int num = 0;
//记录写文件写了多少行
while(rs_a.next()){
long startTime =
System.currentTimeMillis();
String size = (String)map.ge