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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java项目,我上传dbf文件,解析文件数据保存到数据库里,数据量太大,速度太慢相关的知识,希望对你有一定的参考价值。

java项目,我上传dbf文件,解析文件数据保存到数据库里,这个dbf大约有5万行数据,每一行数据有200列,这样每一格是数据库里的一条数据,我现在写的是5万为第一个for循环,每二百行处理一次(大约4万条数据),这是第二个for循环,批量保存到数据库里,花费了大约1.5小时,有没有什么办法提高效率,并且保证不会内存溢出?

参考技术A 您好,
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里拿输入流,将刚生成的文件写到客户端,也就是多一个文件流写入的过程。追问

导入,保存到数据库啊!!!

本回答被提问者和网友采纳

java 将上传文件以二进制流保存在数据库表中的某个字段,怎么做啊?

当我选择一个文件,并且点上传,让它自动将这个文件,保存到oracle数据库,我的那个表的一个blog字段中。

不知道怎么做,好郁闷啊!
当一点上传,把选择的那个文件,可以是文本,可以是视频,反正什么都可以是,怎么保存到message表的text字段呢?这个字段是blob类型。求这个点击方法!详细注释下啊,谢谢啦,还有下载方法,怎么判断有附件?是否是text不为空就可以确定有?怎么下载?

楼主这是个不好的思路,不要把数据库当成“垃圾桶”,什么东西都往里扔,你应该在这个字段里存储你存放文件的信息,另外在本地文件夹里存放图片,视频之类大数据量的文件。
对一般大字段文件,采用字节流读取存储,底下是个读取的代码
Reader reader = rs.getCharacterStream("details");
StringBuffer strBuf = new StringBuffer();
if(reader!=null)
BufferedReader bufReader = new BufferedReader(reader);
String line;
while ((line = bufReader.readLine()) != null)
strBuf.append(line);
strBuf.append("\r\n");

bufReader.close();


判断是否有附件,你既然存储了路径,用File类的exist的方法就可以判断是否有该文件存在。。。。
参考技术A 我是用apache的commons-fileupload-1.2.1组件做的,通过表单收集数据.
其实text只是传了一个路径path给了服务器,服务器通过传过去的path来读取你上传的附件(用的是文件输入/输出流),所以只需要判断传过来的path是否存在就可以了(file.exists()方法可行)。
fileupload组件对数据流的格式化进行了封装,FileUploadServlet.parse(HttpRequest request)的方法可以从请求头中获得你的上传的数据流,保存过程就简单了。详细的请上网搜索关键字:apache fileupload。一定能找到你想要的资料。

以上是关于java项目,我上传dbf文件,解析文件数据保存到数据库里,数据量太大,速度太慢的主要内容,如果未能解决你的问题,请参考以下文章

求excel上传到服务器的java代码

从C#中的数据中删除特殊字符后如何将dbf文件中的数百万行数据上传到SQL Server

Java 上传解压zip文件,并且解析文件里面的excel和图片

使用Java读写dbf文件附源代码

使用Java读写dbf文件附源代码

springboot文件上传到本地电脑,项目目录,保存到数据库