Как сохранить байтовые данные в столбце больших двоичных объектов базы данных

#java #mysql #hibernate #hql #blob

#java #mysql #спящий режим #hql #большой двоичный объект

Вопрос:

Я пытаюсь выполнить этот код на Java где-нибудь в моем проекте

 INSERT INTO registered_user (user_image,user_Email,phone_No,pin)
VALUES ('" blob "','" reqData.getEmail() "' ,'" reqData.getPhoneNo() "','" reqData.getPin() "')
 

Я объявил blob как

   byte[] b=(rqData.getUserImage());// getter method and has length of 6439==>b.length
  Blob blob=blob=new SerialBlob(b);    
 

reqData.getUserImage is (класс POJO)

 byte[] userImage;
public byte[] getUserImage() {
    return userImage;
}
public void setUserImage(byte[] userImage) {
    this.userImage = userImage;
}
 

Кроме того, другие являются получателями, и я получаю значения

Но я получаю на консоли во время выполнения это утверждение

 INSERT INTO registered_user (user_image,user_Email,phone_No,pin)
VALUES ('javax.sql.rowset.serial.SerialBlob@4dad2f','clientcode17@example.com' ,'null',
'123456789')
 

Мой вопрос касается первого значения в запросе. Я объявил столбец user_image как большой двоичный объект в базе данных, и здесь я также отправляю данные большого двоичного объекта, но это объект. Blob, в моем случае blob имеет длину 6439, но в базе данных его сохранение составляет всего 30-32 байта. В чем проблема, как сохранить байты в базе данных в виде большого двоичного объекта.

Заранее спасибо.

Ответ №1:

Эта строка кода преобразует ваш объект больших двоичных объектов в строку:

 insert into registered_user (user_image,user_Email,phone_No,pin) values ('" blob "','" reqData.getEmail() "' ,'" reqData.getPhoneNo() "','" reqData.getPin() "')
 

Вам необходимо изменить код вставки, чтобы использовать подготовленный оператор:

 String query = "insert into registered_user (user_image,user_Email,phone_No,pin) values (?,?,?,?)";

PreparedStatement statement = con.prepareStatement(query);
statement.setBlob(1, blob);

//continue setting parameters
 

Полный пример здесь — http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Комментарии:

1. Я получил точку зрения, но я использую спящий режим, есть ли альтернатива сделать подобное таким образом, не используя подготовленный оператор?

2. @ajitksharma Может быть, используя параметризованный запрос?