往oracle里存储数据时,数据类型为varcher2(4000),由于字符串长度过长,导致报错误,寻求解决方法

superares1984 2008-03-21 09:58:06
本人试用过【statement.setCharacterStream(i + 1, new StringReader((String) params[i]),((String) params[i]).length());】,可是没有解决掉,需要存储的字符长度大约在3994字节。
本人想用oci去连接数据库来解决这个问题,但由于没有使用过,因此出现以下现象
【DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection("jdbc:oracle:oci9:@ORCL","BATCH","BATCH");】用这个语句报『Invalid Oracle URL specified 』这个错误
如果用【DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection("jdbc:oracle:oci8:@ORCL","BATCH","BATCH");】用这个语句报『no ocijdbc9 in java.library.path 』这个错误
如有了解OCI的 请告诉我详细配置方法,谢谢,或者有其他解决方法的也可以,在此表示感谢。
...全文
331 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Squall1009 2008-03-21
  • 打赏
  • 举报
回复
你确定你插入的字节(这里是字节不是字符)不会超过4000的话,换你的jdbc驱动到最新的版本可以解决这个问题。
如果超过4000的话,直接clob


你的另外一个帖子问oci配置的已经回复
http://topic.csdn.net/u/20080320/11/cabd6ae7-2c0a-4326-8b01-52260407b4fd.html?seed=1465560473
supershb 2008-03-21
  • 打赏
  • 举报
回复
用long字段来处理。参考写法如下:

table product_e{
EPRODUCTID varchar2(32);
detail long;
detaillength number(6);
}

//写入
sSql = "update product_e set detail = ?,detaillength=? where EPRODUCTID = '"+ sEProductID +"'";
PreparedStatement pre0 = Sqlca.conn.prepareStatement(sSql);
pre0.clearParameters();
byte abyte0[] = (sDetail ).getBytes("GBK");
pre0.setBinaryStream(1, new ByteArrayInputStream(abyte0,0,abyte0.length), abyte0.length);
pre0.setInt(2, abyte0.length);
pre0.executeUpdate();
pre0.close();

//读出
sSql = "select detail,detaillength from product_e where EPRODUCTID = '"+ sEProductID +"'";
rs = Sqlca.getASResultSet(sSql);
if (rs.next()){
sDetail = "";
if(rs.getInt("detaillength")>0)
{
java.io.InputStream inStream = null;
inStream = rs.getBinaryStream("detail");
byte bb[] = new byte[rs.getInt("detaillength")];
int iByte = 0;
while(true)
{
iByte = inStream.read(bb);
if(iByte<=0)
break;
sDetail = sDetail + new String(bb, "GBK");
}
}
}
rs.getStatement().close();

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧