从SQLite数据库中获取Blob

时间:2013-07-28 19:44:04

标签: android sqlite blob

我在SQLite-Database中有一个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个字节

做什么 错误

1 个答案:

答案 0 :(得分:1)

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

select ? from database where id = ?

两个占位符都将替换为参数中的值,参数为String,因此?将替换为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家伙,所以我希望我没有抄袭代码。