JSP如何讀取MySql中MEDIUMBLOB字串

來源:互聯網
上載者:User

JSP如何讀取MySql中MEDIUMBLOB字串,並顯示?

實現向MYSQL資料庫中儲存或提取圖片檔案

一些情況下,需要向資料庫中儲存一些2進位檔案,比片檔案等,這時候,向資料庫儲存資料不同於普通的字串儲存,我們需要對這個2進位檔案使用JAVA處理2進位流的API進行處理,然後再進行儲存。我們需要進行以下步驟來實現:

向資料庫中隱藏檔的時候,一樣使用標準SQL語句,如: insert into database (column1, column2,..)
values(v1,v2,…);注意的是,要在建立存放2進位檔案的TABLE時,存放的欄位要使用BLOB類型,而不是普通的VARCHAR等。
BLOB是專門儲存2進位檔案的類型,他還有大小之分,比如mediablob,logblob等,以儲存大小不同的2進位檔案,一般的圖形檔案使用
mediablob足以了。

1 見以下代碼實現向MYSQL中儲存圖片檔案:

…………………………

private final String insertquery = "insert into employeephoto
(Employee_ID,Binary_Photo,LastMod,Created) values (?,?, NOW(), NOW())";

public void doInsertStaffPic(String loginname,String source_URL) {

Connection conn = null;

PreparedStatement pre = null;

try {

// 進行資料庫連接,這裡我使用的是在STRUTS中配置的串連池,當然也可// 以自己通過JDBC直接連

conn = DBProcess.getConnection();

//從圖片源中獲得圖片對象並寫到緩衝中

Image image = new ImageIcon(source_URL).getImage();

BufferedImage bImage = new BufferedImage(image.getWidth(null),

image.getHeight(null), BufferedImage.TYPE_INT_RGB);

Graphics bg = bImage.getGraphics();

bg.drawImage(image, 0, 0, null);

bg.dispose();

//將圖片寫入2進位的輸出資料流 並放如到byte[] buf中

ByteArrayOutputStream out = new ByteArrayOutputStream();

ImageIO.write(bImage, "jpg", out);

byte[] buf = out.toByteArray();

//獲得這個輸出資料流並將他設定到BLOB中

ByteArrayInputStream inStream = new ByteArrayInputStream(buf);

pre = conn.prepareStatement(insertstaffpicquery);

pre.setString(1, loginname);

pre.setBinaryStream(2, inStream, inStream.available());

// 執行寫如資料

pre.executeUpdate();

} catch (Exception exc) {

exc.printStackTrace();

}

finally {

try {

pre.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

2 下代碼實現從MYSQL中擷取圖片檔案並寫入本地檔案系統:

…………………………

private final String writeoutquery = "insert into employeephoto
(Employee_ID,Binary_Photo,LastMod,Created) values (?,?, NOW(), NOW())";

// retrive the picture data from database and write it to the local disk

public void doGetAndShowStaffPic(String loginname, String dir) {

FileOutputStream output = null;

InputStream input = null;

Connection conn = null;

ResultSet rs = null;

PreparedStatement pre = null;

try {

conn = DBProcess.getConnection();

pre = conn.prepareStatement(writeoutquery);

pre.setString(1, loginname);

rs = pre.executeQuery();

if (rs.next()) {

// 從資料庫獲得2進位檔案資料

Blob image = rs.getBlob("Binary_Photo");

// setup the streams

Input = image.getBinaryStream();

try {

// 設定寫出路徑。

output = new FileOutputStream(dir);

} catch (FileNotFoundException e1) {

e1.printStackTrace();

}

// set read buffer size 注意不要設定的太小,要是太小,圖片可能不完整

byte[] rb = new byte[1024000];

int ch = 0;

// process blob

try {

// 寫入本地檔案系統

while ((ch = input.read(rb)) != -1) {

output.write(rb, 0, ch);

}

} catch (IOException e) {

e.printStackTrace();

}

try {

input.close();

} catch (IOException e) {

e.printStackTrace();

}

try {

output.close();

} catch (IOException e) {

e.printStackTrace();

}

}

} catch (SQLException e) {

e.printStackTrace();

}

finally {

try {

rs.close();

pre.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.