在线335人
首页
主题表
培训咨询
标签
精华
查搜
注册
登陆
用户
自动登陆
密码
新用户注册
忘记密码?
首页
»
论坛
»
J2EE/JavaEE/JEE/EJB/JSF等技术讨论
上一主题
小弟目前刚刚开始学习j2ee,现在遇到一个问题:从某教程上看到在对数据库进行访问时如果不使用连接池,那么在进行完一个操作后要及时关闭connection;又有文章讲到:在对数据库进行访问的时候尽量不要..
返回本主题
返回主题列表
下一主题
我看了一片文章说基于表单的验证和HTTP验证都是不安全的,那么如果使用基于客户端证书的验证(Client-Certificate Authentication) 该怎么配置呢?是不是还要到相关的地方..
1
2
►
Go
总共有
15
回复 /
2
页
前往下页:
mojo
悄悄话
发表文章: 6
注册时间: 2003年12月04日 10:53
请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月04日 11:04
标签列表
数据库
(147)
最近碰到一个关于JDBC的怪问题,我们用
Struts
+TORQUE做项目,前台显示用VELOCITY,数据库是ORACLE的,但是在做数据录入时(通过BS的界面),总是报错,说“数据大小超出了此类型的最大值”,但在数据库中该字段是VARCHAR2,4000,而在表单中该字段所对应的输入框(TEXTAREA),我只能输入最多1322字节的内容,一旦超过哪怕一个字节,数据就无法录入。
和同事讨论来去感觉是JDBC驱动的问题。不知道你们是否遇到过类似的问题?有什么好的解决办法吗?或者是我们哪里有错误?还请不吝赐教。
相关信息:
使用CLASS12.JAR为JDBC驱动ORACLE8i,该提交的表单共有10个字段。另有2个HIDDEN字段。
lizh
悄悄话
发表文章: 10
注册时间: 2002年12月20日 17:04
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月04日 19:17
你这个1322字节长度是在什么地方测到的?
你用什么方法得到1322字节,String.length()吗?他显示的可是字符数。
你输入的都是汉字吗?还是什么都有?
crogers
悄悄话
发表文章: 84
注册时间: 2003年10月11日 13:47
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月04日 23:39
oracle字符集的问题,在你选择的字符集里面,显然一个汉字占3个字节
当然,汉字双字节,你也是要考虑的
mojo
悄悄话
发表文章: 6
注册时间: 2003年12月04日 10:53
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月05日 09:08
回lizh:
我的信息输入表单有多个Input field,比如主题,关键字什么的,出现问题的是在输入内容的Textarea。在ActionForm中是定义为String的,但在表单中我输入的内容(中英文都有,中文为主)最大长度是1322个字符。此数据是将允许输入的内容COPY到Ultraedit中用Byte Count得到的,它是将汉字作为双字节进行统计的。一旦超过信息录入就失败。
回crogers:
关于oracle字符集的问题,恕我才疏,不是很理解,烦请详述。
谢谢你们的回复!
lizh
悄悄话
发表文章: 10
注册时间: 2002年12月20日 17:04
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月06日 09:03
要获得输入的长度,建议你最好在你的action中获得。
至于数据库字符集的问题,简单的测试方法是你可以设置一个varchar2(2)的字段看看能不能插入汉字。(varchar2最多也只能插入2000个汉字)
如果你想多插入一些汉字又不想使用lob,我向你推荐使用nvarchar2(4000)
nvarchar2 类型是按照字符存放的(可存放4000个汉字)。不受字符集设置的影响。
lizh
悄悄话
发表文章: 10
注册时间: 2002年12月20日 17:04
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月06日 11:08
关于字符集的问题这里有一篇文章:
http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=59339&forum_id=72
bullboss
悄悄话
发表文章: 45
注册时间: 2003年03月14日 20:50
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月07日 03:31
Oracle有两种JDBC连接方式,用另一种就会OK.
mojo
悄悄话
发表文章: 6
注册时间: 2003年12月04日 10:53
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月08日 17:27
谢谢几位热心朋友的帮助。今天工作忙了点,到现在才回复。
中午时我照lizh的意见做了个测试,发现字段设置为VARCHAR2(4000),最多只允许输入1334个字符(666个汉字),也就是说我们这边ORACLE的字符集里,1个字符是作为3个字节来处理的。
但当我将字段设置为VARCHAR2(2)时,系统允许我输入2个字符或者1个汉字。如此“偏心”,真是气死我了:)
后来我又照lizh的建议把VARCHAR2改成NVARCHAR2,SQL又给我仍EXCEPTION了:character set mismatch. 因为面向数据库的相关对象都是由TORQUE自动生成的,我也糊涂了到哪里去改这个character set.于是又去检查了一下Torque生成类的模板,发现在ORACLE数据库相关的字段定义中,竟然找不到关于NVARCHAR2的定义。只有有VARCHAR2,LONGVARCHAR2(=VARCHAR2(2000)),还有BLOB。
在另一个论坛,有个朋友的回复比较经典:
“这是很经典的OracleJDBC问题。一般直接用ps.setString()设置字符串数据时,Oracle的JDBC驱动会将中文转换为2字节或3字节,不固定的,因此经常会越界。如果你改为ps.setCharacterStream()就是固定的每个中文两个字节 ”。
可问题是,TORQUE里面似乎没给我机会来写什么PrepareStatement,除非改源码。问题看起来似乎更复杂了。
crogers
悄悄话
发表文章: 84
注册时间: 2003年10月11日 13:47
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月08日 20:26
兄弟,你查了你的oracle是使用什么字符集没有?... ...~~
mojo
悄悄话
发表文章: 6
注册时间: 2003年12月04日 10:53
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 08:45
查过了,我用SQL*PLUS查的,是 ZHS16GBK 。
crogers
悄悄话
发表文章: 84
注册时间: 2003年10月11日 13:47
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 09:27
如果是ZHS的话,那就真不知道了,~
oldma
悄悄话
发表文章: 85
注册时间: 2003年09月10日 13:09
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 16:39
在oracle中varchar2和Nvarchar2是两个不同的字符集
select SYS.V_$NLS_PARAMETERS.PARAMETER,
SYS.V_$NLS_PARAMETERS.VALUE
from SYS.V_$NLS_PARAMETERS
NLS_CHARACTERSET是varchar2的字符集
NLS_NCHAR_CHARACTERSET是Nvarchar2的字符集
你自己看一下吧
oldma
悄悄话
发表文章: 85
注册时间: 2003年09月10日 13:09
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 16:47
在ORACLE中,varchar2(XXX)的XXX设置的很大不是很有意义,除非你用plsql,因为ORACLE中的binding variable的长度有限制,好像就是2000,就是666个汉字,不知道怎么改这个binding variable,你可以去问问别的oracle的高手。
如果不改这个,在jdbc中的长字符就只能是2000个,用GB2312的话,就是666个汉字,所以长字符串干脆就用blob或是clob,性能还是不错的,用流模式总比都搞到内存里要好。
mojo
悄悄话
发表文章: 6
注册时间: 2003年12月04日 10:53
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 18:04
是的,在网上查了很多资料发现ORACLE的JDBC对长字符的支持就只到2000。看来只能用BLOB了。我用的是
Struts
,在使用流模式做GET或SET时有什么需要注意的吗?而且在用TORQUE实现数据库操作时与通常情况有什么不同吗?
BTW,我查过数据库的字符集定义了,两个CHARACTER SET都是一样的 ZHS16GBK 。
oldma
悄悄话
发表文章: 85
注册时间: 2003年09月10日 13:09
Re: 请教:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)?
2003年12月09日 20:50
> 是的,在网上查了很多资料发现ORACLE的JDBC对长字符的支持
> 椭坏?000。看来只能用BLOB了。我用的是
Struts
,在使用流?> 式做GET或SET时有什么需要注意的吗?而且在用TORQUE实现数
应该和
Struts
没什么关系,传递给到
Struts
layer的对象的属性就是String,blob的处理限制在TORQUE里面
TORQUE没用过,查查文档吧
这个主题有
15
回复 /
2
页
Go
1
2
►
上一主题
返回本主题
返回主题列表
返回页首
下一主题
热点TAG:
AOP
cache
缓存
DDD
EJB
集群
设计模式
Hibernate
IOC
JiveJdon
OO
RBAC
Seam
Spring
Struts
正在读取,请等待...
Wowzio
grab this
·
technology
blog
查询本论坛内
近一天
近三天
近一周
近一月
近三月
近半年
近一年
所有
回复超过
的热门帖子
标题
内容
发贴前查询
标签列表
勿重复发表问题
解惑之道在
J道
,打造中国最具影响力的的企业软件社区
OpenSource
JIVEJDON
v3.0
Powered by
JdonFramework
Code © 2002-08
jdon.com
anti spam