私がする必要があるのは (そして、それが悪い習慣であることは知っていますが、私は強制されています) は、Java から SQL DB にイメージをアップロードすることです。現在、私は準備されたステートメントを使用しており、これを使用して画像からバイトをアップロードしようとしています。
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 parameter index 1 が生成されます。テーブルのパラメーターのタイプは「イメージ」であり、何も保持できません。.setBlob を使用してみましたが、Google の調査によると、Blob がうまく実装されていないようです。
編集: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();