java批量处理

从Excel中得到数据的方法:

package com.mobilecn.kys.export;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import com.mobilecn.kys.beans.DicMagazineMatchLevel;

public class ImportExcel {

public static List getDataFromExcel(String attachPath,String version) throws BiffException, IOException {
// 附件存储路径
// String attachPath = "E:\\2007-2008中国科学引文数据库源期刊目录(修正版).xls";

Workbook wb = Workbook.getWorkbook(new File(attachPath));

Sheet booksheet = wb.getSheet(0);

List list = new ArrayList();

try {

// 总行数
int rsRows = booksheet.getRows();

for (int x = 5; x < rsRows - 1; x++) {

Cell[] row = booksheet.getRow(x);

if (row.length == 0)
continue;

String row0 = row[0].getContents().trim(); // 期刊中文名
String row1 = row[1].getContents().trim(); // ISSN
String row2 = row[2].getContents().trim(); // 所属库
String row3 = row[3].getContents().trim(); // 等级层次

if ((row0 == null || row0.equals(""))
&& (row1 == null || row1.equals(""))
&& (row2 == null || row2.equals(""))
&& (row3 == null || row3.equals(""))) {
continue;
}

DicMagazineMatchLevel dic = new DicMagazineMatchLevel();

dic.setChinessName(row0);
dic.setIssn(row1);
dic.setBelongto(row2);
dic.setMmlevel(row3);
dic.setStatus(1L);
dic.setVersion(version);

list.add(dic);

}

} finally {

wb.close();
}

return list;
}

}


批量处理的方法
/**
* 添加数据
*
* @param list
* @param conn
* @return
*/
private String insertData(List list, Connection conn, Session session,String version) {

PreparedStatement pstmt = null;

String sql = "insert into TB_DIC_MAGAZINE_MATCH_LEVEL(MMLID,CHINESSNAME,ISSN,BELONGTO,MMLEVEL,STATUS,VERSION) values (SQ_DIC_MAGAZINE_MATCH_LEVEL.NEXTVAL,?,?,?,?,?,?)";

int size = list.size();

try {

pstmt = conn.prepareStatement(sql);

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

DicMagazineMatchLevel level = (DicMagazineMatchLevel) list.get(i);

pstmt.setString(1, level.getChinessName());
pstmt.setString(2, level.getIssn());
pstmt.setString(3, level.getBelongto());
pstmt.setString(4, level.getMmlevel());
pstmt.setLong(5, level.getStatus());
pstmt.setString(6, version);
pstmt.addBatch();

if (i % 1000 == 0) {
pstmt.executeBatch(); // 执行prepareStatement对象中所有的sql语句
// conn.commit();//事物提交
// session.flush();//数据库与缓存同步
// session.clear();//清空缓存
if (null == conn) { // 如果连接关闭了 就在创建一个 为什么要这样,原因是conn.commit()后可能conn被关闭
conn = session.connection();
}
}
}
pstmt.executeBatch();// 1.执行与1000去模不是0的数据

conn.commit();// 事物提交

} catch (SQLException e) {

Alert.error("操作失败", "操作失败", "/pages/common/error.jsp",Alert.DIALOG_WINDOW, null);

e.printStackTrace();

return null;
}

return Constants.SUCCESS;

}

其实也可以用hibernate的批处理实现如果数据量不太大,不过速度有些慢了。
/**
* 批量添加数据
* @param list
*/
public void insertBatch(List list){
if(list == null){
return;
}

if(__dao==null){
__dao = new BasicDAO();
}

Session session = getSession();
beginTransaction(session);

int size = list.size();

for(int i = 0; i < size ; i++){
__dao.insert(session, list.get(i));
}

commit(session);
}
/**
* 批量修改数据
* @param list
*/
public void updaBath(List list){

if(list == null){
return;
}

if(__dao==null){
__dao = new BasicDAO();
}

Session session = getSession();
beginTransaction(session);

int size = list.size();

for(int i = 0; i < size ; i++){
__dao.update(session, list.get(i));
}

commit(session);

}


public String upload() {

String file = (String) this.getRequest().getParameter("uploadfilename");

String versionNumber = (String)this.getRequest().getParameter("versionnumber");

/*System.out.println("filefilefilefilefilefile " + file);

System.out.println("versionNumberversionNumberversionNumber " + versionNumber);*/

//String file= "E:\\2007-2008中国科学引文数据库源期刊目录(修正版).xls";

if (file == null || file.equals("")) {
return null;
}
Session session = null;
List list = null;

try {


list = ImportExcel.getDataFromExcel(file,"9");




if (list == null || list.size() == 0) {
return null;
}

session = levelFacade.getSession();
Transaction tx = session.beginTransaction();
conn = session.connection();
conn.setAutoCommit(false);
String name = updateData(tx, session);

if (name.equals(Constants.FIALURE)) {
return null;
}

insertData(list, conn, session,versionNumber);

} catch (BiffException e) {
e.printStackTrace();
Alert.error("操作失败", "操作失败", "/pages/common/error.jsp",Alert.DIALOG_WINDOW, null);
return null;
} catch (IOException e) {

e.printStackTrace();
Alert.error("操作失败", "操作失败", "/pages/common/error.jsp",Alert.DIALOG_WINDOW, null);
return null;

} catch (SQLException e) {
Alert.error("操作失败", "操作失败", "/pages/common/error.jsp",Alert.DIALOG_WINDOW, null);
e.printStackTrace();
return null;
} finally {

session.flush();
session.clear();

close();
}
//Alert.error("操作成功", "操作成功", "/pages/common/success.jsp",Alert.DIALOG_WINDOW, null);
//this.getRequest().setAttribute("MESSAGE", Constants.SUCCESS);

return Constants.SUCCESS;

}


/**
* 关闭连接
*/
private void close() {
try {
if (sult != null) {
sult.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}

} catch (SQLException e) {
e.printStackTrace();
}
}

要让得打jxl的jar包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值