Как получить относительный путь изображения из BLOB вместо этого com. mysql .cj.jdb c. Blob@28763983? - PullRequest
0 голосов
/ 07 августа 2020

Я загрузил пару изображений в свою базу данных и хочу узнать их путь, но всегда получаю что-то вроде этого: com.mysql.cj.jdbc.Blob@28763983 для каждого изображения. Это код:

  public static List<Image> selectImages() {
    ResultSet rs = null;
    try {
        imageList.clear();
        String selectImages = "select * from image";
        PreparedStatement ps = DataBaseConnection.get().prepareStatement(selectImages);
        rs = ps.executeQuery(selectImages);
        while (rs.next()) {
            int idImage = rs.getInt("id");
            Blob viewImage = rs.getBlob("image");
            Image image = new Image(idImage, viewImage);
            imageList.add(image);
        }
        return imageList;

Как я могу получить реальный путь вместо этого гиббери sh?

1 Ответ

1 голос
/ 07 августа 2020

Этот «gibberi sh» является выходом по умолчанию для Object.toString () из java .lang. Ваш фрагмент кода не показывает этого, но я предполагаю, что вы перебираете этот список изображений и печатаете Blob; что-то вроде этого

for (image : selectImages()) {
    System.out.println(image.getViewImage());
}

Беглый взгляд на документацию API для mysql jdb c Blob, похоже, не существует каких-либо доступных методов для достижения того, чего вы хотите. http://www.docjar.com/docs/api/com/mysql/jdbc/Blob.html

Похоже, вам нужен вывод File.getAbsolutePath ()

В этой статье показано, как получить Blob из база данных как файл в методе "readBlob"; https://www.mysqltutorial.org/mysql-jdbc-blob/

Или, как вариант, преобразовать Blob в файл; https://www.baeldung.com/convert-input-stream-to-a-file

File targetFile = new File("src/main/resources/targetFile.tmp");
OutputStream outStream = new FileOutputStream(targetFile);
outStream.write(buffer);

Что вы можете заметить в обоих этих подходах, так это то, что строка fileName является внешней переменной и не хранится в самом Blob.

Итак, мораль этой истории заключается в том, что объект Blob хранится только в памяти, он еще не записан в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...