oracle里我不清楚,不过在DB2里面,你读出一个数据前要rs.next()一下,也就是说要从rs.next()才是第一条记录,不然就全是null,你试着加上这句话看行不行!

解决方案 »

  1.   

    java.sql.Blob bb = rs.getBlob("sfile");       //bb为null
    呵呵,oracle的blob不是这么玩的,应该这样java.sql.Blob bb = ((OracleResultSet)rs).getBLOB("sfile");
    BLOB是oracle实现了bolb的接口的类,你可以参考oracle的jdbc的文档.
    他需要的包就是oracle带的classes12.jar了,和weblogic没有关系.
      

  2.   

    to fastmask:    不对吧,这样要报类型错误的。楼主的问题可能是因为未提交
      

  3.   

    to 楼上们!!!
    ------rs.next()才是第一条记录,不然就全是null,你试着加上这句话看行不行!
    看到这句没有?String fileName = rs.getString("filename");   //有值
    我第一个字段都有值了,证明我肯定取的是第一条记录拉,怎么会没有rs.next呢?-----楼主有没有提交啊,是不是在数据库中添加数据却没有提交
    怎么可能,我在没有运行系统的时候,直接在数据库里面查询都可以查到数据,没看到:(在数据库中执行查询,确定对应blob字段有值)、buffer我调试过了,保证非空,且执行完毕后在数据库中查询blob字段显示有值:(OraBlob)------呵呵,oracle的blob不是这么玩的,应该这样……
    这个样子我试过了,没看到:
    使用(OracleResultSet)rs).getBLOB("sfile");则必须使用weblogic自带一个weblogic.*.*.OracleResultSet
    对象。同样结果为null
    大家的帮忙我很感谢,但希望看清楚我说明的那些,那样就可以免掉不必要的讨论了……我现在及其怀疑数据库本身有问题……
    谁能给我个读取oracle的blob数据转换成byte[]数组的可运行并成功的实例???????????
      

  4.   

    String result="";
        BLOB bCont;
        byte[] data;
        Statement stament=null;
        try
        {
          stament=conn.createStatement();//conn是Connection的对象
          resultSet=stament.executeQuery("select recvdata from ComLog "+
                                "where SIComLogid="+id;//id是参数
          while(resultSet.next())
          {        //分析接收的数据
            result="\n接收的数据\n----------------------------\n";
            bCont = ((OracleResultSet)resultSet).getBLOB("recvdata");
            if(bCont==null||bCont.length()==0)
            {
              result+="无数据";
            }
            else
            {
              data=bCont.getBytes(1,(int)bCont.length());//这个就是数据
              result+=GetDesc(data);
            }
            result+="\n------------------\n";        break;
    }
    这是我现在用的代码,有些业务方面的东西我删掉了,程序正常运行,没有问题的.你别告诉我不行.嘿嘿
      

  5.   

    如果用db2或者jdbc-odbc该如何写啊
      

  6.   

    帮我看看这个http://expert.csdn.net/Expert/topic/1226/1226149.xml?temp=.7509882
      

  7.   

    to : fastmask(我心烦) 
    我使用了你这种方法,其中OracleResultSet和BLOB来自
    import oracle.jdbc.OracleResultSet;
    import oracle.sql.BLOB;
    编译可以成功,但是,在weblogic下运行的时候,
    blob = ((OracleResultSet)rs).getBLOB(columnName);
    处报出错误如下:
    java.lang.ClassCastException: weblogic.jdbc.rmi.SerialResultSet应该是说rs对象为weblogic.jdbc.rmi.SerialResultSet这个类型,这样子直接造型错误。
    我试过将OracleResultSet改为SerialResultSet类型,同样为null
    难道是数据库连接上的问题么?我使用的是weblogic的连接池,该怎么解决呢??
      

  8.   

    那你就跟踪调试一下看看那个rs到底是什么类型了,后者把rs.toString(),可以看到实际类型,然后按照类型进行转换了。然后你看看weblogic.jdbc.rmi这个的帮助文档,也许他对这个blob也有自己的实现。
      

  9.   

    调试过了,还是没有法子解决阿……
    同样为null
    不知道哪位大虾能给个保证可以执行成功的,且和fastmask方法不同的实例阿??