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?
...全文
647 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
快,大家快来赚分!

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧