日期:2014-05-17  浏览次数:20692 次

通过驱动器向oracle中插入中文时出现乱码
要客户端输入姓名,然后保存到oracle数据库中,英文可以,中文保存进去的就是乱码了。(oracle中原来的中文是正常的,只有插入的才是乱码)
连接代码:
Java code

Class.forName("oracle.jdbc.driver.OracleDriver");
conn=(Connection) DriverManager.getConnection("jdbc:oracle:thin:@172.18.80.186:1521:xx","aa","bb");



dao代码:
Java code

//添加
    public boolean addBook(Book book){
        try {
            Connection conn=(Connection) DBConn.getConn();
            PreparedStatement pstmt=conn.prepareStatement("insert into s201_11 values (?,?)");
            pstmt.setString(1, book.getId());
            pstmt.setString(2, book.getName());
            System.out.println(book.getId());
            System.out.println(book.getName());
            pstmt.execute();
            return true;
            
        } catch (Exception e) {
            e.getStackTrace();
            return false;
        }finally{
            DBConn.CloseConn();
        }
        
    }



显示添加成功,但再数据库里是乱码:
3 ?·????
再次查询也是乱码。

怎么办?

------解决方案--------------------
肯定是你前台页面使用的编码格式是默认的iso-8859-1的编码格式
不知道你是用servlet还是struts2 还是dofilter来处理中文问题、
servlet 的话 把response 和request 的 .setCharacterEncoding("utf-8"); 格式 在用之前就要处理他们的编码
struts2的话 不知道你用的什么版本 如果是2.1.7+的话 有个struts.xml 可以配置 应该是i18n那个
dofilter的话 先把他们都拦截 在设定编码格式
------解决方案--------------------
你可以在addBook(Book book) 方法 在插入数据库之前把book打印到控制台看看
要是乱码就证明前台页面传过来的时候就有问题

------解决方案--------------------
csdn回复没有字体颜色设置了呢? 0.0

jsp的编码格式是什么? 不会是默认的iso-8859-1吧、改成编码集统一的、【例子为utf-8】

【方法1】:action的execute方法里可以获取到response和request、
用【ServletActionContext.getRequest() 、和ServletActionContext.getResponse()】
然后设定他们的编码格式相当于设定request和response的编码集、

ServletActionContext.getRequest().setCharacterEncoding("utf-8");
ServletActionContext.getResponse().setCharacterEncoding("utf-8");


【方法2】:设置一个filter,放在struts2拦截之前,具体参考filter拦截知识
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
 
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


【方法3】:
在struts.xml里设置编码
<!--指定web应用的默认编码集-->
<constant name="struts.i18n.encoding" value="utf-8">
</constant>

【struts.xml】一改动就需要重新启动服务器、设置一个方法模式就方便开发了