论坛首页 Java企业应用论坛

关于struts+hibernate+oracle8i乱码的问题请教

浏览 3557 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-09-29  
我用strtus+hibernate+oracle8i做一个小例子,一个表3个字段。
create table SYSUSER  (
   USERID               VARCHAR(32);                         not null,
   USERNAME             VARCHAR2(20);,
   USERPASSWORD         VARCHAR2(20);,
   LASTLOGIN            DATE,
   constraint PK_SYSUSER primary key (USERID);
);[

实现添加删除更新的操作。现在添加删除都没有问题。更新的时候出现了乱码。我用了“国际化资源文件”写了一个filter,代码如下。
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;
		//获取系统缺省
语言编码

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;
}
}

关于更新的代码如下SysuserAction.java:
//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);;		
	}
}

SysuserMap.java 代码
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);;
		}
	}
}


我贴张控制板打印的内容, 虽然打印的内容都没有乱码,但数据库中更新的记录的username字段是乱码,别的字段没有乱码。显示在界面的也是乱码。
-----------------------------------
哪位朋友知道怎么解决阿?能帮帮我么?

如果我没说清楚,欢迎加我qq: 327278581
   发表时间:2004-09-29  
我换成mysql的数据库,(只是用mysql建立了个表)改了hibernate.config.xml文件结果添加删除都没问题。再更新的时候,反映出来的效果是,页面长时间不进行跳转,myeclipse界面发生变化,如我的抓图所示,这时候发现数据库数据已经改变,如果是汉字则乱码,英文则更改完成。

------------------------------------------
难道没人帮帮我么?
0 请登录后投票
   发表时间:2004-09-30  
你用Mysql的时候在连接字符串后面加上

jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=gb2312


了吗,就是encoding
0 请登录后投票
   发表时间:2004-09-30  
慕容姐姐 写道
我换成mysql的数据库,(只是用mysql建立了个表)改了hibernate.config.xml文件结果添加删除都没问题。再更新的时候,反映出来的效果是,页面长时间不进行跳转,myeclipse界面发生变化,如我的抓图所示,这时候发现数据库数据已经改变,如果是汉字则乱码,英文则更改完成。

------------------------------------------
难道没人帮帮我么?


这张图不就是调试模式么,点击 java perspective view就可以转换回去,至于乱码,换个oracle驱动试试看  ,出了classes12好像有个ojdbc14.jar可以用。
0 请登录后投票
   发表时间:2004-09-30  
十因为更新的方法不对,应该这样写,
	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;
		}
		
	}
	


谢谢楼上2位朋友了。         看错了,是1位朋友2次回答我
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics