【问题标题】:Getting a Blob out of an SQLite Database从 SQLite 数据库中获取 Blob
【发布时间】:2013-07-28 12:58:21
【问题描述】:

我在 SQLite 数据库中有一个 Blob。 当我输入时:

Select length(blobblob) FROM Database WHERE id=9387134648;

我得到了 20519 字节(相当大)的大小,但是当我使用 android 获取 Blob 时:

Cursor cursor = database.rawQuery("Select ? FROM Database WHERE id=?;",
                new String[]{"blobblob", "9387134648"});

if (cursor.moveToNext()) {
    byte[] bytes = cursor.getBlob(0);
    Log.v("Bloblength", String.valueOf(bytes.length));
}

我只得到 9 字节的大小。

我做错了什么错误

【问题讨论】:

    标签: android sqlite blob


    【解决方案1】:

    我猜你从查询中得到字符串"blobblob"(作为字节数组),这八个字符加上一个空终止符将是九个字节。当你这样说时:

    select ? from database where id = ?
    

    两个占位符都将替换为参数中的值,参数为Strings,因此? 将替换为 SQL 字符串。结果将是一个实际上是这样的查询:

    select 'blobblob' from database where id = '9387134648'
    

    查询所做的只是从您的表中选择 SQL 字符串文字 'blobblob'

    根本问题是您不能在查询中使用占位符作为 SQL 标识符(表名、列名等),占位符仅用于字符串和数字等值。您的代码应该看起来更像这样:

    Cursor cursor = database.rawQuery("Select blobblob FROM Database WHERE id=?;",
                    new String[]{"9387134648"});
    

    我不太喜欢 Java 或 Android,所以希望我没有破坏代码。

    【讨论】:

    • 非常感谢!这就是解决方案。现在一切正常:-)
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多