用個例子來解釋下最近遇到一個問題。java
在android sqlite3命令行中執行create table t(a)建立表。這裏不指定a的具體類型。android
而後執行insert into t values(0)。sql
若是我在sqlite3命令行中使用"select * from t where a = 0",能查詢成功;若是是「select * from t where a='0'」,則失敗。數據庫
緣由是我在調用values.put("a", 0);時,0是整型,因此數據庫中認爲是數字。因此where中使用'0',數據庫不知道該column應該使用什麼類型,因此不會轉化成數字,因此查詢不到東西。命令行
若是create table t(a integer),具體指定a的類型爲integer,則兩條語句都會查詢成功。sqlite
由於sql解析器知道該列的具體類型,因此即便指定string的'0'進來,仍然能夠自動轉化爲數字0,而後再查詢。string
在java編寫程序的時候的時候,由於SQLiteDatabase.rawQuery中若是指定sql參數必須爲String類型,因此若是在建立table時不指定具體類型,那string就不會自動轉化爲數字,那麼查詢就會失敗。it