每天学到的知识点(随时更新)

1.Java调用imp/exp 导入数据库数据(windows)

String   commandline   =   "imp   "+userName+"/"+userPwd+"   file=e:/zj.dmp full=y " ;
  Process   progchmod=null;
  try {
   progchmod=Runtime.getRuntime().exec(commandline);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

调用后,在任务管理器中,有一个imp的进程.imp进程完成后,数据导入完成.

 

2.Map的循环遍历

Set set = map.entrySet();
  for(Iterator it = set.iterator();it.hasNext();){
   Map.Entry entry = (Entry) it.next();
   String key = (String) entry.getKey();
   String value = (String) entry.getValue();
   }

 

3.关于DMP文件的导入

最近给客户做一个空库,测试用,发现导出的DMP文件8M,但是导入数据库后,却是200M。后来检查发现,我是在原有的数据库上,清空表数据。虽然数据清除了,但是里面初始大小没有清除,因为初始化的大小是随着数据量变大而变大的。

tablespace NNC_DATA01
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 13M   
    minextents 1
    maxextents unlimited
  );

initial 初始化的时候,可能是64K,后来变化到13M,所以在重做数据库时,要把initial 也修改。

 

4.JSP下载文件方式一

后台生成文件后,通过前台JSP界面下载,使用流的方式。也可以用过href的方式来下载,不过不是很安全。

//下载文件。
String filePath = (String)request.getAttribute("filePath");//获得文件的相对路径
if(filePath!= null){
 String fileName = filePath.substring(filePath.lastIndexOf("\\")+1);//获得文件的名称
 InputStream in  = null;
 try{
  byte b[]= new byte[500];
  File fileload=new File(filePath);
  response.setContentType("application/octet-stream");
  response.setHeader("Content-Disposition","attachment;filename=" + fileName);
  in=new FileInputStream(fileload);
  in = new BufferedInputStream(in);
  while ((in.read(b))!=-1) {
   response.getOutputStream().write(b);
  }
  out.clear();
  out = pageContext.pushBody();
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  try{
   if(in != null){
    in.close();
   }
  }catch(Exception e){
   e.printStackTrace();
  }
 } 
}

 

 

5.URL传参中文乱码问题(jsp下载文件方式二)

首先澄清一点的是,在URL中传递参数的话,设置过滤器也没用.在URL中传递参数,是通过HTTP报头来传递的.并不是类似于通过表单来传递,表单中传递的参数是在HTTP中的BODY中传送的.而设置字符过滤器只能起到过滤HTTP中BODY中的参数.而TOMCAT默认是ISO8859-1的编码方式,所以你在URL中传递过去后就是乱码了.而且过滤器也不管用了.
解决方法.直接改变TOMCAT的默认字符编码方式:
tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码 
需在服务器server.xml中配置对应的端口中配置编码方式即可.例如: 

  <Connector port="8080" 
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
  enableLookups="false" redirectPort="8443" acceptCount="100" 
  debug="0" connectionTimeout="20000" 
  disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/> 

中加入 useBodyEncodingForURI="true" URIEncoding="UTF-8" 就可以了.

在后台生成excel文件后,前台一直通过js就可以实现下载文件。

例如:window.open("http://xxx:9999/suifenhe/export/中文名称.xls"); 或者 window.local.href = "xxxxx.xls"

 

 

6.JSP下载文件方式三

直接用过struts2下载文件。这样的好处就是不生成临时文件。以上的两种方法是生成临时文件,不便于管理。

因为不生成临时文件,所以在struts.xml的配置文件中,就不用写result的返回结果,action直接返回null就行了。

例如:struts.xml的配置

<action name="amountEntStatisticsExport1"   class="com.ninetowns.statistics.action.StatisticsExportAction"   method="getAmountByEntExcel1">
</action>

在action中生成excel文件,下面我以jxl为例

fileName = URLEncoder.encode(fileName,"UTF-8");

response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");

WritableWorkbook targetWWB = Workbook.createWorkbook(response.getOutputStream());

对excel的其他操作我就不写了......

targetWWB.write();
targetWWB.close();

不需要写response.getOutputStream().close()的关闭方法。

当在前台点击下载按钮时,会自动弹出下载框,并不生成临时文件。

如果要是想生成临时文件。返回文件生成的路径,然后前台在进行下载
File targetFile = new File(targetPath);
   targetFile.mkdirs();
   if (targetFile.exists()) {
    targetFile.delete();
   }

WritableWorkbook targetWWB = Workbook.createWorkbook(targetFile);

 

 

7.多个radio与一个radio区别

最近做项目遇到一个问题.就在有一个单选的时候,没有length属性.只有多个才有.后来发现.

只有一个radio 
document.form1.myid是个object
多个radio 
document.form1.myid是个object是个collection

所以在判断的时候,就需要这样写.

function isChecked(){
   var len = form1.chkSelf.length;
   var checked = false;
   if(isNaN(len)){
    if(form1.chkSelf.checked == true){
     checked = true; 
    }
   }else{
    for(i=0;i<len;i++){
     if(form1.chkSelf[i].checked == true){
      checked = true; 
      break;
     }
    }
   }
   if(!checked){
    alert("请选择。");
   }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值