2015-06-19 2 views
0

Я хочу вставить изображение в базу данных с помощью кнопки «просмотреть». В чем проблема в этой строке, ps.setBlob(l16, inputStream)? Эта строка показывает ошибку каждый раз.Как вставить изображение в базу данных в Java

Мой код:

Class.forName("com.mysql.jdbc.Driver"); 

Connection con=DriverManager.getConnection( 
"jdbc:mysql://localhost:3306/hostel_management","root",""); 

PreparedStatement ps= con.prepareStatement("insert into student_info values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 

ps.setString(1, tf1.getText()); 
ps.setString(2, tf2.getText()); 
. 
. 
. 
ps.setString(15, tf15.getText()); 

InputStream inputStream = new FileInputStream(new File(tf16.getText())); 

ps.setBlob(16, inputStream); 

ps.execute(); 

JOptionPane.showMessageDialog(null, "Successfully Inserted", "Message", JOptionPane.ERROR_MESSAGE); 

con.close(); 
+2

"Эта строка показывает ошибку каждый раз" Что такое сообщение об ошибке? – hexafraction

+0

Вы проверили порядок параметров? –

+1

Попробуйте 'ps.setBlob (16, inputStream, (int) fileLength);' – saka1029

ответ

-1

Лучший способ будет хранить изображение в папку и сохранить путь этого изображения в базу данных. Сохранение объектов Blob или Clob в базе данных слишком трудоемко и может привести к неэффективности в некоторых случаях.

+0

Это должен быть комментарий. это не ответ на вопрос. –

+0

Это очень расплывчато. И, вероятно, тоже неправильно. В любом случае сохранение путей в базе данных совершенно бессмысленно, как бы вы когда-нибудь попали к изображению? – Cubic

+0

Когда вы храните путь в базу данных, вы просто поместите путь в код html в параметре img tag - src. Изображение будет автоматически загружено с помощью http в браузере клиентов с сервера. URL-адрес в базе данных выглядит примерно так: «http://servername.com/somefolder/uniqueimagename.jpg», а тэг html img выглядит так: . Пожалуйста, дайте мне знать, если я где-то ошибаюсь. –

0

Преобразуйте изображение в Base64 и просто сохраните его как текст в своей базе данных. Когда вы захотите вернуться, получите его и верните в растровое изображение и используйте его.

Использование Apache Commons, чтобы сделать это в лучшем случае, как

Base64.encode(FileUtils.readFileToByteArray(file)); 

Для его расшифровки,

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT)); 

Где изображение строки содержит Base64 текст. Сообщите мне, если вам нужна дополнительная помощь.

+0

Зачем вам это делать? Хранение произвольных двоичных данных, таких как op, пытается сделать именно то, что столбцы blob для – Cubic

+0

Blob внутренне обрабатывается как строка. Так что это имеет смысл. – Sibidharan

+1

TEXT и CHAR преобразуют в/из набора символов, связанного со временем. BLOB и BINARY просто сохраняют байты. BLOB используется для хранения двоичных данных, в то время как текст используется для хранения большой строки. Значения BLOB обрабатываются как двоичные строки (байтовые строки). У них нет набора символов, а сортировка и сравнение основаны на числовых значениях байтов в значениях столбцов. Значения TEXT рассматриваются как недвоичные строки (символьные строки). Они имеют набор символов, и значения сортируются и сравниваются на основе сортировки набора символов. – Sibidharan