java项目,我上传dbf文件,解析文件数据保存到数据库里,数据量太大,速度太慢

java项目,我上传dbf文件,解析文件数据保存到数据库里,这个dbf大约有5万行数据,每一行数据有200列,这样每一格是数据库里的一条数据,我现在写的是5万为第一个fo... java项目,我上传dbf文件,解析文件数据保存到数据库里,这个dbf大约有5万行数据,每一行数据有200列,这样每一格是数据库里的一条数据,我现在写的是5万为第一个for循环,每二百行处理一次(大约4万条数据),这是第二个for循环,批量保存到数据库里,花费了大约1.5小时,有没有什么办法提高效率,并且保证不会内存溢出? 展开
 我来答
山水阿锐
推荐于2016-06-02 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
您好,
ResultSet得相关参数代码片断,下面的代码对类型判断和转换还不全面,如果还有其他字段请自行添加
Java代码
try {
ResultSetMetaData meta = rs.getMetaData();
int columnCount = meta.getColumnCount();
strutName = new String[columnCount];
strutType = new byte[columnCount];
rs.last();
int itemCount = rs.getRow();
rs.first();
data = new Object[itemCount][columnCount];
for (int i = 1; i <= columnCount; i++){
int type = (byte) meta.getColumnType(i);
//2是BigDecimal
if(type == 2){
strutType[i-1] = DBFField.FIELD_TYPE_N;
}
//12是String
else if(type == 12){
strutType[i-1] = DBFField.FIELD_TYPE_C;
}
//91是java.util.Date
else if(type == 91){
strutType[i-1] = DBFField.FIELD_TYPE_D;
}
strutName[i-1] = meta.getColumnName(i);
}
for (int i = 0; rs.next(); i++){
for (int j = 0; j < columnCount; j++){
Object da = rs.getObject(j+1);
if(da instanceof BigDecimal){
Double d = Double.parseDouble(da.toString());
data[i][j] = d;
}else{
data[i][j] = da;
}
}
}
}catch (Exception e){
e.printStackTrace();
}finally{
rs = null;
}

上面采用的是传统方法进行导出dbf文件,如果大数据量导出时,就要先将文件生成到服务器端,然后从response里拿输入流,将刚生成的文件写到客户端,也就是多一个文件流写入的过程。
追问
导入,保存到数据库啊!!!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式