struts环境下,从Jsp页面上导入excel文件,保存到数据库之中

liqiang208 2008-05-11 11:30:37
导入的量也不是很大,就是三千多条。
问题是每一条数据都会进行有效性检查(跟数据库里的数据匹配),如果其中一条数据有错,则全部rollback。
所以效率很低。
大家有没有好的解决办法?
谢了
...全文
803 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanzhiyong1234 2010-12-31
  • 打赏
  • 举报
回复
最好是把数据库中的数据建成索引文件,然后用EXCEL中的数据到索引文件里去匹配,这样效率会好些。
liqiang208 2008-05-26
  • 打赏
  • 举报
回复


看来第一个办法比较合适一些
shuai45 2008-05-26
  • 打赏
  • 举报
回复
导入excel目前都有现成的,先下载poi的包,网上有很多方法.
yaray 2008-05-12
  • 打赏
  • 举报
回复
1. 将客户端Excel文件上传到服务器,临时保存下来;

2. 查询数据库(以满足数据有效性检查,数据封装后待用),关闭该数据库连接(节约数据库连接资源:及时释放连接)

3. 分析Excel文件,并使用查询获得的封装数据进行有效性检查:
存在非法数据则删除临时文件,返回并提示数据非法

4. 全部数据合法时,获得数据库连接并将数据批量保存到数据,最后提交;中间有异常则回滚;

5. 最后删除临时文件
  • 打赏
  • 举报
回复
路过,关注中
老紫竹 2008-05-12
  • 打赏
  • 举报
回复
问题是每一条数据都会进行有效性检查(跟数据库里的数据匹配),如果其中一条数据有错,则全部rollback。

解决方法有2个

1 把要匹配的数据提前读取到内存,用Map保存,匹配时就不必每次都读取数据库了

2 把所有数据全部放到数据库,在数据库里面用SQL语句进行校订,这个不难吧。 left join 的时候,会出现不匹配的为null的就是非法的数据
panxuan 2008-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gerenmajia 的回复:]
// 获取excel 文件
Form fm = (Form) actionForm;
FormFile formfile = fm.getUploadfile();
InputStream inputstream = formfile.getInputStream();
fm.clear();// 清空


InputStream is = new FileInputStream(fileName);
if (is != null && is.available() != 0) {
Workbook workBook = Workbook.getWorkbook(is);
Sheet[] sheetS = workBook.getSheets();
if (sheetS != null && sheetS.lengt…
[/Quote]
limon758 2008-05-12
  • 打赏
  • 举报
回复
每次把正确的记录保存到容器里
等出现错误rollback后,先去搜索容器,把容易的对的取出,再按照容器条数的下条开始继续取值
chenhongxin 2008-05-12
  • 打赏
  • 举报
回复
excel文件以附件形式上传到服务器
通过odbc(当时是win32环境),连接并读取数据从excel文件
通过上面得到的结果集,与数据库交互,执行校验
校验通过,结果集保存到数据库中
liqiang208 2008-05-11
  • 打赏
  • 举报
回复
请问在内存中操作可以吗?
省略去“上传”的步骤
椅子 2008-05-11
  • 打赏
  • 举报
回复
相同的功能,我是这么处理的:

excel文件以附件形式上传到服务器
通过odbc(当时是win32环境),连接并读取数据从excel文件
通过上面得到的结果集,与数据库交互,执行校验
校验通过,结果集保存到数据库中
gerenmajia 2008-05-11
  • 打赏
  • 举报
回复
// 获取excel 文件
Form fm = (Form) actionForm;
FormFile formfile = fm.getUploadfile();
InputStream inputstream = formfile.getInputStream();
fm.clear();// 清空



InputStream is = new FileInputStream(fileName);
if (is != null && is.available() != 0) {
Workbook workBook = Workbook.getWorkbook(is);
Sheet[] sheetS = workBook.getSheets();
if (sheetS != null && sheetS.length != 0) {
int sheetLen = sheetS.length;
for (int i = 0; i < sheetLen; i++) {
// 当前sheet的行数
int rowLens = sheetS[i].getRows();
// 当前sheet的最大列数
int colLens = sheetS[i].getColumns();
int beginRow = skipRowNumber;
int beginCol = skipColNumber;
String cellValue = null;
String[] rowArray = null;
if (rowLens - beginRow > 0 && colLens - beginCol > 0) {
for (int row = beginRow; row < rowLens; row++) {
rowArray = new String[colLens - beginCol];
for (int col = beginCol; col < colLens; col++) {
Cell cell = sheetS[i].getCell(col, row);
if (cell != null) {

cellValue = cell.getContents();

}
rowArray[col] = cellValue;
}
}
recorderList.add(rowArray);
}
}
}
}
workBook.close();
}
is.close();




<html>
<html:form action="/Action.do?method=getUpload" method="POST" enctype="multipart/form-data">
<html:file property="uploadfile" size="80%" />
<input type="button" value="导 入" onclick="upload(this.form)" class="buttonGray">
</html:form>
</html>


81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧