Oracle中有效解决存储图片的办法(oracle中存储图片)
图片存储在关系型数据库中,比如Oracle,首先需要给出一个存储图片的表。例如,以下CREATE TABLE语句定义了一个表来存储图片:
CREATE TABLE PHOTO(PHOTO_ID NUMBER PRIMARY KEY, PHOTO_DATA BLOB);
BLOB(可变长度的二进制流)数据类型可以保存图片,它能够容纳几乎任何类型的数据,但有时需要标准文件头以适应数据类型,以此来判断图片格式。
现在,可以记录图片及其说明在PHOTO表中(Photo_id列为照片的唯一标识符,Photo_Data列存储图片二进制数据),然后写一个存储过程以方便地在photo表中查询和插入图片:
CREATE OR REPLACE PROCEDURE insertPhoto (input_photo IN BLOB, input_photo_id IN NUMBER)
IS
BEGIN
INSERT INTO PHOTO (PHOTO_ID, PHOTO_DATA) VALUES (input_photo_id, input_photo);
END;
我们可以在Java中使用PreparedStatement和BLOB参数将图片插入数据库:
PREPARED_STATEMENT pstmt = conn.prepareStatement(“INSERT INTO PHOTO VALUES(?,?)”);
pstmt.setString(1,photoId);
File file = new File(“d:\\images\\img1.jpg”);
FileInputStream fis = new FileInputStream (file);
pstmt.setBinaryStream(2,fis,(int)file.length());
int result = pstmt.executeUpdate();
以下Java代码可以从数据库中读取BLOB字段:
PREPARED_STATEMENT pstmt = conn.prepareStatement(“SELECT PHOTO_DATA FROM PHOTO WHERE PHOTO_ID=?”);
pstmt.setString(1,photoId);
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
BLOB blob = retrieveblob.getBlob(1);
InputStream inputStream = blob.getBinaryStream();
OutputStream outputStream = new FileOutputStream(new File(“d:\\images\\img2.jpg”));
int byteread = 0;
byte[] buffer = new byte[8192];
while ((byteread = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, byteread);
}
inputStream.close();
outputStream.close();
}
以上内容概括了Oracle中存储图片的有效方法。使用BLOB类型存储图片,将其他信息连同PHOTO_ID作为字段插入与图片相关的表中。Java的PreparedStatement和Blob参数可以向数据库中插入图片,并从数据库检索图片以供显示。