【发布时间】:2015-07-29 20:21:02
【问题描述】:
在对 ByteArrays 和 BLOBS 进行了大量学习后,我设法编写了以下 Java 代码将图像写入 Access DB(使用 ucanaccess)并将其写回磁盘。
当我将图像写回磁盘时,图像格式不正确或出现问题,您无法打开该图像。
我知道将图像存储在数据库中不是一个好习惯,但这只是为了我的学习。
public static void Update_to_DB() throws SQLException, IOException {
String URL = "jdbc:ucanaccess://C:\\Users\\bharat.nanwani\\Desktop\\Images.accdb";
Connection conn = DriverManager.getConnection(URL);
//Statement stmt = conn.createStatement();
PreparedStatement p;
File ImgPath = new File("C:\\Users\\bharat.nanwani\\Desktop\\Desert.jpg");
BufferedImage bufferedimage = ImageIO.read(ImgPath);
WritableRaster raster = bufferedimage.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] bytearray = date.getdata();
String query = "INSERT INTO Images(data) VALUES(?);";
p = conn.prepareStatement(query);
p.setBinaryStream(1, new ByteArrayInputStream(bytearray),bytearray.length);
p.execute();
}
public static void update_to_DISK() throws SQLException, IOException {
String URL = "jdbc:ucanaccess://C:\\Users\\bharat.nanwani\\Desktop\\Images.accdb";
Connection conn = DriverManager.getConnection(URL);
PreparedStatement p;
ResultSet rs;
String query = "SELECT Data FROM Images";
p=conn.prepareStatement(query);
rs = p.executeQuery();
if (rs.next()) {
Blob blob = rs.getBlob("Data");
byte[] bytearray = blob.getBytes(1L, (int)blob.length());
FileOutputStream fos = new FileOutputStream("C:\\Users\\bharat.nanwani\\Desktop\\New Folder\\test.jpg");
fos.write(bytearray);
fos.close();
System.out.println(bytearray);
}
}
【问题讨论】:
-
顺便说一句,我强烈建议您阅读(然后遵循)Java 方法的命名约定。
-
我不认为
((DataBufferBye) ImageIO.read(...).getRaster().getDataBuffer()).getData()包含与硬盘上的原始文件相同的字节。
标签: java image bytearray blob ucanaccess