用jdbc连接写blob到oracle成功,但换成jndi就不行了
环境:
eclipse 3.1 ibm websphere5.1
提示回滚了,多种设置setAutoCommit (true/false)都不行,查了很多资料无法解决,请大家帮忙
------解决方案--------------------
写入部分的事务代码贴出来啊
------解决方案--------------------
http://blogger.org.cn/blog/more.asp?name=hongrui&id=5306
------解决方案--------------------
如果是WebLogic服务器的话,注意Blob的写法要判断一下是哪个实现类进行特殊处理一下。
------解决方案--------------------
重量级服务器对待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();