当前位置: 技术问答>java相关
关于jsp连接oracle char类型数据显示问题
来源: 互联网 发布时间:2015-06-09
本文导语: 在jsp中连接数据库当定义stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 时,数据库中char型字段,不管是中文英文数字,都显示不出来 比如 fff变成0x6666662020202020202020202020202020202020 改成stmt = con...
在jsp中连接数据库当定义stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
时,数据库中char型字段,不管是中文英文数字,都显示不出来 比如 fff变成0x6666662020202020202020202020202020202020
改成stmt = con.createStatement();就没有这个问题
做过以下几种尝试
1。使用new String(rs.getString("author").getBytes("iso8859-1"),"gb2312");或者类似的内码变换都没有效果。
2。如果用rs.getBytes("author") 则报错,java.sql.SQLException: 无效的列类型: getBytes
3。把改过来改过去也没效果
我用的是resin 2.1.1 oracle是i816,jdbc驱动用的是oracle自带的classes12.zip
请问到底是怎么回事啊
还有一个问题一并请教
就是如果我想对当前页面的一个输入框内的数据进行检测,比如一个注册页面,我想看看填的userid数据库内存不存在,想在该输入框后面加一个按钮或联结,填好这个框后点击就可以通过调用java程序访问数据库进行检查,并返回结果,注意不能提交填表的页面。请问应该怎么做呢?
时,数据库中char型字段,不管是中文英文数字,都显示不出来 比如 fff变成0x6666662020202020202020202020202020202020
改成stmt = con.createStatement();就没有这个问题
做过以下几种尝试
1。使用new String(rs.getString("author").getBytes("iso8859-1"),"gb2312");或者类似的内码变换都没有效果。
2。如果用rs.getBytes("author") 则报错,java.sql.SQLException: 无效的列类型: getBytes
3。把改过来改过去也没效果
我用的是resin 2.1.1 oracle是i816,jdbc驱动用的是oracle自带的classes12.zip
请问到底是怎么回事啊
还有一个问题一并请教
就是如果我想对当前页面的一个输入框内的数据进行检测,比如一个注册页面,我想看看填的userid数据库内存不存在,想在该输入框后面加一个按钮或联结,填好这个框后点击就可以通过调用java程序访问数据库进行检查,并返回结果,注意不能提交填表的页面。请问应该怎么做呢?
|
可以提交到新打开的页面,或者提交到隐藏帧
target=_blank target=hframe
target=_blank target=hframe
|
表单文件:
其中check.html:(可用check.jsp代替。下面代码可由jsp生成)
alert("已经有此ID了")
|
表单文件:
其中check.html:(可用check.jsp代替。下面代码可由jsp生成)
alert("已经有此ID了")
|
可能是驱动的bug,换一个8.1.7的驱动试试
|
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
你把ResultSet设为记录集可以滚动、显示其它更新,记录集不能更新。
没有错啊。
请问你一下,其它类型的数据取出来有没有问题?只能char型的有问题吗?
你把ResultSet设为记录集可以滚动、显示其它更新,记录集不能更新。
没有错啊。
请问你一下,其它类型的数据取出来有没有问题?只能char型的有问题吗?
|
所有用getString出来都有问题?对于varchar型等所有字符型的都一样?
用没有用classes12.zip?
用没有用classes12.zip?
|
- BUG-1349713
getString() of scrollable result sets returns incorrect values if
the column data contains multibyte characters.
估计就是这个bug,在817驱动中得到修正。
getString() of scrollable result sets returns incorrect values if
the column data contains multibyte characters.
估计就是这个bug,在817驱动中得到修正。
|
otn.oracle.com有下的,装上了还不行吗?
|
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、一般用
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();我觉得不会有这样的问题出现,
你好好查一下原因。
2、你用rs.getBytes("author") 取数据当然错了。对于
Types.TINYINT、Types.BINARY、Types.VARBINARY、Types.LONGVARBINARY类型可能用rs.getBytes(col);取数据。
3、一般用
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();我觉得不会有这样的问题出现,
你好好查一下原因。
|
对于你所说的不提交数据,不刷新页面,要与数据库交换信息,对于Bean是不行的,你想页面是客户端运行,而Bean是服务器端运行。不提交数据是不行。
除非你用applet。applet应该是可以的。
除非你用applet。applet应该是可以的。
|
呵呵,那我就不知道怎么回事了,对全英文的列也是这样吗?
|
不懂。
oracle不懂。
sigh
oracle不懂。
sigh