工作中遇到的问题和解决办法10

07年6月20日 

今天做整合了,遇到几个技术问题,整理出来:

(1)javascript中怎么把字符转化成ascii码及怎么把ascii码转化成字符

<script>

function updatecheck(id)
    {         
             if(id=="1")
             {
                var fledtion ="";

               //获得fileEditionNumber的值,并且截取第1位(第1位是英文字母A-Z)
                var fileedition = document.forms[0].fileEditionNumber.value.substring(0,1);

              //获得fileEditionNumber的值,并且截取第1位以后的东西,可以看出来,fileEditionNumber是由英文字母 

A-Z+数字组成的

                var digitnumber = document.forms[0].fileEditionNumber.value.substring(1);
                if(digitnumber<99){
                    digitnumber++;
                    fledtion = fileedition ;
                }else{
                    digitnumber="00"; 

                   //将字符转化为相应的ASCII码
                    var fileeditionCode = document.forms[0].fileEditionNumber.value.charCodeAt(0);
                    fileeditionCode = fileeditionCode+1;

                   //将上面转化的ASCII码转换成相应的字符
                    fledtion = String.fromCharCode(fileeditionCode);
                }
                var edir = fledtion + digitnumber;
                //alert(edir);
                document.forms[0].fileEditionNumber.value = edir;       
             }
            
             if(id=="2")
             {
                var fileupdatenumber = document.forms[0].fileUpdateNumber.value;
                fileupdatenumber++;
                document.forms[0].fileUpdateNumber.value = fileupdatenumber;

             }
    }
 </script>  

<html:form action="略" method="post">

<table width="100%" height="25" border="0" cellpadding="0" cellspacing="0" class="font_14">
         <tr> 
          <td><div align="center">变更:</div></td>
           <td><input type="radio" name="update" value="1" onclick="javascript:updatecheck(this.value);"/>版本号   </td>
           <td><input type="radio" name="update" value="2" onclick="javascript:updatecheck(this.value);"/>修订号 </td>
          </tr>


          <tr>
           <td><div align="center">版本号:</div></td>
           <td ><input type="text" name="fileEditionNumber"  value="<%=fileEditionNumber%>"/></td>
         </tr>

         <tr>
           <td width="130"><div align="center">修订号:</div></td>
           <td><input type="text" name="fileUpdateNumber"  value="<%=fileUpdateNumber%>"/></td>
         </tr>
</table>

</html:form>

这就是解决问题的办法了。

(2)关于内存地址的问题(传说中的HashCode)

在我的DAO方法里,有这样的方法:

// 文件搜索的方法
 public List lunceFileList(LunceFileForm luncefile, int pageSize, int page)
   throws Exception {
  List luncefileList = new ArrayList();
  List values = new ArrayList();
  List retList = new ArrayList();
 
  String sql = " select vlune.fileId, vlune.fileName, vlune.upLoadDate, vlune.filePrincipal from Vluncefile vlune "
    + " where 1=1 ";
  if (luncefile.getFileName() != null
    && !"".equals(luncefile.getFileName())) {
   sql += " and vlune.fileName like ?";
   values.add("%" + luncefile.getFileName() + "%");
  }

  if (luncefile.getUpLoadDate() != null
    && !"".equals(luncefile.getUpLoadDate())) {
   sql += " and vlune.upLoadDate like ?";
   values.add("%" + luncefile.getUpLoadDate() + "%");
  }

Session session = this.getHibernateTemplate().getSessionFactory()
    .openSession();

  Query query = session.createQuery(sql);
  query.setFirstResult(pageSize * (page - 1));
  query.setMaxResults(pageSize);
  if (values.size() > 0) {
   for (int i = 0; i < values.size(); i++) {
    query.setString(i, values.get(i).toString());
   }
  }
  retList = query.list();

  if (retList.size() != 0) {
   for (int i = 0; i < retList.size(); i++) {
    LunceFileForm luncefile2 = new LunceFileForm();
    Object[] objs = (Object[]) retList.get(i);
    if (objs != null) {
     FileInfoVO fileInfo = new FileInfoVO();
     luncefile2.setFileId((new Integer(objs[0].toString())));// String转化为integer
     luncefile2.setFileName((String) objs[1]);
     luncefile2.setUpLoadDate((String) objs[2]);
     luncefile2.setUserName((String) objs[3]);

     luncefileList.add(luncefile2);
    }
   }
  }
  session.flush();
  session.clear();
  session.close();
  return luncefileList;
 }
这是我建的基于大概九张表的全文搜索视图,注意这段代码蓝色部分,就是我今天遇到的问题,一开始我没有写这行蓝色的代码,查出的数据就是一条,而且是完全相同的一条数据,我大汗。。。难道是辛苦建的视图出错了?回头检查了一下,没有错!Oh yes!!!

看来是程序错了。。。。单步调试,发现程序确实封装了想要的数据,但是为什么却显示相同的数据?问问吧,才知道,当我没写那行蓝色的代码时,封装的对象只new了一次的,当在循环里面,循环一次把数据加在这个内存地址里一次,这样下去,虽然循环了3次,但是却把先前循环出的数据给覆盖了,程序的单步调试是看不出来的!循环几次就覆盖几次,还都加在了List里面。。。。。最后得到的是循环N次的相同的N个数据!这段蓝色的代码必须写在循环体的里面!循环一次,就new一个对象,虽然new的对象名字相同,但是内存地址是不同的,再加在List里面就不会覆盖数据了,而且程序运行找的是内存地址,所以对象名字相同也不会有任何影响的!这就是传说中的hashcode,而且,每次只要重启java虚拟机,得到的内存地址也是不同的!

(3)顺便把java中字符和ascii码的转换

1、字符转换为ASCII值
char y=''a'';
int x = (int)y;
System.out.println(x);

2、ASCII值转换成字符
String aa=String.valueOf((char)13);

这是我们经理给我的方法,但是在这里我却用上面的javascript实现的,但是留着吧,以后一定会有用处,多学学没坏处。

你可能感兴趣的:(JavaScript,DAO,sql,虚拟机,工作)