1. 程式人生 > 其它 >檔案採集到mysql_上傳檔案實現資料採集以及批量匯入資料庫例項

檔案採集到mysql_上傳檔案實現資料採集以及批量匯入資料庫例項

技術標籤:檔案採集到mysql

因為專案要求,需要讀取本地檔案,實現資料採集,然後批量匯入資料庫。

友情提示:下面程式碼中關於資料庫的操作的程式碼有的是封裝好的,比如save()方法,findBatchNum()方法並沒有在本篇部落格中貼出來,但是方法的作用會以註釋形式宣告。

資料採集(bean)

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

public class User {

private String name;

private String address;

private String phone;

private String company;

private Integer idCard;

private Integer blood;

private Long id;

public static User parse(String str){

User u = new User();

String[] s = str.split("\\|");

u.setName(s[0].equals("未採集")?"":s[0]);

u.setAddress(s[1].equals("未採集")?"":s[1]);

u.setPhone(s[2].equals("未採集")?"":s[2]);

u.setCompany(s[3].equals("未採集")?"":s[3]);

u.setIdCard(s[4].equals("未採集")?0:Integer.parseInt(s[4]));

u.setBlood(s[5].equals("未採集")?0:Integer.parseInt(s[5]));

return u ;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getCompany() {

return company;

}

public void setCompany(String company) {

this.company = company;

}

public Integer getIdCard() {

return idCard;

}

public void setIdCard(Integer idCard) {

this.idCard = idCard;

}

public Integer getBlood() {

return blood;

}

public void setBlood(Integer blood) {

this.blood = blood;

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "name"+name+"address"+address+"phone"+phone+"company"+company+"idCard"+idCard+"blood"+blood;

}

//測試

public static void main(String[] args) throws IOException {

File file = new File("C:/test/23333.txt");

FileInputStream fis = new FileInputStream(file);

InputStreamReader isr = new InputStreamReader(fis,"utf-8");

BufferedReader br = new BufferedReader(isr);

String b=null;

while((b=br.readLine())!=null){

System.out.println(User.parse(b).toString());

}

br.close();

}

}

記錄資料匯入相關資訊(bean)

import java.util.Date;

public class ImportRecord {

/**

* 批次號(無後綴檔名稱)

*/

private String batchNum;

/**

* 每次匯入的總記錄數

*/

private int totalRecord;

/**

* 匯入失敗為0 ,匯入成功為1

*/

private int status;

/**

* 匯入時間

*/

private Date createTime;

/**

* 匯入完成時間

*/

private Date finishTime;

private Long id;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getBatchNum() {

return batchNum;

}

public void setBatchNum(String batchNum) {

this.batchNum = batchNum;

}

public int getTotalRecord() {

return totalRecord;

}

public void setTotalRecord(int totalRecord) {

this.totalRecord = totalRecord;

}

public int getStatus() {

return status;

}

public void setStatus(int status) {

this.status = status;

}

public Date getCreateTime() {

return createTime;

}

public void setCreateTime(Date createTime) {

this.createTime = createTime;

}

public Date getFinishTime() {

return finishTime;

}

public void setFinishTime(Date finishTime) {

this.finishTime = finishTime;

}

}

檔案上傳以及資料的匯入(UserService.java)

public void batchSave(MultipartFile dataFile,HttpServletRequest request){

BufferedReader br=null;

InputStreamReader isr=null;

FileInputStream fis=null;

try {

CommonsMultipartFile cf = (CommonsMultipartFile) dataFile;

MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest) request;

DiskFileItem fi = (DiskFileItem) cf.getFileItem();

File file = fi.getStoreLocation();

fis = new FileInputStream(file);

isr = new InputStreamReader(fis, "UTF-8");

br = new BufferedReader(isr);

String b= null;

List u=new ArrayList();//把每一天記錄儲存到集合中,以便批量儲存到資料庫中

while ((b= br.readLine()) != null) {

User user = User.parse(b);

u.add(user);

}

//logger.info("讀取條數:"+u.size());

Iterator iter = multiRequest.getFileNames();

MultipartFile f = multiRequest.getFile(iter.next());

String fileName = f.getOriginalFilename();

String userName= fileName.substring(0,fileName.lastIndexOf(".")); //獲取無後綴檔名稱

//以檔名作為條件從資料庫查詢

ImportRecord importRecord = importRecordService.findBatchNum(userName);

if (importRecord != null) {//如果結果不為空,則不能匯入,防止重複匯入

throw new RuntimeException();

}else{

ImportRecord record=new ImportRecord();

record.setBatchNum(batchNum);

record.setTotalRecord(customers.size());

record.setStatus(0);//沒匯入之前的狀態為0

record.setCreateTime(new Date()); //匯入開始時間

//批量匯入

                            dao.batchSaveCustomer(customers);

record.setFinishTime(new Date()); //匯入結束時間

record.setStatue(1);//匯入成功的狀態為1

importRecordService.save(record);//儲存到資料庫中

}

} catch (IOException e) {

e.printStackTrace();

} finally{

try{

if(br!=null)br.close();

if(isr!=null)isr.close();

if(fis!=null)fis.close();

}catch(Exception ex){

ex.printStackTrace();

}

}

}

把資料批量匯入到資料庫中(UserDao.java)

public void batchSaveUser(List list) {

Session session = getSession().getSessionFactory().openSession();

session.beginTransaction().begin();

for (int i = 0; i < list.size(); i++) {

getSession().save(list.get(i));

// 批插入的物件立即寫入資料庫並釋放記憶體

if (i % 50 == 0 || i == list.size()-1) {

session.flush();

session.clear();

}

}

session.getTransaction().commit(); // 提交事物

session.close();

}

controller層

@RequestMapping

public String add(@RequestParam("dataFile")MultipartFile dataFile,HttpServletRequest request,Model model){

try{

customerService.batchSave(dataFile,request);

}catch(RuntimeException e){

model.addAttribute("remind", "批次已存在");

e.printStackTrace();

}catch(Exception ex){

ex.printStackTrace();

}

return "user/user-list";

}

頁面(jsp)

function handler1(tp){

if(tp=='ok'){

$("#form1").submit();

}

}

  • 測試管理
  • >
  • 匯入
檔案:${remind}
匯入