java项目,我上传dbf文件,解析文件数据保存到数据库里,数据量太大,速度太慢
java项目,我上传dbf文件,解析文件数据保存到数据库里,这个dbf大约有5万行数据,每一行数据有200列,这样每一格是数据库里的一条数据,我现在写的是5万为第一个fo...
java项目,我上传dbf文件,解析文件数据保存到数据库里,这个dbf大约有5万行数据,每一行数据有200列,这样每一格是数据库里的一条数据,我现在写的是5万为第一个for循环,每二百行处理一次(大约4万条数据),这是第二个for循环,批量保存到数据库里,花费了大约1.5小时,有没有什么办法提高效率,并且保证不会内存溢出?
展开
1个回答
展开全部
您好,
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里拿输入流,将刚生成的文件写到客户端,也就是多一个文件流写入的过程。
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里拿输入流,将刚生成的文件写到客户端,也就是多一个文件流写入的过程。
追问
导入,保存到数据库啊!!!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询