浏览 1642 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-09-29
我用strtus+hibernate+oracle8i做一个小例子,一个表3个字段。
[code:1]create table SYSUSER ( USERID VARCHAR(32) not null, USERNAME VARCHAR2(20), USERPASSWORD VARCHAR2(20), LASTLOGIN DATE, constraint PK_SYSUSER primary key (USERID) )[[/code:1] 实现添加删除更新的操作。现在添加删除都没有问题。更新的时候出现了乱码。我用了“国际化资源文件”写了一个filter,代码如下。[code:1] package com.DBStruts.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class SetEncodeFilter implements Filter { protected FilterConfig filterConfig = null; protected String defaultencoding = null; public void init(FilterConfig arg0) throws ServletException { this.filterConfig = arg0; //获取系统缺省[code]语言编码[/code] this.defaultencoding = filterConfig.getInitParameter("defaultencoding"); } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding(selectEncoding(arg0)); arg2.doFilter(arg0,arg1); } public void destroy() { this.defaultencoding = null; this.filterConfig = null; } protected String selectEncoding(ServletRequest request){ return this.defaultencoding; } } [/code:1] 关于更新的代码如下SysuserAction.java: [code:1]//Created by MyEclipse Struts // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.7.200/xslt/JavaClass.xsl package com.yourcompany.struts.action; import java.util.Iterator; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.hibernate.HibernateException; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import com.DBStruts.demo.SysuserMap; import com.DBStruts.demo.SysuserQueryMap; import com.yourcompany.struts.form.SysuserForm; /** * MyEclipse Struts * Creation date: 09-26-2004 * * XDoclet definition: * @struts:action path="/sysuser" name="sysuserForm" input="/sysuser/editsysuser.jsp" scope="request" validate="true" * @struts:action-forward name="/sysuser/editsysuser" path="/sysuser/editsysuser" */ public class SysuserAction extends Action { // --------------------------------------------------------- Instance Variables // --------------------------------------------------------- Methods /** * Method execute * @param mapping * @param form * @param request * @param response * @return ActionForward */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { /**初始化系统语言资源*/ Locale local = getLocale(request); MessageResources messages = getResources(request); //用户请求时所指明的请求类型 String action = request.getParameter("act"); //获取到处理表单的内容formbean SysuserForm sysuser = (SysuserForm)form; //判断处理请求并进行相应的处理 if(action == null || action.equals("list")){ SysuserQueryMap sqm = new SysuserQueryMap(); Iterator sysuserlist = sqm.findAllSysuser(); //将用户列表压入了bean中 request.setAttribute("sysuserlist",sysuserlist); action = "list"; }else if(action.equals("create")){ //如果请求类型为create request.setAttribute("sysuserForm",new SysuserForm()); action = "create"; }else if(action.equals("add")){ //如果处理请求类型为add SysuserMap sysusermap = new SysuserMap(); try{ sysusermap.createSysuser(sysuser); //加入成功,我们在接着加入下一个用户 request.setAttribute("sysuserForm",new SysuserForm()); action = "create"; }catch(HibernateException e){ //存入数据库出错 ActionErrors errors = new ActionErrors(); errors.add( ActionErrors.GLOBAL_ERROR, new ActionError("error.database.save",e.toString()) ); this.saveErrors(request,errors); //将当前数据回显,并显示用户重新输入 request.setAttribute("sysuserForm",sysuser); action = "create"; } }else if(action.equals("edit")){ //请求类型为edit SysuserQueryMap sqm = new SysuserQueryMap(); String uid = request.getParameter("userid"); //从数据库中取得这个用户的信息,然后将这个用户信息压入FormBean中 request.setAttribute("sysuserForm",sqm.getSysuserByID(uid)); }else if(action.equals("update")){ //请求类型为update System.out.println("sysuser.getUserid1::::::::::" + sysuser.getUserid()); System.out.println("sysuser.getUsername1::::::::::" + sysuser.getUsername()); //sysuser.setUsername(new String(sysuser.getUsername().getBytes(),"8859_1")); SysuserMap sysusermap = new SysuserMap(); sysusermap.updateSysuser(sysuser); SysuserQueryMap sqm = new SysuserQueryMap(); Iterator sysuserlist = sqm.findAllSysuser(); //将用户列表压入了bean中 request.setAttribute("sysuserlist",sysuserlist); action = "list"; }else if(action.equals("delete")){ //如果处理请求为delete SysuserMap sysusermap = new SysuserMap(); String uid = request.getParameter("userid"); try{ sysusermap.deleteSysuser(uid); SysuserQueryMap sqm = new SysuserQueryMap(); Iterator sysuserlist = sqm.findAllSysuser(); //将用户列表压入了bean中 request.setAttribute("sysuserlist",sysuserlist); }catch(HibernateException e){ ActionErrors errors = new ActionErrors(); //如果出错就压一个错误到全局的错误中 errors.add( ActionErrors.GLOBAL_ERROR, new ActionError("error.database.delete",e.toString()) ); this.saveErrors(request,(ActionErrors) response); } action = "list"; } //从定义中获取View路径,并转发至View return mapping.findForward(action); } }[/code:1] SysuserMap.java 代码 [code:1]package com.DBStruts.demo; import java.util.Calendar; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import com.DBStruts.dao.AbsBaseMap; import com.DBStruts.db.Sysuser; import com.yourcompany.struts.form.SysuserForm; /** * @author Administrator * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SysuserMap extends AbsBaseMap { /** * 增加一条记录,在VO层,我们使用的数据类型为SysuserForm,所以增加 * 的参数一定是SysuserForm * @param sysuserForm * @throws HibernateException */ public void createSysuser(SysuserForm sysuserForm)throws HibernateException{ //使用 sysuserForm的相关属性新建sysuser实例 Sysuser sysuser = new Sysuser( sysuserForm.getUsername(), sysuserForm.getUserpassword(), Calendar.getInstance() ); //启动事务 Session session = this.beginTransaction(); try{ //新增这个实例到数据库 session.save(sysuser); //commit this.endTransaction(true); }catch(HibernateException e){ //rollback this.endTransaction(false); throw e; } } /** * 更新一个sysuser * @param sysuserForm 包含更新内容的sysuser form bean * @throws HibernateException */ public void updateSysuser(SysuserForm sysuserForm)throws HibernateException{ /**使用sysuserForm的相关属性新建sysuser实例*/ Sysuser sysuser = new Sysuser( sysuserForm.getUserid(), sysuserForm.getUsername(), sysuserForm.getUserpassword(), Calendar.getInstance() ); //sysuser.setUserid(sysuserForm.getUserid()); System.out.println("sysuser.getUserid2::::::::::" + sysuser.getUserid()); System.out.println("sysuser.getUsername2::::::::::" + sysuser.getUsername()); System.out.println("sysuserForm.getUsername2:::::::::" + sysuserForm.getUsername()); System.out.println("userpassword::::::::::" + sysuser.getUserpassword()); /**启动事务*/ Session session = this.beginTransaction(); try{ session.clear(); //更新这个实例到数据库中 session.update(sysuser); //commit this.endTransaction(true); }catch(HibernateException e){ //rollback this.endTransaction(false); throw e; } } /** * 删除一般都会是使用用户ID来删除,所以参数可以是带有用户ID的formbean或是用户ID * @param sysuserForm 带有用户ID的formbean * @throws HibernateException */ public void deleteSysuser(SysuserForm sysuserForm)throws HibernateException{ String userid = sysuserForm.getUserid(); /**该方法下面定义*/ this.deleteSysuser(userid); } /** * 根据用户ID来删除用户 * @param userid 用户ID * @throws HibernateException */ public void deleteSysuser(String userid)throws HibernateException{ Session session = this.beginTransaction(); try{ //先向数据库中查询是否有这个用户 Sysuser sysuser = (Sysuser)session.load(Sysuser.class,userid); //删除它 session.delete(sysuser); this.endTransaction(true); }catch(HibernateException e){ this.endTransaction(false); } } } [/code:1] 我贴张控制板打印的内容, 虽然打印的内容都没有乱码,但数据库中更新的记录的username字段是乱码,别的字段没有乱码。显示在界面的也是乱码。 ----------------------------------- 哪位朋友知道怎么解决阿?能帮帮我么? 如果我没说清楚,欢迎加我qq: 327278581 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-29
我换成mysql的数据库,(只是用mysql建立了个表)改了hibernate.config.xml文件结果添加删除都没问题。再更新的时候,反映出来的效果是,页面长时间不进行跳转,myeclipse界面发生变化,如我的抓图所示,这时候发现数据库数据已经改变,如果是汉字则乱码,英文则更改完成。
------------------------------------------ 难道没人帮帮我么? |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-30
你用Mysql的时候在连接字符串后面加上
[code:1] jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gb2312 [/code:1] 了吗,就是encoding |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-30
慕容姐姐 写道 我换成mysql的数据库,(只是用mysql建立了个表)改了hibernate.config.xml文件结果添加删除都没问题。再更新的时候,反映出来的效果是,页面长时间不进行跳转,myeclipse界面发生变化,如我的抓图所示,这时候发现数据库数据已经改变,如果是汉字则乱码,英文则更改完成。
------------------------------------------ 难道没人帮帮我么? 这张图不就是调试模式么,点击 java perspective view就可以转换回去,至于乱码,换个oracle驱动试试看 ,出了classes12好像有个ojdbc14.jar可以用。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-30
十因为更新的方法不对,应该这样写,[code:1] public void updateSysuser(SysuserForm sysuserForm)throws HibernateException{
/**使用sysuserForm的相关属性新建sysuser实例*/ /**启动事务*/ Session session = this.beginTransaction(); try{ //session.clear(); Sysuser sysuser = (Sysuser)session.load(Sysuser.class,sysuserForm.getUserid()); sysuser.setUsername(sysuserForm.getUsername()); sysuser.setUserpassword(sysuserForm.getUserpassword()); session.update(sysuser); //commit this.endTransaction(true); }catch(HibernateException e){ //rollback this.endTransaction(false); throw e; } } [/code:1] 谢谢楼上2位朋友了。 看错了,是1位朋友2次回答我 |
|
| 返回顶楼 | |





