【问题标题】:How to check if BLOB is null如何检查 BLOB 是否为空
【发布时间】:2012-01-15 11:54:41
【问题描述】:

如果是 Blob 类型,如何检查 SQLite 数据库中列的值是否为空?

我正在像这样获取光标:

public Cursor fetchArticle(int i) throws SQLException {
    Cursor mCursor = mDatabase.query(true, "api_content",
        new String[] { "_id", "ArticleName",     "ArticleText","ImageLink", "Image" },
        KEY_ID + "=" + i, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

如何检查索引 4 的 Image 列的值是否为空?我尝试了以下方法:

  • 使用 isNull() 方法,该方法总是返回 false,而实际上该值肯定应该为 null
  • 使用articleCursor.getBlob(4) == null,其中articleCursor 是一个有效的光标(返回false)

更复杂的是,当我打印出articleCursor.getBlob(4)[0] 时,它会返回诸如78 或91 之类的值,这与我认为的null 不同。

同样,数据库不可能在该列中有任何数据;它必须为空。有任何想法吗?谢谢!

【问题讨论】:

  • 命令行上的普通 SQL 查询会为该列/行返回什么?
  • 您是否尝试过查询 'length(x)' 而不是或补充 'x'?如果 x 为 Null 且任何 dB 驱动程序和/或客户端缓冲区不应被任意八位字节序列混淆,它将返回 Null。
  • @DaDaDom 一个普通查询返回 NULL。
  • @collapsar,当你说'x'时,你指的是articleCursor.getBlob(4)返回的字节数组吗?
  • @alejandro: 不,实际上我指的是 sql 语句,或者游标构造函数的参数。而不是选择结果集列,您应该能够在这样的列上指定一个 sql 表达式,即您的示例中的“长度(图像)” - 您最好查阅手册或类 api 以获得正确的语法。

标签: android sql sqlite


【解决方案1】:

方法 getBlob() 总是有一个值。如果该列的值为空或null,当使用方法长度时,结果为1。

例子:

byte[] image = cursor.getBlob(cursor.getColumnIndex("image"));
if(image.length == 1) {
   //column data is empty
} else{
   //column has data
}

希望对你有帮助。

【讨论】:

  • 空 blob 的 length() 返回 0,而不是 1。
【解决方案2】:

请在下面的查询中找到值 Y 或 N

select id, 
 case
      when myblob is not null then 'Y'
      else 'N'
 end,
 myblob

如果 blob 为 null,则返回 N,否则返回 Y。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2017-11-15
    • 2020-05-29
    • 2018-04-02
    • 2016-04-05
    • 2018-01-08
    • 2020-09-25
    • 2016-07-16
    • 2021-08-14
    相关资源
    最近更新 更多