连接数据库时用getParameter从表单中得到的值不能为汉字,英文可以.
用中文时在数据库中存储的是 “????”而不是汉字.
我的配置是 windows xp,jdk1.5,apache-tomcat-1.4.3
希望各位帮我解决。

解决方案 »

  1.   

    连接数据库时参照DriverManager.getConnection("jdbc:mysql://localhost:3306/book?user=root&password=123456&useUnicode=true&characterEncoding=gb2312");来连
    页面中加上<% response.setCharacterEncoding("gb2312");%>
      

  2.   

    给JSP原码,可能在需要转码的时候需要用到convert(**.get(**))这样转换
      

  3.   

    在User.getName(new String(rs.getString("name").getByte("latin1"),"GBK"))中着样改,这样的话,你从数据库中取出的数据就已经转码了,那么你在页面就可以直接User.getParameter("name"),就不会出现?????了,这里注意latin1要看你的数据库的编码方式来定。
      

  4.   

    应该加一个字符过滤类,这是JDBC的问题.在向数据库传的时候调用一下这个过滤类就可以了.
      

  5.   

    我以前的网站在我机器上实在正常的,到了服务器那里就乱码了?不过写到服务器上就错误了?是JSP+MYSQL?是不是写到数据库的时间也要转化?
      

  6.   

    JSP用
    <% page ... charset=gbk">
      

  7.   

    楼主
    我也有一个问题。
    我用的是jdk1.4和tomcat5.0和ms-sql 2000
    连不上数据库是怎么回事?
    我已经贴了很多次了。没人回答。你的数据库能连上,我相信你能解决这个问题了。
    我的系统是 win2000 Server版;
    Tomcat5.0 装在E盘的跟目录下,j2sdk1.4.2_07装在E盘跟目录下;
    环境变量如下:
    CATALINA_BASE E:\Tomcat 5.0;
    CATALINA_HOME E:\Tomcat 5.0;
    classpath .;E:\j2sdk1.4.2_07\lib\dt.jar;E:\j2sdk1.4.2_07\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet-api.jar;E:\Tomcat 5.0\common\lib\tools.jar;
    Path C:\Program Files\Java\j2re1.4.2_07\bin;E:\j2sdk1.4.2_07\jre\bin;E:\j2sdk1.4.2_07\bin;
    问题如下:原代码如下:
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <%
    try{
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException e){
      out.print(e);
    }
    try{
      String url = "jdbc:odbc:jcc";//数据源名称为jcc
      Connection conn = DriverManager.getConnection(url);
      Statement stmt = conn.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM Mytable");
      out.println("User-list"+"<br>");
      while(rs.next()){
        out.print(rs.getString(1)+" ");
        out.print(rs.getString(2)+"<br>");
      }
      rs.close();
      stmt.close();
      conn.close();
    }
    catch(Exception ex){
      out.print(ex);
    }
    %></body>
    </html>结果如下:
    java.sql.SQLException: [Microsoft][ODBC 驱动程序 管理器] 未发现数据源名称并且未指定默认驱动程序 
    同样的代码同样的数据源和同样的数据库在java中能读出和写如数据库!!!!!!!!!
    问题2如下:
    原代码如下:
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <h1>
    Jdbc 连接到 Access 数据库的例子</h1>
    <%
    java.sql.Connection sqlCon; //数据库连接对象
    java.sql.Statement sqlStmt; //SQL语句对象
    java.sql.ResultSet sqlRst; //结果集对象
    java.lang.String strCon; //数据库连接字符串
    java.lang.String strSQL; //SQL语句
    String mdbpath=request.getRealPath("/");
    //装载JDBC-ODBC驱动程序
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //设置数据库连接字符串
    strCon = "jdbc:odbc:driver={SQL Server};DBQ="+mdbpath+"Mydb.mdb";
    out.println(strCon);
    //strCon = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=F:\\Jb\\BeanServletTest\\defaultroot\\dbtest.mdb";
    //"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+ mdbpath+"\\dbtest.mdb";
    //数据库是一个Access文件,里面有一张表user,表里有userid和userpass两个字段
    sqlCon = java.sql.DriverManager.getConnection(strCon);
    //创建SQL语句对象
    sqlStmt = sqlCon.createStatement();
    //执行插入几条记录的SQL语句
    strSQL = "insert into Mytable (userid,userpass) values(\'user111\',\'pass111\')";
    out.println(strSQL);
    out.println("插入操作的返回值是"+sqlStmt.executeUpdate(strSQL));
    //获取记录总数
    strSQL = "select * from user where userid=\'"+request.getParameter("userid")+"\' and userpass=\'"+request.getParameter("userpass")+"\'" ;
    //判断条件是 where userid="+request.getParameter("userid")+" and userpass="+request.getParameter("userpass") ;
    //一些数据库里的查询的判断条件
    out.println(strSQL);
    strSQL = "select * from Mytable";
    out.println(strSQL);
    sqlRst = sqlStmt.executeQuery(strSQL);
    //打印测试
    if( sqlRst != null ){
    out.println("一共有"+sqlRst.getRow()+"条记录");
    while( sqlRst.next() ){
    out.println("你的用户名字是:\t" + sqlRst.getString("userid")+"<br>");
    out.println("你的密码是:\t" + sqlRst.getString("userpass")+"<br>");
    out.println("一共有"+sqlRst.getRow()+"条记录<br>");
    }
    out.println("一共有"+sqlRst.getRow()+"条记录");
    }
    sqlRst.close();
    sqlCon.close();
    %>
    </body>
    </html>
    远行结果如下:
    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver]没有提供任何 DSN 或 服务器关键字
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp._2_jsp._jspService(_2_jsp.java:104)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有提供任何 DSN 或 服务器关键字
    sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
    sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    java.sql.DriverManager.getConnection(Unknown Source)
    java.sql.DriverManager.getConnection(Unknown Source)
    org.apache.jsp._2_jsp._jspService(_2_jsp.java:68)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
    --------------------------------------------------------------------------------Apache Tomcat/5.0.28
    可是我已经建了数据库呀!(这个代码好象不需要数据源吧!!)
      

  8.   

    String mdbpath=request.getRealPath("/");
    //装载JDBC-ODBC驱动程序
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //设置数据库连接字符串
    这不是明摆着在用odbc么,还说不需要数据源?别忘了建成系统数据源!
      

  9.   

    至于楼主
    this.age= toChinese(age);
    加个函数来转换
    public static String toChinese(String input) {
    try {
    byte[] bytes = input.getBytes("ISO8859-1");
    return new String(bytes);
    }
    catch (Exception ex) {
    }
    return null;
    }
      

  10.   

    什么是系统数据源?
    怎么建?
    是不是dsn那个呀!
    那个已经建了!!!!!!
      

  11.   

    在控制面版里面设ODBC数据源~
     其中还有选驱动
     所选驱动就要看你具体用哪个数据库了,我连的是access
      

  12.   

    对了,问题解决了
      我在JSP代码中加了一句 str=new String(str.getBytes("ISO8859-1"),"gb2312");
      多谢上面的兄弟给我的答复