• Oracle JDBC存入图片Blob


    创建测试表

    create table test_img(
      id    integer primary key,
      name  varchar2(32),
      image blob
    );

    存储图片

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import oracle.sql.BLOB;
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            PreparedStatement pst = null;
            ResultSet rs = null;
            Connection conn = ConnectionManager.getConnection();
            String sql = "insert into test_img(id,name,image) values(?,?,?)";
            try {
                pst = conn.prepareStatement(sql);
                pst.setInt(1, 1);
                pst.setString(2, "test");
                pst.setBlob(3, BLOB.empty_lob());  //插入空对象empty_blob()  
                int ii = pst.executeUpdate();
    
                OutputStream os = null;
                String q_sql = "select image from test_img where id = ? for update"; // 锁定数据行进行更新  
                pst = conn.prepareStatement(q_sql);
                pst.setInt(1, 1);
                rs = pst.executeQuery();
                if (rs.next()) {
                    oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("image");
                    os = blob.getBinaryOutputStream();
                    InputStream is = new FileInputStream("D:\image.jpg");
                    int i = 0;
                    while ((i = is.read()) != -1) {
                        os.write(i);
                    }
                }
                os.flush();
                os.close();
                ConnectionManager.closeAll(rs, pst, conn); // 关闭资源
    
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    JDBC辅助类

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class ConnectionManager {
        public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
        public static final String URL = "jdbc:oracle:thin:@localhost:1521/orcl";
        public static final String USERNAME = "test";
        public static final String PASSWORD = "test";
        /**
         * 通过静态代码块 注册数据库驱动
         */
        static{
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获得Connection
         * 
         * @return
         */
        public static Connection getConnection() {
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
            }catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        /**
         * 关闭ResultSet
         * @param rs
         */
        public static void closeResultSet(ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭Statement
         * @param st
         */
        public static void closeStatement(Statement st) {
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭Connection
         * @param conn
         */
        public static void closeConnection(Connection conn) {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        /**
         * 关闭全部
         * @param rs
         * @param sta
         * @param conn
         */
        public static void closeAll(ResultSet rs,Statement sta,Connection conn){
            closeConnection(conn);
            closeStatement(sta);
            closeResultSet(rs);
        }
    
    }

    效果如图:

  • 相关阅读:
    背包问题
    floyed算法
    读Windows编程
    PB串口编程资料(转)
    读TCP-IP详解卷1:协议(1)
    Oracle把两个空格以上的空格,替换为两个空格
    PB中multieditline空间的“~r~n"转"~n"
    PB中掉用Run以后,等Run的程序关闭以后才会执行后边的语句
    一个关于生成随机数的算法
    英语词根
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4129050.html
Copyright © 2020-2023  润新知