支持?jǐn)?shù)據(jù)類型:
- NULL,INTEGER,REAL,TEXT,BLOB
- 空值,整形值,浮點(diǎn)值,字符串,二進(jìn)制對(duì)象。
動(dòng)態(tài)數(shù)據(jù)類型(弱引用):
- 當(dāng)某個(gè)值插入到數(shù)據(jù)庫(kù)時(shí),SQLite將會(huì)檢查它的類型,如果該類型與關(guān)聯(lián)的列不匹配,SQLite會(huì)嘗試將該值轉(zhuǎn)化成該列的類型,如果不能轉(zhuǎn)換,則該值將作為本身的類型。主鍵是integer時(shí)不能轉(zhuǎn)。

sql語(yǔ)句:
- 查詢語(yǔ)句: select * from 表名 where 條件子句 group by 分組字句 having ... order by 排序子句
- 如: select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分頁(yè)SQL與mysql類似,下面SQL語(yǔ)句獲取5條記錄,跳過(guò)前面3條記錄
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5 - 插入語(yǔ)句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘傳智’,3)
- 更新語(yǔ)句:update 表名 set 字段名=值 where 條件子句。如:update person set name=‘傳智‘ where id=10
- 刪除語(yǔ)句:delete from 表名 where 條件子句。如:delete from person where id=10
占位?
sql中使用的單引號(hào),如下:
db.execSQL("insert into person(name, age) values('林計(jì)欽', 24)");
為了解決轉(zhuǎn)意的麻煩,推薦使用?占位
SQLiteDatabase類提供了一個(gè)重載后的execSQL(String sql, Object[] bindArgs)方法,使用這個(gè)方法可以解決前面提到的問(wèn)題,因?yàn)檫@個(gè)方法支持使用占位符參數(shù)(?)如:
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"張三", 4});
execSQL(String sql, Object[] bindArgs)方法的第一個(gè)參數(shù)為SQL語(yǔ)句,第二個(gè)參數(shù)為SQL語(yǔ)句中占位符參數(shù)的值,參數(shù)值在數(shù)組中的順序要和占位符的位置對(duì)應(yīng)。
完整實(shí)例:
SQLiteDatabase db = ....;
db.beginTransaction();//開(kāi)始事務(wù)
try {
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"李四", 20});
db.execSQL("update person set name=? where personid=?", new Object[]{"asd", 1});
db.setTransactionSuccessful();//調(diào)用此方法會(huì)在執(zhí)行到endTransaction() 時(shí)提交當(dāng)前事務(wù),
如果不調(diào)用此方法會(huì)回滾事務(wù)
} finally {
db.endTransaction();//由事務(wù)的標(biāo)志決定是提交事務(wù),還是回滾事務(wù)
}
db.close();默認(rèn)的一條sql語(yǔ)句就是一個(gè)事物,但是不如一次插入20條數(shù)據(jù),用上面的這種方式就會(huì)提高性能。
GreenDao 升級(jí)
http://blog.csdn.net/growth58/article/details/50453038