本程序实现了将图片文件转化成二进制的形式,通过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(); } } } }