从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包
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包