本示例说明如何从数据库表读取BLOB数据。
package org.nhooo.example.jdbc; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.*; public class BlobReadDemo { private static final String URL = "jdbc:mysql://localhost/nhooo"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; public static void main(String[] args) { try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD)) { String sql = "SELECT name, image FROM product_images"; PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { String name = rs.getString("name"); File image = new File(name); try (FileOutputStream fos = new FileOutputStream(image)) { byte[] buffer = new byte[1024]; // 获取我们的BLOB数据的二进制流 InputStream is = rs.getBinaryStream("image"); while (is.read(buffer) > 0) { fos.write(buffer); } } catch (IOException e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } } }
表结构 product_images
CREATE TABLE `product_images` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `product_id` bigint(20) unsigned NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `image` blob, PRIMARY KEY (`id`), KEY `product_id` (`product_id`), CONSTRAINT `product_images_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ) ENGINE=InnoDB;
Maven依赖
<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency>