#java #encryption #blob
#java #шифрование #большой двоичный объект
Вопрос:
Я знаю, что было много сообщений о том, как это сделать, но я пробовал их решения, и каждый раз я получаю сообщение об ошибке, из-за которого я не могу скомпилировать, и я не уверен, почему. Это решения, которые я пробовал.
Blob blob = new javax.sql.rowset.serial.SerialBlob(bytes);
//next try
Blob b = new SerialBlob(byteData);
сообщение об ошибке всегда меняет тип большого двоичного объекта на последовательный большой двоичный объект. Если я изменю его на serial blob, я получу сообщение об ошибке, в котором говорится, что строка слишком длинная для столбца.
Если я использую код
byte[] byteData = encodedImg.getBytes("UTF-8");//Better to specify encoding
Blob blobs = (Blob) pprepo.createBlob();
blobs.setBytes(1, byteData);
Я получаю сообщение об ошибке
Вызвано: org.hibernate.Исключение MappingException: не удалось определить тип для: com.mysql.cj.jdbc.Blob, в таблице: post, для столбцов: [org.hibernate.mapping.Столбец (изображение)]
И это мой класс
private Blob image;
public Blob getImage(String string) {
return image;
}
public void setImage(Blob image) {
this.image = image;
}
Так что я не уверен, куда еще идти дальше, поскольку, похоже, ничего не работает. На всякий случай я использую репозитории в качестве подключения к БД и пытаюсь сохранить введенный пользователем составной файл в свою базу данных.
Ответ №1:
Проверьте размер столбца в базе данных. Похоже, что для него установлено что-то вроде varbinary(100)
, и вы пытаетесь опубликовать что-то, длина байта которого превышает ограничение поля. Например. ваше поле — a varbinary(124)
. Отсюда ошибка??
Комментарии:
1. Я изменил столбец на varbinary (124) и после преобразования его в Serialblob я все еще получаю ошибку. Я использовал оператор печати, и длина Serialblob, по-видимому, равна 6?