kotlin学习笔记——sqlite(anko)

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

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对象,当找不到这条数据会抛出一个错误。


目录
相关文章
|
设计模式 Java Kotlin
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
114 1
|
27天前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
本篇笔记详细介绍了Kotlin中的类与构造器,包括类的基本概念、主构造器与次构造器的区别、构造器中参数的使用规则、类的继承以及构造器在继承中的应用等。通过具体示例,解释了如何在类中定义属性、实现构造逻辑,并探讨了Kotlin类的继承机制和Any类的作用。此外,还简要介绍了包的概念及其在组织代码中的作用。适合初学者深入理解Kotlin面向对象编程的核心概念。
29 3
|
27天前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
《Kotlin学习笔记 - 数据类型》是Kotlin编程语言学习系列的一部分,专注于Kotlin中的数据类型,包括布尔型、数字型(整型和浮点型)、字符型及字符串型,详述了各类型的定义、使用方法及相互间的转换规则。适合初学者快速掌握Kotlin基础语法。
25 3
|
27天前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记聚焦于空类型和智能类型转换,深入解析非空与可空类型、安全调用操作符、Elvis 运算符、非空断言运算符及智能类型转换等内容,助你高效掌握 Kotlin 语言特性,避免 NullPointException 异常,提升代码质量。
27 2
|
29天前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
Kotlin学习笔记 - 数据类型
44 4
|
29天前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
Kotlin学习笔记- 类与构造器
27 3
|
29天前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
27 2
|
29天前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记- 空类型和智能类型转换
45 2
|
29天前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
42 0
|
29天前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
25 0