Member 12779768 Ответов: 1

JSP-страница: как преобразовать BLOB - объект из mysql в bufferedimage


Мне удается сохранить мой BufferedImage в mysql db как BLOP с помощью ByteArrayOutputStream.

Но теперь я хочу получить и преобразовать обратно в исходное BufferedImage, как мне это сделать? Ниже приведено то, что я пробовал, но результат (BufferedImage) неверен.

Что я уже пробовал:

Загрузка в базу данных:
 ByteArrayOutputStream outClean = new ByteArrayOutputStream();
ImageIO.write(imgClean, "png", outClean);
byte[] bufClean = outClean.toByteArray();
// setup stream for blob
ByteArrayInputStream streamClean = new ByteArrayInputStream(bufClean);

String sql = "INSERT INTO users (userName, userCleanImage)"
        + "VALUES (?, ?)";
PreparedStatement statement = conn.prepareStatement(sql);

statement.setString(1, username);
statement.setBinaryStream(2, streamClean, streamClean.available());


int n = statement.executeUpdate();


Извлечение из базы данных
    ResultSet rs = null;
BufferedImage bufImg = null;
try {
    String sql = "Select userCleanImage from users"
                    + "where userName = ?";
    PreparedStatement statement = conn.prepareStatement(sql);
    statement.setString(1, username);
    rs = statement.executeQuery();
    Blob aBlob = rs.getBlob("userCleanImage");
    InputStream is = aBlob.getBinaryStream(0, aBlob.length());
    bufImg = ImageIO.read(is);

return bufImg;
} catch (SQLException e) {

}catch (IOException io) {

}

1 Ответов

Рейтинг:
2

Steve363

Я только что вызвал aBlob.getBinaryStream() без параметров, и он работает для меня. Функция с параметрами pos и length выдает исключение java.lang.AbstractMethodError: oracle.sql.BLOB.getBinaryStream(JJ)Ljava/io/InputStream; который я читал, может означать, что ваша версия ojdbc не поддерживает этот вызов метода. В документации говорится, что это для возврата частичного большого двоичного объекта. Я не знаю, почему вы хотели бы частичное не очень полезно звучит.