[英]how can I set an image in to seventh column?
我有一个SQL表,该表具有7列和前六列,存储字符串类型,但最后一个存储BLOB类型。我使用addBirth方法获得了这6种String类型,并且为了存储最后一列的图像,我使用insertImageToBirthTable方法。 我不想将Strings和BLOB一起存储,因为用户可能没有选择要添加人的照片。(我已经编辑了帖子,现在我使用此方法存储图像,但是在SQL表中它仍然为空值,为什么???)我还打印了路径文件,它不是空的。
我的insertImageToBirthTable方法:
public static void insertImageToBirthTable(字符串名称,字符串族,字符串父亲名称,字符串母亲名称,字符串dateOfBirth,字符串placeOfBirth,字符串pathFile){
try {
System.out.println(pathFile);
File file = new File(pathFile);
FileInputStream input = new FileInputStream(file);
PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("UPDATE birthtable SET image =? WHERE name = '" + name + "'AND family ='" + family + "'AND fatherName = '" + fatherName + "'AND motherName ='" + motherName + "' AND dateOfBirth = '" + dateOfBirth + "' AND placeOfBirth = '" + placeOfBirth + "'");
stmt.setBinaryStream(1, input);
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
读取异常消息将显示:
没有为参数1指定值
所以...我需要为你拼出来吗? (提示:您需要为PreparedStatement
所有参数指定值。单个值将无效。)
如果要稍后添加图像,则在表中需要一个“主键”。 主键为您提供了一种识别特定列的简单方法。 将这样的列添加到表中:
ID serial,
在插入过程中忽略此列,并在插入之后运行此查询以了解新列的主键:
SELECT @@IDENTITY
稍后,当您最终获得图像时,运行此更新:
update set imageBlob = ? where ID = ?
将InputStream
用于第一个参数,将主键用作第二个参数。
[编辑]有关如何将图像插入表格的完整示例,请参见此页面 。
之所以会出现异常,是因为您需要提供sql中所有的参数(所有问号)。
如果您只需要提供imageBlob(我猜是您在调用它)列,同时将所有其他列默认为默认值,则可以命名要在sql中为其指定值的列,请尝试这样做,
query = ("insert into birthtable (imageBlob) VALUES (?)");
尽管在这里听起来更新比插入更为合适,但另一个选择是将其包括在您的插入或主插入中,并且在没有图像时为此列提供null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.