JSP如何读取MySql中MEDIUMBLOB字符串

来源:互联网 发布:c语言英航卡管理系统 编辑:程序博客网 时间:2024/05/01 09:36

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();

}

}

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 xp系统登录密码忘了怎么办 手机百度云网络出错怎么办 百度账号提示异常风险怎么办 刷xp框架卡米怎么办 全民k歌歌曲下架怎么办 全民k歌伴奏下架怎么办 苹果手机图片的图标打不开怎么办 电脑页面加载不出来怎么办 电脑主页面加载不出来怎么办 桌面图标不见了怎么办右键无反应 手机一直闪退该怎么办 点击华为设置闪退怎么办 小白摄像头获取视频文件失败怎么办 为什么解压文件老提示失败怎么办 b站sd卡写入失败怎么办 手机检测不到sd卡怎么办 华为sd卡不可用怎么办 u盘延缓写入失败怎么办 手机提示sd卡不可用怎么办 显示sd卡不可用怎么办 小米手机检测不到sd卡怎么办 小米手机sd卡写入失败怎么办 没有检测到sd卡怎么办 e站图片配额用尽怎么办 内存卡密码忘了怎么办 电脑上酷狗音乐播放失败怎么办 播放失败不支持该文件怎么办 手机山寨云资源失效怎么办 支付密码输错了怎么办 微信密码锁定了怎么办 电脑网易云音乐闪退怎么办 逆战耳机电流声怎么办 肠道感染一直吃药治不好怎么办 如果24小时以后还没到账该怎么办 在游戏平台充值没到账该怎么办 充值豪华黄钻没到账该怎么办 起点签到签满了怎么办 ipad锁屏声音小怎么办 扣扣邮箱文件超大了怎么办 网易邮箱图片已过期怎么办 邮箱里面的文件过期了怎么办