JDBC存图片与取出图片

mysql存图片

可用Blob对象表示图片,将Blob插入到数据库时 利用PrepareStatement对象的setBinaryStream方法,实现将Blob数据保存到数据库中

mysql取图片(写出到文件夹)

调用查询结构集的getBlob方法,获取数据库里的Blob对象,通过Blob对象的getBinaryStream方法获取输入流,便可以写出到文件中了

数据库表结构如下:
这里写图片描述
代码如下:

package _3;
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.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class P611 
{
    public static void main(String[] args) throws IOException 
    {
        try 
        {
            //1、加载驱动类
            Class.forName("com.mysql.jdbc.Driver");

            //2、建立连接 建立连接很耗时间 因为连接内部其实包含了Socket对象,是一个远程的连接。比较耗时。
            //后期使用连接池连接
            Connection conn=
                DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?characterEncoding=UTF-8","root","123456");

            //-----------------------------------------1、将图片插入到数据库中-----------------------------------------

            //需要存到mysql的图片,使用相对路径,即把图片放在此java项目的文件夹下
            File image=new File("image.png");
            //获取图片的文件输入流
            InputStream is=new FileInputStream(image);

            //创建预编译的statement对象
            PreparedStatement insert=
                    conn.prepareStatement("insert into img_table values(null,?,?)",Statement.RETURN_GENERATED_KEYS);

            //下面三行执行插入操作
            insert.setString(1, "一张图片");
            insert.setBinaryStream(2, is, (int)image.length());
            int affect=insert.executeUpdate();
            //如果插入图片成功
            if (affect==1)
            {
                System.out.println("图片加入成功");
            }


            //--------------------------------2、将刚插入到数据库的图片,用文件输出流写回到文件夹----------------------
            //查询id=1的图片
            PreparedStatement query=
                    conn.prepareStatement("select * from img_table where img_id=?");
            query.setInt(1, 1);
            ResultSet re=query.executeQuery();

            //把记录指针移到第一行数据(也是唯一的一行)
            re.next();

            //使用Blob对象接收数据库里的图片
            java.sql.Blob imgBlob=re.getBlob(3);

            //获取Blob对象的二进制流;        
            InputStream imgInS=imgBlob.getBinaryStream();
            //文件输出流
            OutputStream imgOuS=new FileOutputStream(new File("test.png"));

            //下面就把图片写出到文件夹里面啦
            byte[] buffer=new byte[1024];
            int len;
            while( (len=imgInS.read(buffer))!=-1  )
            {
                imgOuS.write(buffer, 0, len);
            }//图片写出完毕

        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        } catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        }   
    }
}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值