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

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("请选择。");
}
}

你可能感兴趣的:(更新)