`
rain_2372
  • 浏览: 675794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库中图片的操作(字节流的操作)

    博客分类:
  • java
阅读更多
package com.fww.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* @author fu
* 类初始化加载的时候实现驱动的注册
* 本类实现的是一个数据库的连接的操作的工具类,
* 其中提供的是数据库的连接以及数据库最后的资源释放的操作
*
*/
public class JDBCUtil {

//数据库的连接时候的url
private static String url = "jdbc:mysql://localhost:3306/jdbc";
//数据库的用户
private static String user = "root";
//数据库用户对用的密码
private static String password = "sa";

static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
*
* 获取数据库连接的操作
* @return 已经和数据库进行连接的connection对象
* @throws SQLException 数据库连接获取失败的操作
*/
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}


/**
* @param conn 已经和数据库进行连接的connection对象
* @param sql 需要进行执行的sql语句
* @return 预处理的对象preparedStatement
*/
public static PreparedStatement getPreparedStatement(Connection conn,String sql){
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}

/**
* 数据库连接箱资源释放的操作
* @param conn 和数据库进行连接的对象
* @param ps 预处理的preparedStatement对象
* @param rs sql执行的结果集
*/
public static void close(Connection conn, Statement ps, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

}
2. [代码]字节流的操作(图片为实例)     跳至 [1] [2] [全屏预览]
package com.fww.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.fww.util.JDBCUtil;

/**
* @author fu
* 实现的是一个大的文件的存放的操作,
* 典型的实例是一个图片的操作
* 实际上是一个使用到文件的字节流的操作的
*/
public class BlobTest {

public static void main(String[] args) {
// insert();//文件的存放的测试
read();
}

//插入的操作实例
static void insert(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {

conn = JDBCUtil.getConnection();
String sql = "insert into blob_test(blob_text) values(?)";
ps = JDBCUtil.getPreparedStatement(conn, sql);
//一个用于进行存放的图片数据
File file = new File("43.jpg");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in, (int)file.length());

int i = ps.executeUpdate();

in.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
JDBCUtil.close(conn, ps, rs);
}

}


//实现一个文件的读取的操作
static void read() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {

conn = JDBCUtil.getConnection();
String sql = "select blob_text from blob_test where 1=?";
ps = JDBCUtil.getPreparedStatement(conn, sql);
ps.setInt(1, 1);
rs = ps.executeQuery();
while(rs.next()){
Blob blob = rs.getBlob(1);
InputStream in = blob.getBinaryStream();
//可以直接的拿到字节流的操作如下:
//in = rs.getBinaryStream(1);

File file = new File("test.jpg");
OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
byte[] buff = new byte[1024];
for(int i=0;(i=in.read(buff))>0;){
out.write(buff, 0, i);
}
out.close();
in.close();
}

} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
JDBCUtil.close(conn, ps, rs);
}
}


}
转:http://www.oschina.net/code/snippet_1377870_26795 数据库中图片的操作(字节流的操作)
分享到:
评论

相关推荐

    springboot使用itext生成pdf并保存到本地

    html渲染页面转换为pdf并设置页眉,页码,水印,目录,二维码

    C#基类库(苏飞版)

    2.一个操作Sql2005数据库的类(备份,还原,分离,附加,添加删除用户等操作) 这主要是为了让大家练手的,他使用C#代 码的方法实现了对数据的 备份,还原,分离,附加,添加和删除用户等操作 3.DbHelperMySQL类 ...

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    5.3 字节流 99 5.3.1 使用类FileInputStream读文件 99 5.3.2 使用类FileOutputStream写文件 101 5.4 字符流 102 5.4.1 使用类FileReader读文件 103 5.4.2 使用类FileWriter写文件 104 5.5 回压字符流 106 5.6 文件...

    网管教程 从入门到精通软件篇.txt

     要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。  范例  下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:  下例将在硬盘上添加一个 20 MB 的分区:  ...

    易语言程序免安装版下载

    修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    将音频文件转二进制分包存储到Redis的实现方法(奇淫技巧操作)

    三、将音频流分成若干个包,以List列表形式缓存到redis数据库中 四、从redis数据库中获取数据,转换成音频流输出到浏览器播放、实现音频下载功能 程序如下: 1.在SpringBootpom.xml文件中添加Redis依赖 <!--...

    1345个易语言模块

    SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec SysResInfo.ec taskbar.ec TCP 服务器.ec tcsxk.ec TESTECOM.EC tip.ec Tooltip26.ec Tooltip261.ec Tooltip27.ec ...

    1350多个精品易语言模块

    SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec SysResInfo.ec taskbar.ec TCP 服务器.ec tcsxk.ec TESTECOM.EC tip.ec Tooltip26.ec Tooltip261.ec Tooltip27.ec ...

    delphi 开发经验技巧宝典源码

    0167 判断字符中是否有双字节 109 0168 判数输入的字符串是否为整数 109 5.4 字符串的个数问题 110 0169 获取文字中英文单词的个数 110 0170 如何统计两个子字符串之间的字符的个数 111 0171 判断字符在...

    delphi 开发经验技巧宝典源码06

    0167 判断字符中是否有双字节 109 0168 判数输入的字符串是否为整数 109 5.4 字符串的个数问题 110 0169 获取文字中英文单词的个数 110 0170 如何统计两个子字符串之间的字符的个数 111 0171 判断字符在...

    java源码包2

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java开源包5

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    java源码包---java 源码 大量 实例

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    JAVA上百实例源码以及开源项目源代码

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    java源码包3

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java源码包4

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

Global site tag (gtag.js) - Google Analytics