项目实战(二)后台批量插入数据库,前台进度条显示进度

本功能后台通过List批量插入数据库,前台通过ajax调用,动态显示进度条。

先上传运行截图页面很丑陋,没美工。嵌套bootstrap的进度条。


前台代码:

点击button按钮,进行后台的数据库批量上传

<button οnclick="ass()">导入</button>
	<!-- <a href="#" class="btn btn-danger btn-xs" οnclick="ajax()">进度条</a>-->
		<hr />
<!-- 进度条的显示 -->		
	<div class="progress progress-striped active" id="proges">
        <div id="prog" class="progress-bar" role="progressbar" aria-valuenow="" aria-valuemin="0" aria-valuemax="100" style="width:0%;">
            <span id="proglabel">正在启动,请稍后......</span>
        </div>
    </div>  
</div>

Ajax进行进度条的更新和后台的数据交互:

<script type="text/javascript">
 var t;
 var time = 50;
 var timer_is_on=1;
 function ass(){
 			if(timer_is_on == 1){
 			t=setTimeout(function(){ass()},500);
 			ajax();
 		}else{
 			clearTimeout(t);
 			timer_is_on=1;	
 		}
 	
 }
   function ajax(){
   	
   	var xmlhttp;
   	if (window.XMLHttpRequest)
   	   {// code for IE7+, Firefox, Chrome, Opera, Safari
   	   xmlhttp=new XMLHttpRequest();
   	   }
   	 else
   	   {// code for IE6, IE5
   	   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   	   }
   	xmlhttp.onreadystatechange = function(){
   		if (xmlhttp.readyState==4)
   	    {
   	    	//alert(xmlhttp.status);
   	    	if(xmlhttp.status == 200){
   	    		
   	    		//alert(xmlhttp.responseText+'~~~~');
   	    		if(xmlhttp.responseText == 100){
   	    			$("#prog").removeClass("progress-bar-success").css("width","0%").text("已经成功");
   	    			clearTimeout(t);
   	    			timer_is_on=0;
   	    			
   	    		}
   	    		if(xmlhttp.responseText < 101){
   	    			startProgerss(xmlhttp.responseText);
   	    		}
   	    	}
   	    }
   	}
   	xmlhttp.open("post", "${pageContext.request.contextPath}/progress.action");
   	xmlhttp.send(null);
}
   function reset( ) {
       //value = 0
         $("#prog").removeClass("progress-bar-success").css("width","0%").text("等待启动");
         //setTimeout(increment,5000);
     }

   function startProgerss(value){
    if(value<=100){
       	$("#prog").css("width",value + "%").text(value + "%");
   	 }

       else{
           setTimeout(reset,3000);
           return;
       }
   }
</script>

后台的实现:

后台代码:
后台用的springmvc+mybatis,插入数据库是采用List的批量插入,我们将整个List拆分成100份,注意此时的数据量非常大,百万级。
类中定义的:

//传值的索引
	public static int index;
	
	public static List<Customer> list = null;

后台:

//前台调用更新进度条
	@RequestMapping(value="/progress.action")
	@ResponseBody
	public int progress(HttpServletResponse response,HttpServletRequest request){
		
		if(flag == 1){
			flag = 0;
			insert(null, response, request);
			return index;
		}else{
			return index;
		}
	}
	
	
	//导入功能
	@RequestMapping(value = "/insert.action")
	@ResponseBody
    public void insert(Model model, HttpServletResponse response,HttpServletRequest request) {  
		try {
			
			list = toData.paraseExcel(pathAll);
			//输出文件的路径
			System.out.println(pathAll);
			int length = list.size();
			System.out.println(length);
			int listArray = list.size()/100;
			if(index >=100){
				index = 0;
			}
			//int index=0;
			while(index<100){
	    		if(index<99){
	    			toData.proDisp(list.subList(index*listArray, (index+1)*listArray));
	    			index++;
	    			
	    			
	    		}else{
	    			toData.proDisp(list.subList(index*listArray, list.size()));
	    			index++;
	    			list.clear();
	    			flag = 1;
	    		}
	    		
	    	}
		
			System.out.println("导入ok!");
		
		} catch (Exception e) {
			
			e.printStackTrace();
			
		}
		
		
    }  
















  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值