Java преобразовать байт [] в большой двоичный объект

#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?