从查询出来的结果集获取Blob数据(以图片为例)

从数据库中读出文件类型为Blob文件:

Connection conn=null;
PrepatedStatement pstmt=null;
ResultSet resultSet=null;
try{
connection=JDBCTools.getConnection();
String sql="Select id,name customerName,email,birth from customers where id=13";
preparedStatement=connection.prepareStatement(sql);
resultSet=preparedStatement.executeQuery();
if(resultSet.next()){
int id=resultSet.getInt(1);
String name=resultSet.getString(2);
System.out.println(id+" "+name);
Blob picture=resultSet.getBlob(4);
InputStream in=picture.getBinaryStream();
OutputStream out=new FileOutputStream("flower.jpg");
byte[] buffer=new byte[1024];
while((len=in.read(buffer))!=-1){
  out.write(buffer,0,len);
}
out.close();
in.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCTools.releaseDB(resultSet,preparedStatement,connectuon);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Java 中,可以使用 JDBC API 来将从 MySQL 数据库中检索到的 BLOB 数据转换为图片并显示出来。下面是具体的步骤: 1. 使用 JDBC API 连接到 MySQL 数据库,并执行 SELECT 语句以检索包含图片BLOB 列。 ```java Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); PreparedStatement stmt = conn.prepareStatement("SELECT data FROM images WHERE id = ?"); stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); ``` 其中,1 是图片所在行的 ID。 2. 从 ResultSet 对象中提取 BLOB 列中的二进制数据。 ```java if (rs.next()) { Blob blob = rs.getBlob("data"); InputStream inputStream = blob.getBinaryStream(); } ``` 3. 将二进制数据转换为图片,并将其显示在 UI 上。 ```java Image image = ImageIO.read(inputStream); JLabel label = new JLabel(new ImageIcon(image)); JFrame frame = new JFrame(); frame.getContentPane().add(label, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); ``` 其中,ImageIO 类用于将二进制数据转换为 Image 对象,JLabel 用于显示 Image 对象,JFrame 用于创建 UI 窗口。 完整的代码示如下: ```java import java.awt.BorderLayout; import java.awt.Image; import java.io.InputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class App { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); PreparedStatement stmt = conn.prepareStatement("SELECT data FROM images WHERE id = ?"); stmt.setInt(1, 1); ResultSet rs = stmt.executeQuery(); if (rs.next()) { Blob blob = rs.getBlob("data"); InputStream inputStream = blob.getBinaryStream(); Image image = ImageIO.read(inputStream); JLabel label = new JLabel(new ImageIcon(image)); JFrame frame = new JFrame(); frame.getContentPane().add(label, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } catch (Exception e) { e.printStackTrace(); } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值