1缓窜、 getWritableDatabase()和getReadableDatabase()區(qū)別
? ? 兩個方法都會返回SQLiteDatabase實例奠蹬。其中getReadableDatabase()是先讀取數據庫粪糙,如果此時磁盤空間滿就會打開失敗于未,當打開失敗時候忿墅,就會繼續(xù)嘗試以只讀的方式打開數據庫。如果磁盤空間夠用就會返回一個可讀寫的數據庫對象剑刑。
????而使用getWritableDatabase()方式打開數據庫媳纬,如果磁盤滿了,數據庫就只讀不能寫了施掏,此時打開數據庫就會報錯。
2茅糜、query和rawQuery的區(qū)別
Cursor?cursor?=?db.rawQuery("select?name?from?***?where?id=?",?new?String[]{"1"});
Cursor?cursor?=?db.query("***",?new?String[]{"name"},?"id=?",?new?String[]{"1"},?null,?null,?null);
上面是兩個分別是query和rawQuery的查詢語句七芭,主要區(qū)別是rawQuery是直接使用SQL語句進行查詢的,也就是第一個參數字符串蔑赘,在字符串內的“狸驳?”會被后面的String[]數組逐一對換掉预明;而query函數是Android自己封裝的查詢API:它的API文檔如下:
public?Cursor??query?(String?table,?String[]?columns,?String?selection,?String[]?selectionArgs,?String?groupBy,?String?having,?String?orderBy)
Query?the?given?table,?returning?a?Cursor?over?the?result?set.
table
The?table?name?to?compile?the?query?against.
columns
A?list?of?which?columns?to?return.?Passing?null?will?return?all?columns,?which?is?discouraged?to?prevent?reading?data?from?storage?that?isn't?going?to?be?used.
selection
A?filter?declaring?which?rows?to?return,?formatted?as?an?SQL?WHERE?clause?(excluding?the?WHERE?itself).?Passing?null?will?return?all?rows?for?the?given?table.
selectionArgs
You?may?include??s?in?selection,?which?will?be?replaced?by?the?values?from?selectionArgs,?in?order?that?they?appear?in?the?selection.?The?values?will?be?bound?as?Strings.
groupBy
A?filter?declaring?how?to?group?rows,?formatted?as?an?SQL?GROUP?BY?clause?(excluding?the?GROUP?BY?itself).?Passing?null?will?cause?the?rows?to?not?be?grouped.
having
A?filter?declare?which?row?groups?to?include?in?the?cursor,?if?row?grouping?is?being?used,?formatted?as?an?SQL?HAVING?clause?(excluding?the?HAVING?itself).?Passing?null?will?cause?all?row?groups?to?be?included,?and?is?required?when?row?grouping?is?not?being?used.
orderBy
How?to?order?the?rows,?formatted?as?an?SQL?ORDER?BY?clause?(excluding?the?ORDER?BY?itself).?Passing?null?will?use?the?default?sort?order,?which?may?be?unordered.
Returns
?A?Cursor?object,?which?is?positioned?before?the?first?entry.?Note?that?Cursors?are?not?synchronized,?see?the?documentation?for?more?details.
而后者query對比前者來講就有一個好處,前者rawQuery你在寫入SQL語句的時候耙箍,有可能寫錯了或者寫漏了什么單詞拼寫錯誤的時候他會出錯撰糠,而后者相對來講出錯的機率就比較小