关于jsp读取数据库Blob字段代码的一个错误

本文探讨了在处理Oracle数据库中的BLOB字段时,将BLOB数据转换为字符串的常见方法,并指出了循环条件判断中易忽略的问题。通过实例说明,当BLOB长度为1024的倍数加1时,最后一字节可能未被读取,提出修改循环条件为<=的重要性。同时,强调了在处理非英文字符时,选择正确字符集(如GBK)以避免乱码的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               String Str="";
               long BlobLength; // BLOB字段长度
               byte[] bytes; // BLOB临时存储字节数组
               try{
                   if(blob!=null){
                        int i = 1; // 循环变量
                        byte[] msgContent = blob.getBytes(); // BLOB转换为字节数组
                        BlobLength=blob.length();  //获取BLOB长度
                        if(msgContent == null || BlobLength==0){    //如果为空,返回空值
                                Str="";  
                        }else{  
                            while(i<BlobLength){ //循环处理字符串转换,每次1024;Oracle字符串限制最大4k
                                bytes= blob.getBytes(i,1024) ;
                                i=i+1024;
                                Str = Str+new String(bytes,"GBK") ;          
                            }
                        }            
                   }
               }catch(Exception e) {
                   System.err.println("BLOB字段转字符串aq.executeQuery:"+e.getMessage());
               }
                        
               return Str;

百度到的代码基本为上面的写法,但最近使用中很凑巧的发现一个问题,即while(i<BlobLength)这里需要写成while(i<=BlobLength), 原因是刚好有条记录中Blob字段的长度为4097,那么while循环的时候,刚好第四次i的值为4097,那么就跳出循环了,但Blob字段中的第4097位的字节就不会被读取展示出来了,同理,只要Blob字段的长度刚好是1024*n+1,那么最后一位就不会被读取到了,所以要改成<=,特此记录下~

另,本人新手,使用的oracle字段,所以不知道是数据库方面的字体设置,还是其他什么原因,但是测试发现更新Blob字段的时候,如果不是用GBK字符集的话,数据库中会显示乱码。所以这里取数的时候也是采用GBK来转换!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值