美文网首页Kotlin学习笔记
kotlin学习笔记——sqlite(anko)

kotlin学习笔记——sqlite(anko)

作者: chzphoenix | 来源:发表于2017-09-29 10:09 被阅读518次

    Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html

    Anko提供了很多强大的SQLiteOpenHelper来可以大量简化代码,首先需要依赖anko的sqlite模块:
    compile "org.jetbrains.anko:anko-sqlite:$anko_version"

    1、ManagedSQLiteOpenHelper
    ManagedSQLiteOpenHelper是一个抽象类。
    我们使用一般的SQLteOpenHelper时,我们需要调getReadableDatabase或getWritableDatabase,然后调用处理数据的方法,最后必须调用close。使用ManagedSQLiteOpenHelper只需要

    dbHelper.use{  
         ...  
    }  
    

    即可。use函数的源代码如下:

    public fun <T> use(f: SQLiteDatabase.() -> T): T {  
        try {  
         return openDatabase().f()  
     } finally {  
         closeDatabase()  
        }  
    }  
    

    首先use接收一个SQLiteDatavase的扩展函数,所以可以使用this在大括号中并处于SQLiteDatavase对象中。这个扩展函数可以返回一个值。
    由于使用try-finally,所以一定会去关闭数据库。

    2、创建表
    我们可以用object来提前定义表,如:

    object PersionTable{  
         val TABLE = "Persion"  
         val ID = "_id"  
         val NAME = "name"  
    }  
    

    使用createTable来创建表

    fun SQLiteDatabase.createTable(tableName: String, ifNotExists: Boolean = false, vararg columns: Pair<String, SqlType>)  
    

    第一个参数是表名
    第二个参数为true时,创建前会检查表是否存在
    后面的参数是Pair类型的vararg,是表的列名和类型。(vararg在java中也有,是一种在函数中传入很多相同类型的参数)
    所以实现代码如下:

    db.createTable(PersionTable.TABLE, true,  
         Pair(PersionTable.ID, INTEGER + PRIMARY_KEY),  
         Pair(PersionTable.NAME, TEXT))  
    

    3、SqlType和SqlTypeModifier
    Anko中有一个特殊类型SqlType,可以和SqlTypeModifier混合,如上面的PRIMARY_KEY。SqlType中“+”操作符被重写了,如下:

    fun SqlType.plus(m: SqlTypeModifier) : SqlType {  
        return SqlTypeImpl(name, if (modifier == null) m.toString()  
                else "$modifier $m")  
    }  
    

    会返回新的SqlType,这样使用“+”操作符可以将多个装饰符组合起来。

    4、to函数
    kotlin标准库中含有一个to函数,如下:

    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函数和RowParser、MapRowParser接口
    RowParser、MapRowParser是接口,我们需要去实现它们。
    parseList函数使用RowParser和MapParser将cursor转换为对象集合。不同的是,RowParser是依赖列的顺序,得到的是一个array;而MapRowParser是将column名作为key值,得到一个map。

    6、parseOpt和parseSingle
    这两个都是在结果中返回单一对象,不同的是parseOpt可以返回null;而parseSingle则只能返回非null对象,当找不到这条数据会抛出一个错误。

    相关文章

      网友评论

        本文标题:kotlin学习笔记——sqlite(anko)

        本文链接:https://www.haomeiwen.com/subject/itobextx.html