2013-07-28 136 views
1

我在SQLite數據庫中有一個Blob。 當我鍵入:從SQLite數據庫中獲取Blob

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

我得到一個大小爲20519字節(相當大的),但是當我與Android取一滴:

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

我想你會得到字符串"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傢伙太多,所以希望我沒有屠殺代碼。

+0

非常感謝!這是解決方案。現在一切正常:-) – masrlinu