先存进缓存数据库中,如redis等。然后写定时任务批量插入数据库
❷ Java 批量大文件上传下载如何实现
解决这种大文件上传不太可能用web上传的方式,只有自己开发插件或是当门客户端上传,或者用现有的ftp等。
1)开发一个web插件。用于上传文件。
2)开发一个FTP工具,不用web上传。
3)用现有的FTP工具。
下面是几款不错的插件,你可以试试:
1)Jquery的uploadify插件。具体使用。你可以看帮助文档。
❸ java如何快速处理大数据
文件读取:首先是一个文件上传,数据入库,10-200万条不等,这里主要考虑到一次性读取,JVM分配出来的栈内存不一定会够(个人对内存这一块还是处于一知半解的状态,所以比较谨慎,若诸位大神有好的认知,希望评论留下地址分享一下),是依行读取数据,设定一个批量值,当读取的数据达到一定量之后,执行批量入库操作,清空集合,再接着读取。
//读取文件内容
while((s = br.readLine())!=null){
//判断是否达到单次处理量
if(num%leadingNum==0&&num!=0){
int a = stencDao.insertBatch(listBean);
if(a!=leadingNum){
flag = false;
}
//清空集合
listBean.clear();
}
String value = s.trim();
//将读取到的内容放入集合中
if(!value.equals("")){
StencilCustomer bean = new StencilCustomer();
bean.setCustomerPhone(value);
bean.setLinkStencilId(id);
listBean.add(bean);
num ++;
}
}
数据处理:这里的思路也是将数据小化然后处理,这里使用了多线程,设定单个线程处理量,然后开启多个线程处理,这里需要考虑你的服务器的承载能力,如果线程开得太多了,处理不过来,会出现蹦死的情况。例如200万数据,我开了20个线程,单个线程处理600条。
//建立一个线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(minTaskNumber),
new ThreadPoolExecutor.DiscardOldestPolicy());
//当正在执行的线程数达到最大执行线程数的时候等待
boolean flag = true;
while(flag){
Thread.sleep(1000);//休眠2ms查询一次
int c = threadPool.getActiveCount();//线程池中活动中的线程数量
if(c<maxTaskNumber){
flag = false;
}
}
上面的代码是我对线程池的一个控制,控制服务器一直最大线程执行,Thread.sleep(1000);用while的时候,这个休眠最好不要去掉,去掉之后很影响执行效率
❹ 怎么利用JAVA导入大数据量的文本文件数据到
首先从文件中读取数据,每当读完一条纪录是,把它转换成oracle的插入语句。你可以执行,也可以存在一个大字符串里,最后一起执行
❺ 从excel表格读取数据用Java代码实现批量上传写入数据库
public static List<Student> parseExcel(){
//解析excel文件 获取数据
//将每行数据当作一个Student对象放入list集合
List<Student> list = new ArryList<Student>();
...
return list;
}
public static void updateDataBase(Student stu){
//更新数据库 将Student对象插入数据库
...
}
public void main(String[] args){
List<Student> list = parseExcel();//读取excel
for(Student stu:list){//遍历集合向数据库插入数据
updateDataBase(stu);
}
}
大致的写了下 具体实现应该没问题吧?
❻ java实现文件批量上传是否需要将文件重命名(包括图片,word文档,录音),保存到项目中需要注意哪些
要看复情况:
1. 若上传文件直接保存成制数据库中的blob字段,那就无所谓文件名了;
2. 若上传文件保存到服务器的某个文件夹中,那么为了避免重名,上传的文件一定要重命名,做法一般是:首先生成一串不会和其他文件相同的名称,例如序列的值、上传时间(精确到毫秒)等;其次,将上传的文件保存到该文件名中;最后,向数据库中记录原上传的文件名、以及生成的文件名。这样,向用户显示的是用户上传的名称,但下载时按数据库中的记录按图索骥即可。
❼ 用java完成图片多张批量上传的功能,还有就是后台的应该怎么处理上传的照片。
/*
*图片上传参数
*/
private File[] images;
private String[] imagesFileName;
private String[] imagesContentType;
加get set方法
req=ServletActionContext.getRequest();
//增加商品字段到数据库
Proct proct=new Proct();
ProctCategory proctCategory=null;
ProctCategoryBiz pcb=new ProctCategoryBizImpl();
System.out.println("third is:"+third_id+"ok");
if(third_id.equals("")){
proctCategory=pcb.getCategory(Integer.parseInt(second_id));
}else{
proctCategory=pcb.getCategory(Integer.parseInt(third_id));
}
proct.setCategory(proctCategory);
proct.setName(name);
proct.setPrice(Double.valueOf(price));
proct.setStock(Integer.parseInt(stock));
//上传图片到服务器
String fileType = null;
String fileName = "";
if(pb.addProct(proct)){
for (int i = 0; i < images.length; i++) {
fileType = imagesFileName[i].substring(imagesFileName[i]
.lastIndexOf("."));
fileName = (new Date().getTime() + i + 1) + fileType;
File imageFile = new File(ServletActionContext.getServletContext()
.getRealPath("/files")
+ "/" + fileName);
(images[i], imageFile);
addImages("files/"+fileName);
System.out.println("路径"+imageFile);
}
req.setAttribute("msg", "商品添加成功!");
return "success";
}else{
req.setAttribute("msg", "商品添加失败!");
return "input";
}
❽ java项目,我上传dbf文件,解析文件数据保存到数据库里,数据量太大,速度太慢
您好,
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里拿输入流,将刚生成的文件写到客户端,也就是多一个文件流写入的过程。