繁体   English   中英

如何将图像设置到第七列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM