我正在使用JSF2.0,jetty服务器和Postgres数据库.我想将mp3文件存储在数据库中的字节数组formet中.我上传了mp3文件的字节数组.但是当我从数据库中检索相同的字节数组时,我得到双倍大小的字节数组,因为我的mp3文件不能...

我正在使用JSF2.0,jetty服务器和Postgres数据库.我想将mp3文件存储在数据库中的字节数组formet中.我上传了mp3文件的字节数组.但是当我从数据库中检索相同的字节数组时,我得到双倍大小的字节数组,因为我的mp3文件不能正常工作.
public void updateAnnouncementDetail(AnnouncementDetail announcementDetail) {
System.out.println("Upload byte array size:" + announcementDetail.getContent().length);
Session sess=get Session();
sess.beginTransaction();
sess.save(announcementDetail);
sess.getTransaction().commit();
AnnouncementDetail detail;
detail = retrieveAnnouncementDetailById(new AnnouncementDetailPK(announcementDetail.getAnnouncementDetailPK().getAnnouncement(), announcementDetail.getAnnouncementDetailPK().getLanguage()));
System.out.println("Retrived byte array size:" + detail.getContent().length);
}
输出:
上传字节数组大小:384440
重复的字节数组大小:768879
我不知道为什么会这样.我正在存储字节数组,在下一行我正在重新检索它.但我得到双倍大小的字节数组.如果您需要更多详细信息,请告诉我们.
解决方法:
在Postgres中处理二进制数据时,使用正确的数据绑定很重要.
首先,数据列必须是BYTEA类型.是这样的吗?
要存储数据,请使用预准备语句并确保调用setBinaryStream():
File file = new File("myimage.gif");
FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO images VALUES (?, ?)"
);
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, (int)file.length());
ps.executeUpdate();
ps.close();
fis.close();
要检索数据,还要使用预准备语句并使用getBytes():
PreparedStatement ps = conn.prepareStatement(
"SELECT img FROM images WHERE imgname = ?"
);
ps.setString(1, "myimage.gif");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
byte[] imgBytes = rs.getBytes(1);
// use the data in some way here
}
rs.close();
ps.close();
查看更多here.
本文标题为:java – 从Postgres数据库检索时,字节数组的大小变为double


基础教程推荐
- 使用jib插件为Java应用构建镜像的方法 2023-04-17
- Java设计模式之迭代器模式 2023-06-10
- 基于SSM+Shiro+Bootstrap实现用户权限管理系统 2023-08-07
- Spring使用IOC与DI实现完全注解开发 2023-05-13
- SpringBoot+Thymeleaf+ECharts实现大数据可视化(基础篇) 2023-01-24
- Java实战之实现文件资料上传并生成缩略图 2023-08-10
- HashMap原理及手写实现部分区块链特征 2023-05-13
- Jenkins一键打包部署SpringBoot应用的方法步骤 2023-08-11
- Java如何定义Long类型 2023-03-06
- Java SpringBoot使用guava过滤器 2023-05-08