📜  Java 在Oracle数据库中存储映像(1)

📅  最后修改于: 2023-12-03 14:42:18.122000             🧑  作者: Mango

Java在Oracle数据库中存储映像

在Java中,我们可以使用Java2D或者JavaFX来处理图片,并在应用程序中使用它们。不过,如果需要将图片存储在数据库中,并从中检索回来,则需采用一些不同的方法。

在Oracle数据库中,我们可以使用BLOB(二进制大对象)数据类型来存储任意二进制数据,包括图像。我们可以使用JDBC来连接到Oracle数据库,并将图像存储为BLOB对象类型。

以下是一个简单的Java程序,将图像存储到Oracle数据库中:

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.imageio.ImageIO;

public class StoreImageInDB {
   public static void main(String[] args) {
      try {
         //加载数据库驱动
         Class.forName("oracle.jdbc.driver.OracleDriver");
         
         //创建数据库连接
         Connection connection = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:orcl", "username", "password");
         
         //准备SQL语句
         String sql = "INSERT INTO IMAGES (IMAGE_ID, IMG) VALUES (?, ?)";
         PreparedStatement ps = connection.prepareStatement(sql);
         ps.setInt(1, 1);
         
         //从文件中读取图像
         BufferedImage image = ImageIO.read(new File("image.jpg"));
         
         //将图像转换为字节数组
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ImageIO.write(image, "jpg", baos);
         byte[] imageData = baos.toByteArray();
         ps.setBytes(2, imageData);
         
         //将图像存储到数据库中
         ps.executeUpdate();
         System.out.println("Image stored successfully in the database.");
         
         //关闭连接和语句对象
         ps.close();
         connection.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

在以上示例中,我们使用了ImageIO类来从文件中读取图像,并将其转换为字节数组。然后,我们使用PreparedStatement来将数据插入到数据库中。

以下是从数据库中读取图像的例子:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.imageio.ImageIO;

public class RetrieveImageFromDB {
   public static void main(String[] args) {
      try {
         //加载数据库驱动
         Class.forName("oracle.jdbc.driver.OracleDriver");
         
         //创建数据库连接
         Connection connection = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:orcl", "username", "password");
         
         //准备SQL语句
         String sql = "SELECT IMG FROM IMAGES WHERE IMAGE_ID = ?";
         PreparedStatement ps = connection.prepareStatement(sql);
         ps.setInt(1, 1);
         
         //执行查询
         ResultSet rs = ps.executeQuery();
         
         //从结果集中获取图像
         while (rs.next()) {
            byte[] imageData = rs.getBytes("IMG");
            
            //将字节数组转换为图像
            BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageData));
            
            //将图像保存到文件中
            ImageIO.write(image, "jpg", new FileOutputStream(new File("image2.jpg")));
         }
         
         //关闭连接和语句对象
         rs.close();
         ps.close();
         connection.close();
         
         System.out.println("Image retrieved successfully from the database.");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

在此示例中,我们使用PreparedStatement对象从数据库中检索图像。从结果集中,我们可以获取图片的字节数组,然后使用ImageIO类将其转换为图像,最后将其保存到文件中。

总的来说,在Oracle数据库中存储和检索图像非常简单,只需将图像转换为字节数组,然后将其存储为BLOB对象类型。反之亦然,只需将字节数组转换为图像即可。