Chinaunix

标题: string 有无字节数限制请教 [打印本页]

作者: Ilovemugua    时间: 2006-04-21 15:25
标题: string 有无字节数限制请教
我在java插informix数据库时碰到Statement length exceeds maximum错误,插数据库的某个字段数据很大,我怀疑是string类型字节数有限制,请各位大虾帮忙解决下。谢谢。

[ 本帖最后由 Ilovemugua 于 2006-4-21 15:57 编辑 ]
作者: tong0245    时间: 2006-04-21 15:29
老实说我看你的问题我晕菜
作者: Ilovemugua    时间: 2006-04-21 15:55
标题: 回复 1楼 Ilovemugua 的帖子
java中string类型应该是有大小限制的吧,那这个极限是由什么来决定的啦,会不会受到环境的影响啦,请各位大虾指点一二。
作者: tong0245    时间: 2006-04-21 16:15
你数据库字段什么类型的啊
作者: tong0245    时间: 2006-04-21 16:22
你是工作还是学习啊 ??
作者: Ilovemugua    时间: 2006-04-21 16:26
标题: 回复 5楼 tong0245 的帖子
字段是varchar,不过我觉得与表字段大小应该无关,应该是string的空间大小有关
作者: Ilovemugua    时间: 2006-04-21 16:43
标题: 回复 7楼 tong0245 的帖子
你所说不对,我库中varchar最大255,但是插表时送的字段大于255的话她会自动截取前面255位插表的啊。我是在java中执行插表sql语句的,字段都是string类型,其中有个字段赋值过大,好像超出了string的最大限制,所以出错了。我试了试我的string最大容量是32768字节,现在我想知道的是string的最大容量是固定的,还是受什么因素或环境限制,又或者说怎么样才能知道string的最大容量啦?
作者: fxf_china    时间: 2006-04-21 16:51
Java决定了每种主要类型的大小。就象在大多数语言里那样,这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。
作者: tong0245    时间: 2006-04-21 16:54
原帖由 Ilovemugua 于 2006-4-21 16:43 发表
你所说不对,我库中varchar最大255,但是插表时送的字段大于255的话她会自动截取前面255位插表的啊。我是在java中执行插表sql语句的,字段都是string类型,其中有个字段赋值过大,好像超出了string的最大限制,所 ...

你看看抛出是什么异常 我刚才帖子里边有不好听的话。 那个应该是SQLException
对一个varchar字段来说 对超长值 是否截取或者抛出异常和具体数据库相关。
但是我告诉你数据库的字符或者 字符串类型支持的长度一定小于java String的能力。
如果你在sql语句中超出的话 会抛出异常 明白吗
你问string 最大多长根本 无助与你解决问题。你一开始就把问题想错了
我问你类型就是想知道你保存数据的方式是通过大对象 还是普遍的char类型

[ 本帖最后由 tong0245 于 2006-4-21 16:57 编辑 ]
作者: tong0245    时间: 2006-04-21 17:03
我告诉你个最简单确实问题的方法 你把sql语句打印出来
拷贝出来到一个 sql ide环境执行出错了 是数据库相关问题 否则是java问题
我认为数据库问题
另外你既然 只是需要前255个字符 你为什么不截取??
其实如果是java String的问题 应该在赋值的时候就抛出了 。这些都是很容易判断

[ 本帖最后由 tong0245 于 2006-4-21 17:08 编辑 ]
作者: 艾斯尼勒    时间: 2006-04-21 21:42
原帖由 tong0245 于 2006-4-21 17:03 发表
如果是java String的问题 应该在赋值的时候就抛出了  


表示强烈认同
作者: tong0245    时间: 2006-04-21 21:46
我和他在短信里边说了就是sql太长了 还不不信
java String愿意的可以填满内存
作者: wobushiwo    时间: 2006-04-21 22:35
一个String,最多能装的 2147483647 个字节

假如char的高位也利用的话,能有 34359738352 个字节 ,但是不能直接用 getBytes("编码方式")

得到 34359738352 个字节 ,需要先得到每一个个的char,再分高低位。。。

想挑战极限吗?
作者: tong0245    时间: 2006-04-21 22:57
原帖由 wobushiwo 于 2006-4-21 22:35 发表
一个String,最多能装的 2147483647 个字节

假如char的高位也利用的话,能有 34359738352 个字节 ,但是不能直接用 getBytes("编码方式")

得到 34359738352 个字节 ,需要先得到每一个个的char, ...

但是java String 长度受限于jvm内存  还有他的size 他用int做为计数器变量的类型
但是我说的不太对 string还是有长度限制的 因为计算size用的是int  受限于这个了
当int溢出就完蛋了
说话要注意啊 我刚刚看过源码 事情没有你说的那么复杂 好多数据库的clob是你说的那样的
作者: wobushiwo    时间: 2006-04-21 23:03
jvm有没限制不清楚,不过就按源码来看

char[int]

1 数组极限肯定不会超过 2147483647
2 假如存满了2147483647个char,char 是 16 位,假如是按支持双字节的 编码 来 getBytes 的话(比如 getBytes("GBK")),那得到的 bytes[] 肯定是超了的
作者: ginew    时间: 2006-04-24 14:58
String.length() 返回的是一个int。不知道这个信息对你有没有帮助。
作者: 艾斯尼勒    时间: 2006-04-24 15:26
长知识。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2