我在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个字节。
我做什么 错误?
答案 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家伙,所以我希望我没有抄袭代码。