對於數據規模復太大的,做成制任務。
用戶點擊導出,檢查他的數據規模,超過50W的,提示其數據規模過大,可能需要 N 小時完成,請稍候再來查詢和下載導出結果。如果用戶點擊確定,你就提示:「任務已進入隊列,點擊此連接查詢導出進度。」
然後你要做兩件事情:
1、給這個用戶記錄個標識,就是他已經啟動某導出任務,不能再啟動新的了(或者限制一個人最多同時啟動幾個導出任務);
2、後台有個調度程序,開始執行導出工作,並將生成的Excel放在某磁碟目錄或存在資料庫中;這個調度任務可以控制下最大同時並發的導出任務數,以避免任務太多拖垮系統。
另外需要開發界面查詢導出進度以及下載導出結果。導出結果可以考慮一個最大保存周期,比如7天。
② 怎麼利用JAVA導入大數據量的文本文件數據到
首先從文件中讀取數據,每當讀完一條紀錄是,把它轉換成oracle的插入語句。你可以執行,也可以存在一個大字元串里,最後一起執行
③ Java中怎麼實現txt文件批量數據導入到Oracle中,在txt中有一定的格式,解析出來導入到Oracle。
1.讀取文本文件,每次讀取一行,用BufferedReader
2.因為每一行中都是固定的格式,因此解析每一行中的數據。
3.將解析的數據保存到資料庫。
BufferedReader br = new BufferedReader(new FileReader(new File("aa.txt")));
String temp = null;
// 假定這是你寫的將數據插入資料庫的介面和實現類。
Dao = new DaoImpl();
while ((temp = br.readLine()) != null) {
String[] strs = temp.split("|");
String s1 = strs[0];//如上面的2300
String s2 = strs[1]; // 如上面的62220202222
String s3 = strs[2];//如上面的2000
String s4 = strs[3]; // 如上面的村鎮銀行3
//還需要寫一個方法將數據插入資料庫。
.insert(s1,s2,s3,s4);
}
br.close();
請自行導入所需要的包,並處理異常。
④ 用java代碼把txt文檔中資料導入到資料庫
1、在資料庫中建立一個表,創建兩個欄位,1個id,1個content(根據你估計的迴文本內容大小,選定類型答 varchar,text,blob等)
2、寫一個讀取txt文本的類A。
3、用java 建立好資料庫連接,通過類A把文本讀出來,寫到資料庫中。
⑤ JAVA導入txt、CSV的例子
導入文件若為二進制格式的csv或xls文件需要用jxl.jar包來解析,若文件為文本格式逗號分隔的csv文件則需要用opencsv.jar包來解析。下面為導入兩種格式文件的代碼示例:1. 導入文本格式逗號分隔的csv文件Java代碼 import au.com.bytecode.opencsv.CSVReader; import au.com.bytecode.opencsv.CSVReader; Java代碼 public void importCsvFile() { CSVReader csvReader = null; try { csvReader = new CSVReader(new FileReader(importFile),',');//importFile為要導入的文本格式逗號分隔的csv文件,提供getXX/setXX方法 if(csvReader != null){ //first row is title, so past csvReader.readNext(); String[] csvRow = null;//row while ((csvRow = csvReader.readNext()) != null){ for (int i =0; i<csvRow.length; i++){ String temp = csvRow[i]; switch (i) { case 0: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanName(temp); } break; case 1: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanEmail(temp); } break; default: break; } } //保存linkman到資料庫 if(linkman.getLinkmanName() != null && linkman.getLinkmanEmail() != null){ EmailLinkmanAPI.insertLinkman(linkman); } } } } catch (Exception e) { e.printStackTrace(); } } public void importCsvFile() { CSVReader csvReader = null; try { csvReader = new CSVReader(new FileReader(importFile),',');//importFile為要導入的文本格式逗號分隔的csv文件,提供getXX/setXX方法 if(csvReader != null){ //first row is title, so past csvReader.readNext(); String[] csvRow = null;//row while ((csvRow = csvReader.readNext()) != null){ for (int i =0; i<csvRow.length; i++){ String temp = csvRow[i]; switch (i) { case 0: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanName(temp); } break; case 1: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanEmail(temp); } break; default: break; } } //保存linkman到資料庫 if(linkman.getLinkmanName() != null && linkman.getLinkmanEmail() != null){ EmailLinkmanAPI.insertLinkman(linkman); } } } } catch (Exception e) { e.printStackTrace(); } } 2. 二進制格式的csv或xls文件Java代碼 import jxl.Sheet; import jxl.Workbook; import jxl.Sheet; import jxl.Workbook; Java代碼 public void importXlsFile() { Workbook book = null; try { book = Workbook.getWorkbook(importFile);//importFile為要導入的xls文件,或二進制的csv文件,提供getXX/setXX方法 } catch (Exception e) { e.printStackTrace(); } if(book != null){ int sheetNo = book.getNumberOfSheets(); for(int i = 0; i < sheetNo; i++){ Sheet sheet=book.getSheet(i); int rowNum = sheet.getRows(); int colNum = sheet.getColumns(); //first row is title, so past for(int r = 1; r < rowNum; r++){//行 for(int c = 0; c < colNum;c++){//列 String temp = sheet.getCell(c,r).getContents(); switch (c) { case 0: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanName(temp); } break; case 1: if(StringUtils.isNotEmpty(temp)){ linkman.setLinkmanEmail(temp); } break; default: break; } } //保存linkman到資料庫 if(linkman.getLinkmanName() != null && linkman.getLinkmanEmail() != null){ EmailLinkmanAPI.insertLinkman(linkman); } } } } }
⑥ 如何通過java將查詢出的數據通過資料庫直接導出到txt文件
//查詢態碼祥數模鎮據獲取帆搏resultSet
while(rs.next()){
//直接寫到文件
}
⑦ 用java如何將txt文件導入mysql
Java中將txt文件導入到基本的思路就是先使用I/O操作流獲取到文件具體信息,然後將信息拼接成mysql插入到資料庫中,示例如下:
1、先讀取txt文件的內容,文件內容可以按照一定的規律進行排列,這樣程序讀取就方便。
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.config.Constants;
import com.utils.UUIDUtil;
/**
* txt文本數據 採集類
*
* @see
*/
public class UserDataGather {
public static final String TXT_FILE_PATH = "D://testUser.txt";
public static final String openFileStyle = "r";
public static final String fieldLimitChar = ".";
public static final int fieldAllCount = 1;
public static final String default_password = "PTMD0309";
public Integer count = 0;
private String FltNum;
public String UUID;
/**
* 功能:解析文本文件
*/
public void loadFile() {
try {
RandomAccessFile raf = new RandomAccessFile(TXT_FILE_PATH, openFileStyle);
String line_record = raf.readLine();
while (line_record != null) {
// 解析每一條記錄
parseRecord(line_record);
line_record = raf.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 功能:具體解析每一條記錄,這里可以增加很多對記錄的解析判斷條件,如是否為字母、
*/
@SuppressWarnings("static-access")
private void parseRecord(String line_record) throws Exception {
//拆分記錄
// String[] fields = line_record.split(fieldLimitChar);
// System.out.println(tranStr(line_record)+"Ok");
String temp = line_record.substring(line_record.indexOf(fieldLimitChar, 0), line_record.indexOf(" ", line_record.indexOf(fieldLimitChar, 0)));
// if (fields.length == fieldAllCount) {
//
FltNum = tranStr(temp).trim().replace(fieldLimitChar,"").replace(" ","");
// System.out.println(FltNum);
if(FltNum.length()>=4){
if(!isNumeric(FltNum)){
// System.out.println(generateSql(FltNum)[0].toString());
// System.out.println(generateSql(FltNum)[1].toString());
count++;
String[] temp1 = generateSql(FltNum);
MyFile mf = new MyFile();
mf.creatTxtFile("insertPinTuUserSql");
mf.writeTxtFile(temp1[0].toString());
mf.creatTxtFile("UUID");
mf.writeTxtFile(temp1[1].toString()+",");
}
}else if(FltNum.length() ==2 || FltNum.length() ==3){
if(!isNumeric(FltNum)){
if(!isTwoCharacter(FltNum)){
// System.out.println(generateSql(FltNum)[0].toString());
// System.out.println(generateSql(FltNum)[1].toString());
count++;
String[] temp2 = generateSql(FltNum);
MyFile mf = new MyFile();
mf.creatTxtFile("insertPinTuUserSql");
mf.writeTxtFile(temp2[0].toString());
mf.creatTxtFile("UUID");
mf.writeTxtFile(temp2[1].toString()+",");
}
}
}
// InsertDB db = new InsertDB();
//
// db.insertDB(FltNum);
// }
}
@SuppressWarnings("static-access")
public String[] generateSql(String userName) throws IOException{
StringBuffer sbf = new StringBuffer();
String[] str = new String[2];
String uuid = UUIDUtil.getUUID();
sbf.append("insert into user values('"+uuid+"','" + userName +"','"+default_password+"',"+Constants.ENABLED+","+Constants.NUllDELETE+","+Constants.AUDITING+",'"+uuid+"@164.com','"+formatDateTime()+"',"+Constants.REGEDIT_USER+");/n");
sbf.append("insert into users values('"+uuid+"',"+ null+","+Constants.MALE+","+null+","+null+",'60.176.36.250','"+formatDateTime()+"',"+null+","+null+","+null+","+null+","+null+","+null+",0,"+null+","+null+",0,0,0,'"+formatDateTime()+"','1036',0,"+null+","+null+","+null+","+null+","+null+",'11',"+null+","+null+","+null+","+null+","+null+");/n");
sbf.append("insert into user_user_group values('"+uuid+"','"+ uuid +"','"+Constants.PERSONAL_USER+"');/n");
UUID = uuid;
str[0]=sbf.toString();
str[1]=UUID;
return str;
}
public String formatDateTime(){
Date date = new Date();
/**
* 時間格式化2009-12-31 09:04:31
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(date));
return sdf.format(date);
}
private String tranStr(String oldstr) {
String newstr = "";
try {
newstr = new String(oldstr.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return newstr;
}
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
public static boolean isTwoCharacter(String str){
String regEx="[a-zA-Z0-9]{2,3}";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(str);
return m.find();
}
}
2、連接資料庫執行數據導入
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
/**
* 插入資料庫 生成sql語句
*
* created on Mar 8, 2010
* @see
*/
public class InsertDB {
private static final String user = "pintu";
private static final String pwd = "pintu";
private static final String url = "jdbc:mysql://192.168.10.6:3306/pintu";
private static final String driver = "com.mysql.jdbc.Driver";
public static Connection getCon() {
Connection con = null;
try {
Class.forName(driver).newInstance();
con = (Connection) DriverManager.getConnection(url, user, pwd);
if (con != null) {
System.out.println("你已連接到資料庫:" + con.getCatalog());
}
} catch (Exception e) {
System.out.println("連接資料庫失敗!");
e.printStackTrace();
}
return con;
}
public boolean insertDB(String FltNum) {
Connection con = null;
Statement stm = null;
boolean flag = false;
String sql = "insert into t_FltPsgInfo values('" + FltNum +
// "','"
// + FltLine + "','" + FltDate + "','" + PsgName + "','" + PsgType
//
// + "','" + PsgSex + "','" + PsgCab + "','" + PsgSeatNo + "','"
//
// + PsgInfo +
"')";
try {
con = getCon();
stm = (Statement) con.createStatement();
int i = stm.executeUpdate(sql);
if (i > 0) {
flag = true;
System.out.println(flag + "插入數據成功!");
}
} catch (Exception e) {
flag = false;
e.printStackTrace();
} finally {
close(null, stm, con);
}
return flag;
}
//關閉相關連接
public void close(ResultSet rs, Statement stm, Connection con) {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
if (stm != null)
try {
stm.close();
} catch (Exception e) {
e.printStackTrace();
}
if (con != null)
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
⑧ 用java如何將txt文件導入mysql
Java中將txt文件導入到mysql基本困啟碼的思路,操作流獲取到文件具體信息,然後將信息拼接成mysql插入到資料庫中。
⑨ 編程實現大數據量數據的導入導出工作,具體每個月大約有2400萬條數據需要導出並且做一些初步的分析。
你在程序里一條一條地調用資料庫操作函數來插入數據會很慢的,應該用向你回後面那樣的SQL語句一句完成,程答序里只要執行一次資料庫操作,讓資料庫去處理會快很多。除了insert into table2 select * from table1 where ****
還可以select into table2 * from table1 where ****
如果要進行數據分析等稍微復雜一點的操作,可以在資料庫里建個存儲過程或者用戶函數,有復雜的分析結果的話可以再建個表來存儲,調用完成了去查詢這個表就可以了
⑩ 如何用JAVA把TXT文件導入資料庫中
1、java i/o讀取txt文本
2、使用實體類封裝或使用list、map等封裝讀取到的數據
3、jdbc
txt文本要保證符合一定的格式,如每個欄位間已特定字元分割。