java : oracle 中 clob 和 blob 的读写注意事项

第一次操作oracle的clob类型就栽跟头了。当时参考的是 http://www.iteye.com/topic/100066 这篇文章。

tomcat启动后,出库操作没什么问题,用 java.sql.Clob 就行,不需要强制转换为 oracle.sql.CLOB。

入库操作时,原文章给出的方法如下(部分代码):

//插入一个空对象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对象后强制转换为oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
Writer outStream = clob.getCharacterOutputStream();
//data是传入的字符串,定义:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}

 在本机上运行正常,部署到服务器后报 java .lang.ClassCastException 错误,提示 oracle.sql.CLOB 不能强制转换为 oracle.sql.CLOB 类型。我靠,这不是胡说呢嘛!!!研究了下本地和服务器的区别,发现服务器的tomcat的lib下面也有个ojdbc14.jar,跟工程里的一样,而本地的tomcat没有这个包,看来问题就在这里了(当然这是研究了四个多小时后才发现的)。

最后的解决办法是:删掉服务器上工程里的ojdbc14.jar这个包,同时将上面那段代码中的

// 得到java.sql.Clob对象后强制转换为oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");

/**
   * 改为:
   */
import oracle.sql.CLOB;

// 得到Clob对象后强制转换为CLOB
CLOB clob = CLOB rs.getClob("CLOBATTR");

 至于为什么直接写 oracle.sql.CLOB 不行,暂时还没研究,这两天忙死了。记录下来,等项目上线后再研究。

你可能感兴趣的:(java,oracle,sql,tomcat,c)