以blob字段存入,在网上收一下

解决方案 »

  1.   


    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();
        }
    }
      

  2.   

    usabcd(9号公路上的3名共军) 写的非常详细了
      

  3.   

    usabcd写得好,我正好也不太明白。
      

  4.   

    你在int len = is.available();下面加一个判断不就结了吗
    if(len>500000){ // >500k
      报错; 返回
    }
      

  5.   

    我换个小点的文件还是不行,保存的时候好像没有错,但是看看库里面却没有保存进。
    用你下面的is = rs.getBinaryStream("sys_bolb"); is一直是null.
    望能解答一下,why?
      

  6.   

    BLOB支持最大的文件可達4GB之大!
      

  7.   

    usabcd给出的写法跟我知道的不一样,他的有没有问题我不清楚。但是下面文章中的可以用:
    http://dev.csdn.net/develop/article/18/18955.shtm
      

  8.   

    楼主, 我给你的例子是经过我严格测试过的, 放心,我不会误人子弟的。
    我这里20几M的文件都存进去了。Oracle 8.1.7
    只能说的你环境不对或者其他原因,比如JDBC驱动不对等。
    一定要用支持JDBC2.0的驱动。
      

  9.   

    to  icystone(石冰)
     你给的例子也是对的,但只能用于Oracle
     我给的代码只引用了JDBC本身的接口,因此
     可以应用于一切支持大字段的数据库。象Oracle, DB2, MSSQL, PostgreSQL等等