好像是先commit,再关掉连接就能存进去了吧。
我用的是
PreparedStatement ps = Cn.prepareStatement("insert into table values(?)");
ps.setBinaryStream(1,fis,(int)file.length());
但图像大小受限制,最大4K。唉,只能用long row,存50K,不知道是不是数据库没搞好
:(

解决方案 »

  1.   

    应该将数据库连接的自动提交设为falseconn.setAutoCommit(false);
      

  2.   

    或者oracle版本低。
    8.1.7就可以了
      

  3.   

    select PortraitData from portrait where personcode=1 for update然后用OraclePreparedStatement的setBLOB(1,blob)
      

  4.   

    终于搞定了。
    解决方法:(  参考aswill(小泥鳅不见首尾)和bblook(比比路克) )      database.setAutoCommit(false);
          query="select PortraitData from portrait where personcode=1 for update";
          ps=database.createPreparedStatement(query);
          ResultSet rs=ps.executeQuery();
          rs.next();
          BLOB blob=((OracleResultSet)rs).getBLOB("PortraitData");
          OutputStream os=blob.getBinaryOutputStream();
          os.write(fbyte);
          os.flush();
          ps.execute("commit");
          database.setAutoCommit(true);
      

  5.   

    终于搞定了。
    解决方法:(  参考aswill(小泥鳅不见首尾)和bblook(比比路克) )  
          database.setAutoCommit(false);
          query="select PortraitData from portrait where personcode=1 for update";
          ps=database.createPreparedStatement(query);
          ResultSet rs=ps.executeQuery();
          rs.next();
          BLOB blob=((OracleResultSet)rs).getBLOB("PortraitData");
          OutputStream os=blob.getBinaryOutputStream();
          os.write(fbyte);
          os.flush();
          ps.execute("commit");
          database.setAutoCommit(true);问题分析:
        这里有两个问题:
    1、由于BLOB是从SELECT语句中选出来的,要修给BLOB,必须加FOR UPDATE语句(否则出现“LOB未锁定...”的错误)。(不知有没有简便的方法取得BLOB并向它写入数据)。
    2、因为JB中对数据库的操作默认为“每执行一句SQL都当作事务提交”,提交后就无法对提交前取得的BLOB修改,(否则出现“读取顺序不一致”的错误)。所以要setAutoCommit(false),再写入BLOB,最后execute("commit")。