#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 Может быть, используя параметризованный запрос?