Что мне нужно сделать (И я знаю, что это плохая практика, но я вынужден принудительно) загружать изображение в SQL DB с Java. В настоящее время я использую подготовленный оператор и пытаюсь использовать его для загрузки байтов из изображения.Обновить изображение SQL в java
public void insertImage(Connection conn,String img,String strItemNum)
{
String query;
PreparedStatement pstmt;
try
{
File file = new File(img);
FileInputStream fis = new FileInputStream(file);
byte[] image = new byte[(int) file.length()];
fis.read(image);
System.out.println("image as sent " + image.length);
query = ("SELECT [Item Picture] from [Inventory] where [Item Number] = '" + strItemNum + "'");
pstmt = conn.prepareStatement(query);
System.out.println(pstmt.getMetaData().getColumnName(1) + " of type: " + pstmt.getMetaData().getColumnTypeName(1));
pstmt.setBytes(1,image);
pstmt.executeUpdate();
pstmt.close();
}
catch (IOException | SQLException e)
{
System.err.println(";"+e.getMessage());
e.printStackTrace();
}
}
Но это приводит к получению SQLException: Invalid индекс параметра 1. Параметр в моей таблице имеет тип «образа», и я не могу получить что-нибудь, чтобы придерживаться. Я пробовал использовать .setBlob, но из моих исследований Google, похоже, что Blobs никогда не были реализованы очень хорошо.
EDIT: решаемый с помощью ответа AVD в
изменен
query = ("Update [Inventory] set [Item Picture] = ? where [Item Number] = ?");
pstmt = conn.prepareStatement(query);
pstmt.setBytes(1,image);
pstmt.setString(2, strItemNum);
pstmt.executeUpdate();
pstmt.close();
вы уверены, что ваш запрос хорошо сформирован? Эти скобки, кажется, незаконны ... –
@AlexStybaev: скобки являются отклонением Microsoft от стандарта SQL. –