yunye 的 JavaBlog

          @see codemouse

          統(tǒng)計(jì)

          留言簿(1)

          閱讀排行榜

          評(píng)論排行榜

          求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么!

          ?

          我想在 JSP 頁(yè)面中向數(shù)據(jù)庫(kù)表 staff 插入一條記錄:頁(yè)面能跳轉(zhuǎn)到 addStaffSuccess.jsp

          刷新頁(yè)面時(shí),添加的記錄能在頁(yè)面中顯示出來(lái),我還以為成功了,于是我想通過(guò)企業(yè)管理器打開(kāi)數(shù)據(jù)庫(kù)表看是不是數(shù)據(jù)庫(kù)表更新了,發(fā)現(xiàn)數(shù)據(jù)庫(kù)表不顯示數(shù)據(jù),我插入的是第二條記錄,于是我讓它返回首行,首行正常顯示。我用查詢分析器查詢 Staff 表的數(shù)據(jù),一直是“正在執(zhí)行批查詢狀態(tài) ……… ”說(shuō)明我對(duì)數(shù)據(jù)庫(kù)的操作影響到了數(shù)據(jù)庫(kù),但是出了我不知道的異常或錯(cuò)誤,但是又不報(bào)錯(cuò),我不知道怎么去找原因。忘了,當(dāng)我停止 tomcat 時(shí),數(shù)據(jù)表正常顯示,但插入的數(shù)據(jù)沒(méi)有顯示在表里,說(shuō)明沒(méi)有插入。難道是我沒(méi)停止 tomcat 前,數(shù)據(jù)庫(kù)一直在更新么?

          我用的環(huán)境是, eclipse3.2+Myeclipse5.5 + MS SQL server2000+ tomcat5.5

          我添加了 struts hibernate 支持,各個(gè)持久化類和 DAO , 是通過(guò)映射后 hibernate 自動(dòng)生成的。 Action 代碼是我寫(xiě)的,不足道有錯(cuò)沒(méi),請(qǐng)指正。

          ??? 添加后,返回原頁(yè)面,顯示了添加的信息:(但數(shù)據(jù)庫(kù)沒(méi)更新,郁悶!

          ?

          數(shù)據(jù)庫(kù):

          staff (staffid,// 主鍵

          staffname,//not null

          password,//not null

          departmentname;// 允許空

          sex;// 允許空

          email;// 允許空

          mobile;// 允許空 )

          StaffDAO 里面:(這是 hibernate 映射數(shù)據(jù)庫(kù)表后自動(dòng)生成的方法)

          ???? public void save(Staff transientInstance) {

          ?????? log .debug( "saving Staff instance" );

          ?????? try {

          ?????????? getSession().save(transientInstance);

          ?????????? log .debug( "save successful" );

          ?????? } catch ( RuntimeException re) {

          ?????????? log .error( "save failed" , re);

          ?????????? throw re;

          ?????? }

          ??? }

          AddStaffAction 里面:

          ?? public ActionForward execute(ActionMapping mapping, ActionForm form,

          ?????????? HttpServletRequest request, HttpServletResponse response) {

          ?????? // 獲得表單信息;

          ?????? AddStaffForm addStaffForm = (AddStaffForm) form; // TODO Auto-generated method stub

          ?????? String staffid = addStaffForm.getStaffid();

          ?????? String staffname = addStaffForm.getStaffname();

          ?????? String departmentname = addStaffForm.getDepartmentname();

          ?????? String sex = addStaffForm.getSex();

          ?????? String password = new String( "000000" );

          ??????

          ?????? // 轉(zhuǎn)換字符格式

          ?????? try {

          ?????????? ?staffid = new String(staffid.getBytes( "ISO-8859-1" ), "GB2312" );

          ?????????? ?staffname = new String(staffname.getBytes( "ISO-8859-1" ), "GB2312" );

          ?????????? ?departmentname = new String(departmentname.getBytes( "ISO-8859-1" ), "GB2312" );

          ?????????? ?sex = new String(sex.getBytes( "ISO-8859-1" ), "GB2312" );

          ?????????? ?password = new String(password.getBytes( "ISO-8859-1" ), "GB2312" );????????

          ?????? ??? } catch (UnsupportedEncodingException e) {

          ?????????? ? // TODO Auto-generated catch block

          ?????????? ?? e.printStackTrace();

          ?????? ??? }

          ?????? ??? Staff staff = new Staff();

          ?????????? ? staff.setStaffid(staffid);

          ?????????? ? staff.setStaffname(staffname);

          ?????????? ? staff.setPassword(password);

          ?????????? ? staff.setDepartmentname(departmentname);

          ?????????? ? staff.setSex(sex);???????? ?????????????????????????????????????????????????????

          ?????? ??? try {

          ????????????? StaffDAO dao = new StaffDAO();

          ????????????? ???????? dao.save(staff);

          ?????????? } catch (Exception e) {

          ????????????? // TODO Auto-generated catch block

          ????????????? e.printStackTrace();???????????

          ?????????? }

          ???????????????? return mapping.findForward( "addStaffSuccess" );??????? ??? }

          posted on 2008-03-25 20:58 yunye 閱讀(627) 評(píng)論(5)  編輯  收藏

          評(píng)論

          # re: 求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么![未登錄](méi) 2008-03-25 21:58 flustar

          你action里寫(xiě)那么多try...catch干什么
          把你的日志記錄貼出來(lái),我?guī)湍憧纯?
          很有可能是的你的Dao類寫(xiě)的有問(wèn)題
          順便問(wèn)一下:
          “添加后,返回原頁(yè)面,顯示了添加的信息”
          你這個(gè)顯示了添加的信息是怎么得到的?  回復(fù)  更多評(píng)論   

          # re: 求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么! 2008-03-26 21:36 云野

          字符轉(zhuǎn)換的時(shí)候,不撲捉異常,它報(bào)錯(cuò),以前在做JSP頁(yè)面時(shí),字符轉(zhuǎn)換不用捕捉異常的,不知道是不是在Hibernate環(huán)境下的原因
          進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),我看到書(shū)籍上都進(jìn)行異常捕捉的,我就照做了。
          在頁(yè)面顯示數(shù)據(jù),我用了一個(gè)Action的
          public class UserListAction extends Action {
          /*
          * Generated Methods
          */

          /**
          * Method execute
          * @param mapping
          * @param form
          * @param request
          * @param response
          * @return ActionForward
          */
          public ActionForward execute(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response) {
          // TODO Auto-generated method stub
          List stafflist = null;
          try {
          StaffDAO dao = new StaffDAO();

          stafflist = (List)dao.findAll();
          } catch (HibernateException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }

          request.setAttribute("staffall", stafflist);


          return mapping.findForward("userlistmanage");
          }
          JSP頁(yè)面:
          <body>
          <html:errors/>
          <logic:present name="staffall" scope="request">

          <table cellspacing="0" cellpadding="0" border="1" align="center">
          <tbody>
          <tr><td colspan="10" align="right"><html:link href="/FileManage/addStaffStep1.do">添加職員信息</html:link></td> </tr>
          <tr><td colspan="10" align="center">職員信息</td> </tr>
          <tr><td>職員號(hào)</td><td>姓名</td><td>部門(mén)</td><td>性別</td><td>電子郵件</td>
          <td>地址</td><td>手機(jī)號(hào)碼</td><td colspan="3">操作</td></tr>
          <logic:iterate id="stafflist" name="staffall">
          <tr>
          <td> <bean:write name="stafflist" property="staffid" /> </td>
          <td> <bean:write name="stafflist" property="staffname"/></td>
          <td> <bean:write name="stafflist" property="departmentname"/></td>
          <td> <bean:write name="stafflist" property="sex"/> </td>
          <td> <bean:write name="stafflist" property="email"/></td>
          <td> <bean:write name="stafflist" property="address"/></td>
          <td> <bean:write name="stafflist" property="mobile"/></td>
          <td><html:link href="/FileManage/lookFileList.do">文件目錄</html:link></td>
          <td><html:link href="/FileManage/modifyStaff.do">修改</html:link></td>
          <TD><html:link href="/FileManage/deleteStaff.do">刪除</html:link></TD>
          </tr>
          </logic:iterate>
          </tbody></table>
          </logic:present>
          </body>


          原來(lái)自動(dòng)生成的DAO方法有點(diǎn)問(wèn)題,我改動(dòng)了一下,好象可以了:
          public void save(Staff transientInstance) {
          log.debug("saving Staff instance");
          org.hibernate.Transaction tx = null;
          tx=getSession().beginTransaction();
          try {
          getSession().save(transientInstance);
          tx.commit();
          log.debug("save successful");
          } catch (RuntimeException re) {
          log.error("save failed", re);
          if(tx!=null){
          tx.rollback();
          }
          throw re;
          }
          }

            回復(fù)  更多評(píng)論   

          # re: 求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么! 2008-03-26 22:50 flustar

          自己寫(xiě)個(gè)轉(zhuǎn)換編碼的Filter,在web.xml配置一下就行了, 就沒(méi)有必要寫(xiě)那些轉(zhuǎn)換的代碼了。你看得是誰(shuí)寫(xiě)的書(shū),作者的水平似乎不怎么行啊,Action里直接調(diào)用DAO合適嗎,還有在action里捕獲異常,用try...catch也不合適,不是可以用異常聲明嗎,在xml里配置一下不就行了。  回復(fù)  更多評(píng)論   

          # re: 求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么! 2008-03-28 16:03 wjywilliam

          問(wèn)你一句,你的Transaction怎么處理的,處理了沒(méi)有,在哪里?  回復(fù)  更多評(píng)論   

          # re: 求救Hibernate 問(wèn)題,急,請(qǐng)幫我看下我的代碼,好么! 2008-03-30 23:53 Robin's Java World

          問(wèn)題應(yīng)該就出在你的transaction上.  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 谢通门县| 武义县| 汪清县| 土默特左旗| 秀山| 申扎县| 万荣县| 宜宾市| 庄浪县| 兴化市| 桐乡市| 大冶市| 民县| 城口县| 安多县| 五台县| 台中市| 佛学| 库尔勒市| 昌平区| 萨迦县| 永清县| 拉萨市| 德昌县| 重庆市| 台山市| 龙岩市| 雷波县| 吉林市| 松潘县| 延吉市| 达州市| 板桥市| 巴彦县| 巫山县| 镇原县| 永登县| 德兴市| 成武县| 永城市| 桂东县|