1. 程式人生 > >插入和讀取blob和clob型別資料

插入和讀取blob和clob型別資料

/******************blob*********************/
public class Blob_Test {
    //建立表
    @Test
    public void create(){
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs = null;

        JDBCUtils utils = JDBCUtils.getInstance();
        String sql ="create table Blob_Test(id int not null auto_increment,image BLOB,PRIMARY KEY(ID))"
; try { conn=utils.getConnection(); ps = conn.prepareStatement(sql); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } //插入Blob資料 @Test public
void insert() throws IOException{ Connection conn=null; PreparedStatement ps=null; ResultSet rs = null; JDBCUtils utils = JDBCUtils.getInstance(); //得到一個檔案 File file = new File("src/2.jpg"); //建立位元組輸入流 InputStream in = new FileInputStream(file); //建立sql語句
String sql ="insert into Blob_Test(image) values (?)"; try { conn=utils.getConnection(); ps = conn.prepareStatement(sql); //為?賦值 使用setBinaryStream方法 ps.setBinaryStream(1, in, file.length()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } //讀取資料庫blob資料 @Test public void read() throws IOException{ Connection conn=null; PreparedStatement ps=null; ResultSet rs = null; JDBCUtils utils = JDBCUtils.getInstance(); //建立一個檔案 File file = new File("BeautifulGirl.jpg"); //建立一個位元組輸出流 OutputStream out = new FileOutputStream(file); //建立sql語句,從資料庫查出blob資料 String sql ="select image from Blob_Test"; try { conn=utils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); //建立一個數組 byte b[] = new byte[1024]; while(rs.next()){ //得到結果集中的blob資料 Blob blob = rs.getBlob("image"); //得到一個輸入流 InputStream in = blob.getBinaryStream(); int len; while((len=in.read(b))!=-1){ //將資料流的資料寫到輸出流 out.write(b, 0, len); } //關閉流 out.close(); in.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } } /******************clob*********************/ public class Clob_Test { //建立表 @Test public void create(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs =null; JDBCUtils utils = JDBCUtils.getInstance(); try { String sql = "create table Clob_Test(id int not null auto_increment,text longtext,primary key(id))"; conn = utils.getConnection(); ps= conn.prepareStatement(sql); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } //向資料庫插入clob資料 @Test public void insert() throws IOException{ Connection conn=null; PreparedStatement ps=null; ResultSet rs =null; JDBCUtils utils = JDBCUtils.getInstance(); //將一個檔案插入到資料庫 File file = new File("src/com/hdbc/day01/JDBCUtils.java"); //建立一個字元輸入緩衝流 Reader reader = new BufferedReader(new FileReader(file)); try { String sql = "insert into Clob_Test(text) values (?)"; conn = utils.getConnection(); ps= conn.prepareStatement(sql); //以字元流的形式將檔案存到資料庫 ps.setCharacterStream(1, reader,file.length()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } //從資料庫讀取clob資料 @Test public void read() throws IOException{ Connection conn=null; PreparedStatement ps=null; ResultSet rs =null; JDBCUtils utils = JDBCUtils.getInstance(); //將clob資料讀到檔案中 File file = new File("JDBCUtils_bak.java"); //建立一個字元輸出緩衝流 Writer writer = new BufferedWriter(new FileWriter(file)); char ch[] = new char[1024]; try { String sql = "select text from Clob_Test"; conn = utils.getConnection(); ps= conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ //兩種方式: //一種是先得到資料clob資料, // Clob clob = rs.getClob("text"); //再得帶字元輸入流 // Reader reader = clob.getCharacterStream(); //第二種是可以直接得到clob資料的輸入流 Reader reader = rs.getCharacterStream("text"); for(int i=0;(i=reader.read(ch))>0;){ //將資料寫到目標檔案中 writer.write(ch, 0, i); } writer.close(); reader.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } } }