JDBC存取二进制文件示例

本程序实现了将图片文件转化成二进制的形式,通过JDBC进行数据库存储的功能。

程序分为三个文件,ConnUtil.java为数据库连接,PutFile.java为向数据库中存入二进制图片数据,GetFile.java为从数据库中取出二进制数据并保存成本地图片文件。代码如下:

数据库连接:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnUtil {
    public static Connection getConn() {
        Connection conn = null;
        try {
            Class.forName("org.postgresql.Driver"); // 驱动
            String url = "jdbc:postgresql://192.168.8.103:2345/swfit"; // 连接数据库的url
            try {
                conn = DriverManager.getConnection(url, "super", "111111"); // super 为数据库用户名,111111为密码
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

向数据库中存入二进制图片数据:

import java.io.FileInputStream;
import java.sql.*;
import java.io.File;

public class PutFile {
    public static void main(String args[]) {
        Connection conn = null;
        PreparedStatement psmd = null;
        String sql = null;
        try {
            conn = ConnUtil.getConn();
            File file = new File("F:\\1.jpg");// 要转换的文件
            FileInputStream inputStream = new FileInputStream(file);// 将文件按二进制存储在一个字段内
            // CREATE TABLE images (imgname text, img bytea);
            sql = " insert into images values(?,?)";
            psmd = conn.prepareStatement(sql);
            psmd.setString(1, file.getName());
            psmd.setBinaryStream(2, inputStream, (int) file.length());
            int rs = psmd.executeUpdate();
            if (rs < 0) {
                System.out.println("存入数据失败!!!");
            } else {
                System.out.println("存入数据成功!!!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (psmd != null) {
            try {
                psmd.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

数据库中取出二进制数据并保存成本地图片文件:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.*;

public class GetFile {
    public static void main(String args[]) {
        Connection conn = null;
        PreparedStatement psmd = null;
        String sql = null;
        OutputStream out = null;
        try {
            conn = ConnUtil.getConn();
            sql = " SELECT img FROM images WHERE imgname = ?";
            psmd = conn.prepareStatement(sql);
            psmd.setString(1, "1.jpg");
            ResultSet rs = psmd.executeQuery();
            while (rs.next()) {
                byte[] imgBytes = rs.getBytes(1);
                // 实例化OutputStream对象,在f盘创建一个图片文件
                out = new FileOutputStream("f:\\2.jpg");
                // 将文件输出,内容则为byte数组里面的数据
                out.write(imgBytes);
                out.flush();
                System.out.println("获取数据成功!!!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (psmd != null) {
            try {
                psmd.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值