Чтение MEDIUMBLOB из MySQL в java

Я впервые работаю с типами данных Blob. Я храню файлы изображений в типе данных MEDIUMBLOB в базе данных MySQL. Теперь я хочу получить его с помощью приложения JAVA. До сих пор я нашел учебные пособия, использующие com.mysql.jdbc.Blob. Я пытался,

Blob imgAsBlob = resultset.getBlob("image");
byte[] imgAsBytes = imgAsBlob.getBytes(1, (int) imgAsBlob.length());

но я получаю сообщение об ошибке на imgAsBlob.getBytes(1, (int) imgAsBlob.length()), потому что второй аргумент больше (46352), чем длина BLOB:

java.sql.SQLException: "pos" + "length" arguments cannot be larger than the BLOB's length.

Есть ли другой способ, кроме метода getBlob() или любого другого класса, кроме com.mysql.jdbc.Blob, который я могу использовать?

Спасибо.

Почему вы передаете значение 1 в качестве первого параметра? Это обрезает первый байт. Используйте imgAsBlob.getBytes(1, (int) imgAsBlob.length())

f1sh 07.02.2019 16:05

@ f1sh Я не понял твоей точки зрения. Код такой же, как тот, который вы предложили использовать. Кроме того, Position 'pos' не может быть < 1.

Shekhar Sahu 07.02.2019 16:16

Вы правы, 1 должен быть 0. Я не знал, что вы не можете передать 0 в качестве аргумента. Какова ценность imgAsBlob.length()?

f1sh 07.02.2019 16:18
imgAsBlob.length() is 46352
Shekhar Sahu 07.02.2019 16:19

этого не должно быть. Исходный код показывает, что pos уменьшен на единицу и проверка не должна завершиться неудачно. Я понятия не имею, что к этому приводит. Можете ли вы выполнить отладку метода getBytes?

f1sh 07.02.2019 16:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 183
0

Другие вопросы по теме