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参数可以向数据库中插入图片,并从数据库检索图片以供显示。


数据运维技术 » Oracle中有效解决存储图片的办法(oracle中存储图片)