***为什么oracle中blob类型超过4036就存不进去?急!!!*** 不要用thin用oci8jdbc:oracle:oci8:@db 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用longraw型的吧,没问题。我也遇到过这个问题,也是存了超过一定大小就存不进去了。 没碰到过这问题啊,blob最大有4G呢。我存过20兆的文件,没有问题,速度稍慢点 我用以下的方法就没有问题这是问什么啊? conn.setAutoCommit(false); sql="insert into lobdemo (key,blob_col) values (" + idkey + ",'0')"; Statement stmt1=conn.createStatement(); stmt1.executeUpdate(sql); stmt1.execute("commit"); sql = "select blob_col from lobdemo where key=" + idkey + " for update"; res = stmt1.executeQuery(sql); res.next(); oracle.jdbc2.Blob blob=((oracle.jdbc.driver.OracleResultSet) res).getBLOB(1); FileInputStream fis = new FileInputStream(imgFile); OutputStream fos = ((oracle.sql.BLOB)blob).getBinaryOutputStream(); byte[] buffer1 = new byte[1024]; int len; while ( (len = fis.read(buffer1)) != -1) fos.write(buffer1, 0, len); 对于流的操作,最好使用BufferConnection conn = null; ResultSet rs = null; Statement stmt = null; BufferedInputStream bis = null; BufferedOutputStream bos = null; oracle.sql.BLOB content = null; try { conn = getConnection(); conn.setAutoCommit(false); stmt = conn.createStatement(); stmt.executeUpdate(sql); rs = stmt.executeQuery(sqlBlob); while (rs.next()) { content = (oracle.sql.BLOB)rs.getBlob("content"); } bos = new BufferedOutputStream(content.getBinaryOutputStream()); bis = new BufferedInputStream(sis); byte[] buffer = new byte[ content.getBufferSize() ]; int bytesRead = 0; int hasRead = 0; while( ( bytesRead = bis.read( buffer ) ) != -1 ) { hasRead += bytesRead; if (hasRead > fileSize) { bytesRead = bytesRead - (hasRead - fileSize); } bos.write( buffer, 0, bytesRead ); } bos.flush(); bos.close(); bis.close(); conn.commit(); conn.setAutoCommit(true); } catch(Exception e1) { System.out.println("e1: " + e1.getMessage()); try { conn.rollback(); conn.setAutoCommit(true); bos.flush(); bos.close(); bis.close(); } catch (Exception e2) { System.out.println("e2: " + e2.getMessage()); } } finally { this.disconnect(rs, stmt, conn); } 请问为什么用IE得到的网页信息和Java得到的不一样? 获取 数码照片的 拍照日期? 鼠标放上去让图片放大??? 初学者问题 怎样用java读取网页的内容? 一个java连接oracle10g的问题,郁闷一下午了,高人指点一下 借贵地招个人,希望别被删贴呵呵 (急等)关于全文搜索问题 再散分。谁能给一些Applet画图的源码例子,给连接也行。 请教:怎样对并口进行读、写操作? 请问一下,在服务器上读写其他IP的某个端口,会不会受到本地防火墙的限制,要怎样解决? **********在jbuilder8下怎樣直接生成jar文件(第一個答對的就一定給分)
我也遇到过这个问题,也是存了超过一定大小就存不进去了。
conn.setAutoCommit(false);
sql="insert into lobdemo (key,blob_col) values (" + idkey + ",'0')";
Statement stmt1=conn.createStatement();
stmt1.executeUpdate(sql);
stmt1.execute("commit");
sql = "select blob_col from lobdemo where key=" + idkey + " for update";
res = stmt1.executeQuery(sql);
res.next();
oracle.jdbc2.Blob blob=((oracle.jdbc.driver.OracleResultSet) res).getBLOB(1);
FileInputStream fis = new FileInputStream(imgFile);
OutputStream fos = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
byte[] buffer1 = new byte[1024];
int len;
while ( (len = fis.read(buffer1)) != -1) fos.write(buffer1, 0, len);
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
oracle.sql.BLOB content = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
rs = stmt.executeQuery(sqlBlob);
while (rs.next()) {
content = (oracle.sql.BLOB)rs.getBlob("content");
}
bos = new BufferedOutputStream(content.getBinaryOutputStream());
bis = new BufferedInputStream(sis);
byte[] buffer = new byte[ content.getBufferSize() ];
int bytesRead = 0;
int hasRead = 0;
while( ( bytesRead = bis.read( buffer ) ) != -1 ) {
hasRead += bytesRead;
if (hasRead > fileSize) {
bytesRead = bytesRead - (hasRead - fileSize);
}
bos.write( buffer, 0, bytesRead );
}
bos.flush();
bos.close();
bis.close();
conn.commit();
conn.setAutoCommit(true);
} catch(Exception e1) {
System.out.println("e1: " + e1.getMessage());
try {
conn.rollback();
conn.setAutoCommit(true);
bos.flush();
bos.close();
bis.close();
} catch (Exception e2) {
System.out.println("e2: " + e2.getMessage());
}
} finally {
this.disconnect(rs, stmt, conn);
}