每日记载内容总结29

1.struts下上传以及解析excel文件

jsp页面代码:

<form action="email_importExcel.do" method="post" enctype="multipart/form-data">
    <input type="file" size="30" name="uploadExcel" id="fileup"/>
<!--注意name要与后台对应 -->
    <br><br>
    <input name="up" type="button" value="Upload" onclick="onSubmit()"/>
</form>

action代码:

public File uploadExcel ;//页面传来的file
public String uploadExcelFileName ;//页面传来的file的名字
public String uploadExcelContentType ;//页面传来的file的类型
//以上三个在action里面get set之后可以直接获取。注意变量的名字,File类的变量与页面name一样,然后+FileName就是文件名 ,+ContentType就是文件类型
public String importExcel(){ 
      
        if (uploadExcel != null) {
            try {
//上传开始
                InputStream is = new FileInputStream(uploadExcel); 
                File file = new File(getAppPropValue("excel.email.path"));
                if (!file.exists()) {
                    file.mkdirs();
                }
                File excelPath =new File(getAppPropValue("excel.email.path")+ File.separator + uploadExcelFileName);
                if (excelPath.exists()) {
                    excelPath.delete();
                }
                // 创建一个输出流  
                OutputStream os = new FileOutputStream(excelPath);  
                //设置缓存  
                byte[] buffer = new byte[1024];  
                int length = 0;  
                //读取myFile文件输出到toFile文件中  
                while ((length = is.read(buffer)) > 0) {  
                    os.write(buffer, 0, length);  
                }  
                //关闭输入流  
                is.close();  
                //关闭输出流  
                os.close();
//上传结束
//读取文件开始                
                InputStream iStream = new FileInputStream(excelPath);
                Workbook wb = Workbook.getWorkbook(iStream); // 从文件流中获取Excel工作区对象(WorkBook)  
                Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet)  
                int ignoreRows = 1 ;
                emails = new ArrayList<Email>();
                if (sheet.getRows() > 0 && sheet.getColumns() > 0 ) {
                    for (int i = ignoreRows; i < sheet.getRows(); i++) { // 循环打印Excel表中的内容  
                        Email email= new Email();
                        String emailId = sheet.getCell(0, i).getContents();
                        String emStr =sheet.getCell(1, i).getContents();
                        if (StringUtils.isNotEmpty(emailId) && Integer.parseInt(emailId) > 0 && StringUtils.isNotEmpty(emStr)) {
                            email.setEmailId(Integer.parseInt(emailId));
                            email.setEmail(emStr);
                            email.setFirstName(sheet.getCell(2, i).getContents());
                            email.setLastName(sheet.getCell(3, i).getContents());
                            email.setCompany(sheet.getCell(4, i).getContents());
                            email.setPhone(sheet.getCell(5, i).getContents());
                            email.setDescri(sheet.getCell(6, i).getContents());
                            emailManager.addEmail(email);
                            emails.add(email);
                        }
                     } 
                }
            } catch (BiffException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }
            return SUCCESS ;
        }else {
            return INPUT ;
        }
        
    }
    

2.异常:java.io.FileNotFoundException:******(拒绝访问)

 File file = new File(fileName); 
 InputStream is = new FileInputStream(file);

如果fileName不是文件,而是文件夹,而且路径中存在这个文件夹,就是报上述异常。

把fileName路径指向文件即可

关于mkdir以及mkdirs:

mkdir:如果路径最底层的目录的上级目录不存在,则不会创建,也就是说只会创建一层文件夹,多层则不行
mkdirs:会按照路径创建出文件夹,每层都是文件夹.如果filePath指向的是文件,会创建(文件名.扩展名)的文件夹

3.lucene 多个field相同时 如
Field name1=new Field("name","zhangle",Field.Store.YES,Field.Index.TOKENIZED);
Field name2=new Field("name","liwei",Field.Store.YES,Field.Index.TOKENIZED);
  Field name3=new Field("name","wangwu",Field.Store.YES,Field.Index.TOKENIZED);
  在StandardAnalyzer分析器下,与
  Field name1=new Field("name","zhangle liwei wangwu",Field.Store.YES,Field.Index.TOKENIZED);
  是一样的

但是在获取域里面的值的时候,是有区别的
第一种返回的是数组
String[] catpaths = inSearcher.doc(scoreDoc.doc).getValues("name");
第二种返回的是字符串
String name = inSearcher.doc(scoreDoc.doc).get("name");

4.实时监控数据库变化 (来源:http://blog.csdn.net/winter13292/article/details/7466289)

使用mysql自带的功能监控数据库变化:

(1)打开数据库配置文件my.ini (一般在数据库安装目录)(D:MYSQL)

(2)在数据库的最后一行添加 log=log.txt

(3)重启mysql

(4)去数据库数据目录 (例如D:MYSQLdata) 你会发现多了一个log.txt文件,里面就是记录数据库变化

5.mybatis遇到的问题以及解决方案(来源:http://blog.csdn.net/nich002/article/details/8817238):

(1)Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'education' in 'class esd.bean.Personal'

<!-- 这个属性是多余的,在对应的bean类中没有对应的字段,删除后OK -->  
            <if test="education != null and education != ''">  
                education = #{education},  
            </if>

解决方法:

在mapper配置文件中删除多配置的属性/或则在自己的bean类中补全该字段

(2)<if>标签中不支持 && 符号

<if test="code != null && code !=''">  
                code=#{code},  
</if> 
<!-- 要改为-->
 <if test="code != null and code !=''">  
                code=#{code},  
 </if>  

(3)同一sql配置文件中id重复

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for GeographyMapper.getByCode
两个sql语句的id重复了,就会报这个错.

(4)没有在configuration.xml配置对应的sql配置文件

错误:

Error updating database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ***Mapper.*** Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ***Mapper.***
解决方法:

在configuration.xml配置文件中引用对应的sql配置文件

    <mappers>  
        <mapper resource="esd/db/mapper/ResumeMapper.xml" />  
    </mappers>  
原文地址:https://www.cnblogs.com/cuiyf/p/3492390.html