【问题标题】:What if I don't have any image to upload in mydatabase? [duplicate]如果我的数据库中没有要上传的图像怎么办? [复制]
【发布时间】:2019-06-20 07:19:18
【问题描述】:

当我没有要上传的图像时,我希望数据库中的 Blob 字段为 NULL。 我正在使用 JAVA - 软件 Netbeans。 我的数据库:MySQL

这是我的代码:

String s; //The path of the image

 InputStream is = new FileInputStream(new File(s));
 preparedStmt.setBinaryStream(24,is,(int)s.length());

【问题讨论】:

  • S.length() 不是内容大小而是名称长度。

标签: java mysql insert blob prepared-statement


【解决方案1】:

您基本上有两种选择,一种是不提及并为图像设置列。这也最小化了语句并允许使用数据库默认值。

另一种选择是将列绑定显式设置为 null,如下所示:

File f = new File(...);
If (f.exists()) {
    try (InputStream is = new FileInputStream(f);) {
        preparedStmt.setBinaryStream(24,is,f.length());
    }
} else
    preparedStmt.setNull(24, java.sql.Types.BLOB);

类型有点棘手,有的司机无视或接受范围很广,有的比较挑剔。例如,PostgreSQL 不喜欢 bytea 列上的 BLOB。我认为对于 MySQL,BLOB 甚至 VARCHAR 都可以。

【讨论】:

  • 感谢您的回答。但这两种选择都不起作用。当我上传一张图片时,我的数据库中的字段取 NULL 并且希望:当我上传一张图片时,该字段取 BLOB,而当我不这样做时,它将取 NULL。请有任何想法!谢谢
  • 不确定我理解你在问什么@advia。您能否将示例、具体步骤和错误消息以及预期和观察到的结果添加到您的原始问题中,以便我们查看。
  • 我添加了如果存在如果。您的原始代码对二进制流使用了错误的长度(名称长度)。您可以使用 file#length 或删除参数。
  • 感谢您的回答。我尝试了这个解决方案,但也没有用。让我再解释一下我的问题:我创建了一个应用程序来预订会议室。所有协会、企业.. 将他们的计划和其他文件发送给我们。所以我们需要将这些文档和图像上传到我们的数据库并保存它们。有时企业没有详细的程序所以我们不需要上传任何东西。那么如何将 NULL 值设置为未上传的图像并将 BLOB 设置为已上传的图像?再次感谢您
  • 我很感激!我解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多