kotlin学习笔记——sqlite(anko)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                kotlin学习笔记——sqlite(anko)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                
                            
                            
                            Anko提供了很多強(qiáng)大的SQLiteOpenHelper來可以大量簡化代碼,首先需要依賴anko的sqlite模塊:
 
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
 
 
?
?
                        
                        
                        1、ManagedSQLiteOpenHelper
ManagedSQLiteOpenHelper是一個(gè)抽象類。 我們使用一般的SQLteOpenHelper時(shí),我們需要調(diào)getReadableDatabase或getWritableDatabase,然后調(diào)用處理數(shù)據(jù)的方法,最后必須調(diào)用close。使用ManagedSQLiteOpenHelper只需要 dbHelper.use{... } 即可。use函數(shù)的源代碼如下: public fun <T> use(f: SQLiteDatabase.() -> T): T {try {return openDatabase().f()} finally {closeDatabase()} } 首先use接收一個(gè)SQLiteDatavase的擴(kuò)展函數(shù),所以可以使用this在大括號中并處于SQLiteDatavase對象中。這個(gè)擴(kuò)展函數(shù)可以返回一個(gè)值。 由于使用try-finally,所以一定會去關(guān)閉數(shù)據(jù)庫。2、創(chuàng)建表
我們可以用object來提前定義表,如: object PersionTable{val TABLE = "Persion"val ID = "_id"val NAME = "name" } 使用createTable來創(chuàng)建表 fun SQLiteDatabase.createTable(tableName: String, ifNotExists: Boolean = false, vararg columns: Pair<String, SqlType>) 第一個(gè)參數(shù)是表名 第二個(gè)參數(shù)為true時(shí),創(chuàng)建前會檢查表是否存在 后面的參數(shù)是Pair類型的vararg,是表的列名和類型。(vararg在java中也有,是一種在函數(shù)中傳入很多相同類型的參數(shù)) 所以實(shí)現(xiàn)代碼如下: db.createTable(PersionTable.TABLE, true,Pair(PersionTable.ID, INTEGER + PRIMARY_KEY),Pair(PersionTable.NAME, TEXT))?
3、SqlType和SqlTypeModifier
Anko中有一個(gè)特殊類型SqlType,可以和SqlTypeModifier混合,如上面的PRIMARY_KEY。SqlType中“+”操作符被重寫了,如下: fun SqlType.plus(m: SqlTypeModifier) : SqlType {return SqlTypeImpl(name, if (modifier == null) m.toString()else "$modifier $m") } 會返回新的SqlType,這樣使用“+”操作符可以將多個(gè)裝飾符組合起來。4、to函數(shù)
kotlin標(biāo)準(zhǔn)庫中含有一個(gè)to函數(shù),如下: public fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that) 這樣上面的代碼可以簡化: db.createTable(PersionTable.TABLE, true,PersionTable.ID to INTEGER + PRIMARY_KEY,PersionTable.NAME to TEXT)?
5、parseList函數(shù)和RowParser、MapRowParser接口
RowParser、MapRowParser是接口,我們需要去實(shí)現(xiàn)它們。 parseList函數(shù)使用RowParser和MapParser將cursor轉(zhuǎn)換為對象集合。不同的是,RowParser是依賴列的順序,得到的是一個(gè)array;而MapRowParser是將column名作為key值,得到一個(gè)map。6、parseOpt和parseSingle
這兩個(gè)都是在結(jié)果中返回單一對象,不同的是parseOpt可以返回null;而parseSingle則只能返回非null對象,當(dāng)找不到這條數(shù)據(jù)會拋出一個(gè)錯(cuò)誤。?
總結(jié)
以上是生活随笔為你收集整理的kotlin学习笔记——sqlite(anko)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: kotlin学习笔记——委托属性
- 下一篇: kotlin中学习笔记——null
