zoukankan      html  css  js  c++  java
  • 2013年工作中遇到的20个问题:221-240

    221.Eclipse下的Tomcat部署总是旧的文件。
    比如今天是9号,发布的文件却一直是8号的。
    最终,删除Tomcat重新部署还是不行。
    解决办法是:重启Eclipse后,第2天来重新发布就好了。

    222.单元测试搞混了。
    以前专门写了针对SpringMVC+Spring+Mybatis架构的单元测试基础类。
    现在有个就项目MVC框架用的是Struts2,这时Service还可以用以前的那个,而测试Action就不行了。
    所以,需要重新学习和实践单元测试Struts2.

    223.Apache POI获取Excel单元格的行数和列数、Sheet个数。

    int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();//获得总列数
     int rowNum=sheet.getLastRowNum();//获得总行数
      int sheetNum = templateWorkbook.getNumberOfSheets();//sheet的个数
     



      一段时间不弄POI,API好多都忘记了。
     
     
    224.SQLServer迁移到MySQL。
    SQLServer->Access->MySQL
    这种方式存在的问题:数据库表名大小写存在问题,字段的类型不够准确,比如varchar转成了longtext。
    需要手动修改不少数据库设计。

    225.Hibernate多数据源切换。
    public Session getSessionByProjectId(int projectId);
    不同的项目返回不同的数据库Session。
    其它地方都是好的,今天实现新功能的时候发现Session切换不成功。
    后来,发现是事务引起的问题。
    @Transactional(value = "project", readOnly = false, propagation = Propagation.REQUIRED)
    public void method();

    method内部有多个dao,有操作固定数据库db的dao,有根据projectId切换session的dao。
    后来,为了寻找错误原因,仅仅写了个只包含getSessionByProjectId一个方法调用的测试方法,通过了,
    进而推断出是事务的问题。

    现在,是分2个方法来实现事务,虽然不是最好的,却是最方便的。

    public void method(){
     method1();
     method2();
    } 
    
    @Transactional(value = "project", readOnly = false, propagation = Propagation.REQUIRED)
     method1();
     
     @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
     method2();
     
    



    226.重写优于重构。
    项目中有个需求是根据一个具有父子关系的表结构构造一个Tree,由于原来的代码看起来很难懂,
    加上最近需求发生大量变更,在原有代码基础上不断修改的过程中,总是有点小问题。
    递归,循环,判断很混乱。
    最后,决定重写,1天时间写好并测试通过。

    227.更新某个字段为null的行。
    UPDATE TSide set tags="mTags" where tags is null;
    在MySQL Front的SQL编辑器中中,null和NULL都给的是“关键字”颜色。
    应该用小写的null。

    228.Linux杀死Java进程。
    Linux命令:killall用于杀死指定名字的进程(kill processes by name)。
    我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,
    而killall把这两个过程合二为一,这真是一个太好用的命令了。

    同事Linux机器上的Eclipse卡死了,啥也不能干,只能强制删除。
    我以前只知道用kill,每次还必须先知道进程id,现在有了更好的方法。
    在帮助别人的过程中,也学习到了新的东东。

    229.Tomcat部署后启动,经常提示找不到某个类,实际上这个类明明存在,只能删除然后重新发布项目。
    目前不知道根本原因是啥。

    230.滥用Hibernate。
    根据id获取公司信息,咋搞这么复杂呢?
    改进后代码:

    public TcompanyInfo getCompanyInfo(int id) {
      TcompanyInfo info = super.get(id);
      return info;
     } 
    


    原始代码:
     

    public List<CompanyBean> getCompanyInfoByID(int id) {
            List<CompanyBean> list = new ArrayList<CompanyBean>();
            try {
                Session session = getCurrentSession();
                String querySql = "";
       //Windows切换到Linux,表名区分大小写后,SQL语句报语法错误
                querySql = String.format(
                        "Select * from TComapnyInfo where cID = %d ", id);
                Query query = session.createSQLQuery(querySql);
                List<Object[]> objList = query.list(); 
    
                int size = objList.size();
                for (int i = 0; i < size; i++) {
       //这种代码太难维护了
                    CompanyBean cb = new CompanyBean();
                    cb.setCompanyID(Integer.parseInt(objList.get(i)[0].toString()));
                    cb.setCompanyName(handleNullObject(objList.get(i)[1]));
                    cb.setLogoURL(handleNullObject(objList.get(i)[2]));
                    list.add(cb);
                } 
    
            } catch (HibernateException e) {
                e.printStackTrace();
            }
            return list;
        }
     
    



    231.一个奇怪的数据库问题。

    // String oldSql =
       // "select ct.id as templateId,ct.chartTemplate,ct.description,ct.templateCode,ta.id as authId,ta.auth,ta.projectId
     from chartTemplate ct left outer join templateAuth ta on ct.templateCode = ta.templateCode "
       // + " and ta.projectId=:projectId";
     String sql = "select ct.id ,ct.chartTemplate,ct.description,ct.templateCode,ta.id as authId,ta.auth,ta.projectId 
    from chartTemplate ct left outer join templateAuth ta on ct.templateCode = ta.templateCode "
         + " and ta.projectId=:projectId";
       
     Session s = super.getCurrentSession(); 
    
     Query query = s.createSQLQuery(sql);
     query.setParameter("projectId", tvo.getProjectId());
     List<Object[]> list = query.list();
       
    
    
     使用oldSql在SQLServer中,没有问题,在MySQL中报异常。
    九月 26, 2013 2:34:47 下午 org.hibernate.type.NullableType nullSafeGet
    INFO: could not read column value from result set: id; Column 'id' not found.
    九月 26, 2013 2:34:47 下午 org.hibernate.util.JDBCExceptionReporter logExceptions
    WARNING: SQL Error: 0, SQLState: S0022
    九月 26, 2013 2:34:47 下午 org.hibernate.util.JDBCExceptionReporter logExceptions
    SEVERE: Column 'id' not found. 

    把“select ct.id as templateId”改为"select ct.id"就可以了。

    232. Hibernate项目的数据库迁移问题。
    不能在MySQL下运行,原来是在SQLServer下的。

    select projectName,
      cast(DATEPART(year, visitTime) as varchar) +'-'+ cast(DATEPART(month, visitTime) as varchar)as month
     from visitLog
     



     用了Hibernate却不能顺利迁移到MySQL,对Hibernate真是一个侮辱啊!
     

    233.日期转换功能通过SQL脚本还是通过写程序来实现?
     cast(DATEPART(year, visitTime) as varchar) +'-'+ cast(DATEPART(month, visitTime) as varchar
     象这种功能,写成java函数多好?
     "2011-08-11 11:22:43"转换成“2011-08”写成java函数多好啊!!!
     
    234.数据库表名硬编码。
    Windows下表名是不区分大小写的,而Linux下是区分的。
    因此,在SQL中表名没有严格按照大小写,导致迁移出错。

    表名不区分大小写的根本原因:Windows的文件是不支持大小写区分的,而Linux支持。

    235.CSDN文章分类。
    “小雷网”分类下有10篇文章,我现在不想要这个分类了。
    原来的做法是,编辑每一篇文章,取消该文章的“小雷网”分类。
    好的做法是:直接删除“小雷网”分类,系统会自动把所有该分类下的文章移除该分类。
    (级联操作)

    236.定位问题的方法。
    Hibernate报了一个错误Could not parse mapping document from input stream。
    下面是打印的信息:
    INFO: Mapping class: * -> TProjectChart
    九月 27, 2013 11:28:40 上午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
    INFO: Mapping class: * -> TProjectKeyword
    九月 27, 2013 11:28:40 上午 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
    INFO: Mapping class: * -> treport
    九月 27, 2013 11:28:40 上午 org.hibernate.util.XMLHelper$ErrorLogger error
    SEVERE: Error parsing XML: XML InputStream(5) 元素内容必须由格式正确的字符数据或标记组成。
    经过分析,应该是Hibernate配置文件出错导致的。
    看打印信息,应该是treport.hbm.xml这个配置文件附近的。
    果然,是treport的下一个配置文件tside.hbm.xml存在语法错误。

    之所以没有报错,是因为“语法错误是因为有版本冲突导致的”
    <<mine r27
    xml校验器,没有给出错误提示。

    237.PowerDesigner 主键ID不能复用问题。
    当设置主键后,主键ID不能在其他表中引用。
    将在表设计的空白处右击,在菜单中选择"Model Options”,点掉Unique Code 前的复选框!
    上大学学习PowerDesigner的时候遇到这个问题了,今天新人同事在群里问这个,我就顺便答复了。

    238.分页功能维护一份sql。
     List  list();
     Integer count();
     2个函数最好维护一份sql代码。
     这2个分页的子功能,大部分代码是一致的,尽可能只维护一份相同的sql,如构造通用的commonSql。

    239.字符串拼接的“引号”问题。

    Query query = session.createQuery(hql);
       if (projectName != null && !projectName.trim().equals("")) {
        query.setParameter("projectName", "%'" + projectName + "'%");
       }
       



    正确的写法是 query.setParameter("projectName", "%" + projectName + "%");
    不需要那个“画蛇添足的引号”!!

    查找count的时候也不需要设置分页参数。
    query.setFirstResult((pageNo – 1) * pageSize);
    query.setMaxResults(pageSize);
    这也是“复制粘贴”引起的问题。
    偷懒是可以的,“复制粘贴”这种偷懒的方法就太差劲了,还是要多动动脑子。

    240.JS获取页面某个区域的表单参数。
    //获取某一个div下的所有参数

    function buildUpSearchParam(divId){
     var param = {};
     param["currentPage"] = 1;
     var paramInputs = $(":text" , $("#" + divId));
     for(var i=0;i<paramInputs.length;i++){
      param[paramInputs[i].id] = paramInputs[i].value;
     }
     return param;
     }
       



    <div class="Trend_Rank" //id="paramDiv",id不应该放在这里,这个div包含了2个table>
     <table width="50%" id="paramDiv" >
     </table>
     
     //这个table,表单组件自动插入了分页的按钮等,这样会多了<input type="button" value="goTo">。
     导致向后端发送参数的时候会多发送1个project.goTO参数,project这个对象却没有这个属性,
     出现OGNL没有这个属性的异常。
     <table>
     
     </table>
     
    </table>

    相关阅读

    工作问题 http://blog.csdn.net/FansUnion/article/category/1334371

    原文参见:http://fansunion.cn/articles/2605

  • 相关阅读:
    C++11 二叉堆
    OpenCV --- 实现两幅图像并排合并(ROI)
    OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸
    Opencv --- 图像像素遍历的各种方法
    Ubuntu系统的安装(虚拟机) 并配置C/C++编译器
    在Ubuntu下编译安装nginx
    【OpenCV3】threshold()函数详解
    MFC 剪切板的使用、线程介绍
    C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构
    【OpenCV3】cvRound()、cvFloor()、cvCeil()函数详解
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463572.html
Copyright © 2011-2022 走看看