byte[]到底可以有多长?

qfsb_p 2003-08-08 05:19:38
PreparedStatement preStatement = null;
String req = "INSERT INTO " + TableName + " VALUES ( ?, ?, ?, ?, ?, ?, ?, ?)";
preStatement = conn.prepareStatement(req);
...
byte[] blob = this.factory.toBlob(entry);
...
/*使用的数据库为oracle,字段为blob类型*/
preStatement.setBytes(8, blob);
...
preStatement.addBatch();
int[] ret = preStatement.executeBatch();

如果blob数据不是很大的话,这段语句ok,当blob数据增加后,报异常如下:java.sql.SQLException: 数据大小超出此类型的最大值: 19020

我想问的是,setBytes这个方法是不是有一定限度,是不是要用setClob?
...全文
220 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qfsb_p 2003-09-14
谢谢,我基本了解了,理论极限和实际极限。
回复
hayai 2003-08-14
java的String最大长度时4GB
回复
charbee 2003-08-14
blob在mssql的document里面指明不能超过2G
而byte[]是看你的jvm能支持多大.超出报outofmemory
回复
wyhgg 2003-08-14
动态数组就解决了。一般不会到极限吧
回复
fwp0794 2003-08-13
谢谢,学习ing
回复
NewStarter 2003-08-13
太长了对性能影响不好
回复
feiyuegaoshan 2003-08-13
xjffj(小刀) 说的是理论上的极限数值。
类型确实是int,
但这个数值式2047M。
换句话说,你的内存要远大于2047M,java虚拟机要可以申请到2047M,
你的数组才可能申请到这么大。

所以,实际上,是受限于内存。

但xjffj(小刀) 说的也非常重要,他是理论极限。
谢谢!
回复
xjffj 2003-08-13
所有数组对象都有一个变量length,类型为int,所以数组最大不超过Integer.MAXVALUE
回复
songbo_pp 2003-08-13
feiyuegaoshan(飞跃) 说得没错,应该不会受限。
不妨做个测试:
byte[] ret = new byte(1000000);//声明一个超长数组
System.arrayCopy(preStatement.executeBatch(),0,ret,0.preStatement.executeBatch().length);
回复
feiyuegaoshan 2003-08-13
多长都可以,受限于内存。
回复
cbhyk 2003-08-13
定义表的时候,blob字段定义的最大长度是多少
回复
qfsb_p 2003-08-13
楼上几位写的我不是很懂,请详细点,谢谢
回复
wawwaw 2003-08-11
insert 的时候先输入初始值(很短的)
然后用 select 方法从 result 取得 blob 对象,取得它的流对象,然后写大量数据,有多少写多少。
回复
relive 2003-08-11
跟byte[]的大小没关系啊。。。。
回复
疾风2002 2003-08-11
显然了
回复
qfsb_p 2003-08-11
up
回复
qfsb_p 2003-08-08
快,大家快来赚分!
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2003-08-08 05:19
社区公告
暂无公告