必威体育Betway必威体育官网
当前位置:首页 > IT技术

JSP如何读取MySql中MEDIUMBLOB字符串

时间:2019-08-11 23:14:21来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

mediumblob

JSP如何读取mysqlmediumBLOB字符串,并显示?

实现向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();

}

}

}

相关阅读

【宾州中文树库CTB】数据读取

CTB8.0 共有如下类型文件:  Newswire: [0001-0325, 0400-0454, 0500-0540, 0600-0885, 0900-0931, 4000-4050]——后缀.nw.raw 

max92xx加串解串示例代码[可读取16位寄存器地址]

主要逻辑函数就是max92xx_i2c_read/write /*! * @file max92xx.c * * @brief max92xx GMSL1 DSI Serializer/DESerializer dr

Java读取ZIP文件ZipEntry.getsize()总是返回-1?

解决方法(Code)在文章最后面,耐心看完 今天在项目中遇到一个问题,有一个需求是需要验证下载的ZIP文件,解压读取ZIP文件夹内部的文件,文

ResourceBundle与Properties读取配置文件

ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取

移动硬盘 无法读取 插入电脑没反应 无法识别 怎么办

最常见的原因:可能是USB接口不良等原因;如果硬盘 接口这些都没有问题,而且插上之后,明显感觉移动硬盘有反应。那应该就是系统硬盘驱动

分享到:

栏目导航

推荐阅读

热门阅读