如何将文件以流的形式保存到oracle数据库中 以blob字段存入,在网上收一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.io.*;import java.sql.*;public class DBTest { public void test() throws Exception { //create table table1 (fld1 varchar2(10), fld_blob long raw); String filename = "getstart.gif"; // file need to be save String sql1 = "insert into table1 (fld1, fld_blob) values(?, ?)"; String sql2 = "select fld_blob from table1 where fld1 = ? "; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConnection(); ps = conn.prepareStatement(sql1); InputStream is = new FileInputStream(filename); int len = is.available(); ps.setString(1, "2"); ps.setBinaryStream(2, is, len); ps.executeUpdate(); // read it to check if really save it to database. ps = conn.prepareStatement(sql2); ps.setString(1, "2"); rs = ps.executeQuery(); rs.next(); is = rs.getBinaryStream("fld_blob"); // now write it to a new file. OutputStream os = new FileOutputStream("new_" + filename); byte[] b = new byte[512]; while (is.read(b, 0, b.length) != -1) { os.write(b); } os.close(); } catch (Exception e) { throw e; } finally { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } } private Connection getConnection() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:your_sid"; String user = "username"; String password = "password"; Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); return conn; } public static void main(String[] args) throws Exception { new DBTest().test(); }} usabcd(9号公路上的3名共军) 写的非常详细了 usabcd写得好,我正好也不太明白。 你在int len = is.available();下面加一个判断不就结了吗if(len>500000){ // >500k 报错; 返回} 我换个小点的文件还是不行,保存的时候好像没有错,但是看看库里面却没有保存进。用你下面的is = rs.getBinaryStream("sys_bolb"); is一直是null.望能解答一下,why? BLOB支持最大的文件可達4GB之大! usabcd给出的写法跟我知道的不一样,他的有没有问题我不清楚。但是下面文章中的可以用:http://dev.csdn.net/develop/article/18/18955.shtm 楼主, 我给你的例子是经过我严格测试过的, 放心,我不会误人子弟的。我这里20几M的文件都存进去了。Oracle 8.1.7只能说的你环境不对或者其他原因,比如JDBC驱动不对等。一定要用支持JDBC2.0的驱动。 to icystone(石冰) 你给的例子也是对的,但只能用于Oracle 我给的代码只引用了JDBC本身的接口,因此 可以应用于一切支持大字段的数据库。象Oracle, DB2, MSSQL, PostgreSQL等等 想为自己定义一个算法类方便调用,请问怎么定义。 这是怎么回事? 如何查找某字符串在整个字符串里的所有位置 java笔试的脑筋急转弯,想了很久没有想出来。 SWT TabFolder tabitem的问题 请教:如何把YY-MM-格式的日期转化为DDYYMMDD格式的日期 请熟悉股票的朋友帮帮忙 由一個程序所想到的 vector的问题 请教各位大侠:如何在企业间交换信息(Message)? 100 分求JasperReport的中文文档 用JToolBar做浮动菜单有问题
import java.io.*;
import java.sql.*;public class DBTest { public void test() throws Exception {
//create table table1 (fld1 varchar2(10), fld_blob long raw);
String filename = "getstart.gif"; // file need to be save
String sql1 = "insert into table1 (fld1, fld_blob) values(?, ?)";
String sql2 = "select fld_blob from table1 where fld1 = ? ";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null; try {
conn = getConnection();
ps = conn.prepareStatement(sql1);
InputStream is = new FileInputStream(filename);
int len = is.available();
ps.setString(1, "2");
ps.setBinaryStream(2, is, len);
ps.executeUpdate(); // read it to check if really save it to database.
ps = conn.prepareStatement(sql2);
ps.setString(1, "2");
rs = ps.executeQuery();
rs.next();
is = rs.getBinaryStream("fld_blob");
// now write it to a new file.
OutputStream os = new FileOutputStream("new_" + filename);
byte[] b = new byte[512];
while (is.read(b, 0, b.length) != -1) {
os.write(b);
}
os.close();
} catch (Exception e) {
throw e;
} finally {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
}
} private Connection getConnection() throws Exception {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:your_sid";
String user = "username";
String password = "password";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} public static void main(String[] args) throws Exception {
new DBTest().test();
}
}
if(len>500000){ // >500k
报错; 返回
}
用你下面的is = rs.getBinaryStream("sys_bolb"); is一直是null.
望能解答一下,why?
http://dev.csdn.net/develop/article/18/18955.shtm
我这里20几M的文件都存进去了。Oracle 8.1.7
只能说的你环境不对或者其他原因,比如JDBC驱动不对等。
一定要用支持JDBC2.0的驱动。
你给的例子也是对的,但只能用于Oracle
我给的代码只引用了JDBC本身的接口,因此
可以应用于一切支持大字段的数据库。象Oracle, DB2, MSSQL, PostgreSQL等等