MySQL儲存文字和圖片的方法
阿新 • • 發佈:2020-01-09
Oracle中大文字資料型別
Clob 長文字型別 (MySQL中不支援,使用的是text) Blob 二進位制型別
MySQL資料庫
Text 長文字型別 TINYTEXT: 256 bytes TEXT: 65,535 bytes => ~64kb MEDIUMTEXT: 16,777,215 bytes => ~16MB LONGTEXT: 4,294,967,295 bytes => ~4GB Blob 二進位制型別
例如:
建表
CREATE TABLE test( id INT PRIMARY KEY AUTO_INCREMENT,content LONGTEXT,-- 文字欄位 img LONGBLOB -- 圖片欄位 );
儲存文字時是以字元型別儲存,儲存圖片時是以二進位制型別儲存,具體使用的設定引數方法,和獲取資料方法不同。
例如:
// 儲存文字時 // 儲存時,設定引數為字元流 FileReader reader pstmt.setCharacterStream(1,reader); // 獲取引數時 // 方式1: Reader r = rs.getCharacterStream("content"); // 獲取長文字資料,方式2: System.out.print(rs.getString("content")); // 儲存二進位制圖片時 // 設定引數為2進位制流 InputStream in pstmt.setBinaryStream(1,in); // 獲取2進位制流 InputStream in = rs.getAsciiStream("img");
/** * 儲存照片 * */ @Test public void test2(){ String sql = "insert into test(img) values(?)"; try{ con = JDBCUtil.getConnection(); pstmt = con.prepareStatement(sql); // 設定引數 // 獲取文字 File file = new File("f:/a.jpg"); InputStream in = new FileInputStream(file); // 設定引數為2進位制流 pstmt.setBinaryStream(1,in); // 執行sql pstmt.executeUpdate(); in.close(); }catch (Exception e) { e.printStackTrace(); }finally{ try { JDBCUtil.close(con,pstmt); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 獲取照片 * */ @Test public void test3(){ String sql = "select * from test where id=?;"; try{ con = JDBCUtil.getConnection(); pstmt = con.prepareStatement(sql); // 設定引數 pstmt.setInt(1,2); // 執行查詢 rs = pstmt.executeQuery(); while(rs.next()){ byte[] buff = new byte[1024]; InputStream in = rs.getAsciiStream("img"); int l=0; OutputStream out = new FileOutputStream(new File("f:/1.jpg")); while((l=in.read(buff))!=-1){ out.write(buff,l); } in.close(); out.close(); } }catch (Exception e) { e.printStackTrace(); }finally{ try { JDBCUtil.close(con,pstmt); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結