1、对于CHAR型、VARCHAR型、ONGVARCHAR型字段的取数据的方法是一样的,都是用rs.getString(col),如果你在数据中保存的不是内码,则不需要用getBytes("iso8859-1"),"gb2312");内码变换,如果中文,它是能够显示出来的。
2、你用rs.getBytes("author") 取数据当然错了。对于
Types.TINYINT、Types.BINARY、Types.VARBINARY、Types.LONGVARBINARY类型可能用rs.getBytes(col);取数据。
3、一般用 <%@page contentType="text/html;charset=gb2312"%>
4、你要保证存在数据库中的数据是中文,你要对页面提交过的中文数据要进行内码变换,如:
String sPara = request.getParameter("para") ;
String sCpara = new String(sPara .getBytes("8859_1"),"gb2312");"para"为你从页面提交过来的中文数据。
5、jdbc驱动用的是oracle自带的classes12.zip是要用到的。
6、对于stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
时,数据库中char型字段,不管是中文英文数字,都显示不出来 比如 fff变成0x6666662020202020202020202020202020202020
改成stmt = con.createStatement();我觉得不会有这样的问题出现,
你好好查一下原因。

解决方案 »

  1.   

    对于你所说的不提交数据,不刷新页面,要与数据库交换信息,对于Bean是不行的,你想页面是客户端运行,而Bean是服务器端运行。不提交数据是不行。
    除非你用applet。applet应该是可以的。
      

  2.   

    可以提交到新打开的页面,或者提交到隐藏帧
    target=_blank target=hframe
    <iframe name=hframe></iframe>
      

  3.   

    表单文件:
    <form name=show>
    <input name=userid>
    <input type=button value=检测 onclick='document.show.target="hframe";document.show.action="check.html";document.show.submit()'>
    <p>
    <input type=button value=提交 onclick='show.target="_self";show.action="a.jsp";show.submit()'>
    </form>
    <iframe name=hframe style="visibility:hidden"></iframe>其中check.html:(可用check.jsp代替。下面代码可由jsp生成)
    <script>
    alert("已经有此ID了")
    </script>
      

  4.   

    表单文件:
    <form name=show>
    <input name=userid>
    <input type=button value=检测 onclick='document.show.target="hframe";document.show.action="check.html";document.show.submit()'>
    <p>
    <input type=button value=提交 onclick='show.target="_self";show.action="a.jsp";show.submit()'>
    </form>
    <iframe name=hframe style="visibility:hidden"></iframe>其中check.html:(可用check.jsp代替。下面代码可由jsp生成)
    <script>
    alert("已经有此ID了")
    </script>
      

  5.   

    第二个问题明白了 谢谢
    但是第一个问题还是搞不定啊在数据库里显示的肯定没问题
    如果用不带参数的statement,显示一点问题没有
    加了参数马上就不行了难道没有人遇到过这个问题??
      

  6.   

    可能是驱动的bug,换一个8.1.7的驱动试试
      

  7.   

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    你把ResultSet设为记录集可以滚动、显示其它更新,记录集不能更新。
    没有错啊。
    请问你一下,其它类型的数据取出来有没有问题?只能char型的有问题吗?
      

  8.   

    对啊
    用getString出来的就有问题
    getInt什么都没问题
      

  9.   

    所有用getString出来都有问题?对于varchar型等所有字符型的都一样?
    用没有用classes12.zip?
      

  10.   

    - BUG-1349713
    getString() of scrollable result sets returns incorrect values if 
    the column data contains multibyte characters. 
    估计就是这个bug,在817驱动中得到修正。
      

  11.   

    otn.oracle.com有下的,装上了还不行吗?
      

  12.   

    对啊
    我下了classes12.zip
    把6种组合都试了还是不行
      

  13.   

    是啊,我作了一下处理 InputStreamReader isr=new InputStreamReader(rs.getAsciiStream("author"),"iso8859-1");   StringBuffer bs=new StringBuffer();
       int c;
       while((c=isr.read())!=-1) bs.append((char)c);
       author=bs.toString();这个时候可以显示英文列了,但是中文列怎么转换还是不行
    用的是 bs.toString().getBytes("")请问大家有什么办法??
      

  14.   

    不懂。
    oracle不懂。
    sigh
      

  15.   

    终于搞定了,心旷神怡啊
    做了以下几步
    1。下载了817驱动,包括classes12.zip 和nls_charset12.zip
    2。将nls_charset12.zip也放到resin的lib里头
    3。用oracle安装盘重新安装jdbc816,发现里头列出来的jdk1.2驱动居然是未安装,一并选上(还有jdk1.1的)装上
    4。将817的ocijdbc8.dll覆盖了bin目录下原有的文件,期间多次报UnSatisfictionError(大概是这个词,忘了)也不知道哪一步是关键成功,放到这里,大家有问题可以参考一下