用jdbc连接写blob到oracle成功,但换成jndi就不行了
环境:
eclipse 3.1   ibm websphere5.1提示回滚了,多种设置setAutoCommit (true/false)都不行,查了很多资料无法解决,请大家帮忙

解决方案 »

  1.   

    http://blogger.org.cn/blog/more.asp?name=hongrui&id=5306
      

  2.   

    http://blogger.org.cn/blog/more.asp?name=hongrui&id=5340
      

  3.   

    如果是WebLogic服务器的话,注意Blob的写法要判断一下是哪个实现类进行特殊处理一下。
      

  4.   

    重量级服务器对待Blob,Clob有自己的特性
    所以此时JDBC与JNDI的进库操作会有差异,出库就无所谓了
    下段Coding希望对你有帮助    //通过JNDI获得数据库连接
        Context context = new InitialContext();
        ds = (DataSource) context.lookup("ORA_JNDI");
        Connection con = ds.getConnection();
        con.setAutoCommit(false);
        Statement st = con.createStatement();
        //插入一个空对象empty_clob()
        st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
        //锁定数据行进行更新,注意“for update”语句
        ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
        if (rs.next())
        {
            //得到java.sql.Clob对象后强制转换为weblogic.jdbc.vendor.oracle.OracleThinClob(不同的App Server对应的可能会不同)
            weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");
            Writer outStream = clob.getCharacterOutputStream();
            //data是传入的字符串,定义:String data
            char[] c = data.toCharArray();
            outStream.write(c, 0, c.length);
        }
        outStream.flush();
        outStream.close();
        con.commit();
        con.close();
      

  5.   

    其它都没问题,我也基本是这么做的,关键是
     //得到java.sql.Clob对象后强制转换为weblogic.jdbc.vendor.oracle.OracleThinClob(不同的App Server对应的可能会不同)
            weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");这一句中的weblogic.jdbc.vendor.oracle.OracleThinClob我在WebSphere中找不到类似的类,无法替换,我被卡在这里了,因为必须用WebSphere
      

  6.   

    WebSphere的POOL有问题吗?如果非得有问题就把WebLogic的weblogic.jar加到CLASSPATH中去
      

  7.   

    那个weblogic有48M,太大了,有什么方便的方法么