在本教程中,我们将通过示例讨论如何将图像插入 PostgreSQL 数据库。
有些人喜欢将他们的图像放入数据库中,有些人喜欢将它们保存在文件系统中以供他们的应用程序使用。当我们处理大量图像时,就会出现技术难题。图像是二进制数据。PostgreSQL 数据库有一种特殊的数据类型来存储二进制数据,称为bytea。这是一种非标准数据类型。数据库中的标准数据类型是 BLOB。
PostgreSQL 是一个功能强大的开源对象关系数据库系统。它是一个多用户数据库管理系统。它可以在多个平台上运行,包括 Linux、FreeBSD、Solaris、Microsoft Windows 和 Mac OS X。PostgreSQL 由 PostgreSQL Global Development Group 开发。
查看 Java PostgreSQL 教程中的所有 Java PostgreSQL 示例。
使用的技术
我们在本教程中使用以下技术:
- JDK - 1.8 或更高版本
- PostgreSQL- 42.2.9
- IDE - Eclipse 霓虹灯
- JDBC - 4.2
下载 PostgreSQL JDBC 驱动程序
要从 Java 程序连接到 PostgreSQL 数据库服务器,您需要有一个 PostgreSQL JDBC 驱动程序。您可以通过下载页面在 postgresql.org 网站上下载最新版本的驱动程序 。
将 PostgreSQL JDBC 驱动程序 jar 文件添加到项目类路径中。
对于 Maven 用户:
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.9</version>
</dependency>
对于 Gradle 用户:
// https://mvnrepository.com/artifact/org.postgresql/postgresql
compile group: 'org.postgresql', name: 'postgresql', version: '42.2.9'
PostgreSQL 数据库设置
让我们使用以下语句在“mydb”数据库中创建“images”表:
CREATE TABLE IF NOT EXISTS images(id serial, data bytea);
JDBC PostgreSQL 插入图像示例
让我们通过一个示例来看看如何将图像插入到 PostgreSQL 数据库中。
package net.javaguides.postgresql.tutorial;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JavaPostgreSqlWriteImage {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost/mydb";
String user = "postgres";
String password = "root";
String query = "INSERT INTO images(data) VALUES(?)";
try (Connection con = DriverManager.getConnection(url, user, password); PreparedStatement pst = con.prepareStatement(query)) {
File img = new File("java-logo.jpg");
try (FileInputStream fin = new FileInputStream(img)) {
pst.setBinaryStream(1, fin, (int) img.length());
pst.executeUpdate();
} catch (IOException ex) {
Logger.getLogger(JavaPostgreSqlWriteImage.class.getName()).log(
Level.SEVERE, ex.getMessage(), ex);
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(JavaPostgreSqlWriteImage.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}
}
}
创建FileOutputStream对象 以写入文件。它用于写入原始字节流,例如图像数据。
查看 Java PostgreSQL 教程中的所有 Java PostgreSQL 示例。