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)相关推荐

  1. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  2. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  3. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  4. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  5. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  6. kotlin学习笔记——重载操作符

    Kotlin中有很多操作符可以使用,具体可以见kotlin学习笔记--操作符_There is a Bug!!!-CSDN博客 Kotlin的一个特点就是可以重载这些操作符,为操作符赋予不同的行为. ...

  7. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  8. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  9. Kotlin学习笔记19 阶段复习1

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 基础部分 Kotlin学习笔记 第一章开始 第二章 基础_积跬步 至千里-CSDN博客 类与继承 Kotlin学习笔记 第 ...

最新文章

  1. CVPR 2020满分论文 | FineGym:面向细粒度动作分析的层级化高质量数据集
  2. Java四种引用简介
  3. 图(1)——图的定义和基本概念
  4. 进程process与线程thread
  5. golang包管理解决之道——go modules初探
  6. Eclipse导入项目常见问题----乱码问题03
  7. boost::math::fisher_f用法的测试程序
  8. java 正则提取及替换字符串
  9. 2018年大数据趋势
  10. MS SQL入门基础:触发器概述
  11. python3 提取url中域名部分_python 从网址(url)中提取域名和path
  12. Backtrader量化平台教程-跟踪止损单(十)
  13. html网页制作的图片打不开,网页中的图片打不开怎么办?原因与解决办法
  14. 云计算服务包括哪三种服务?怎么定义?
  15. 有孚网络协办“大数据助力精准医疗产业论坛”北京站圆满落幕
  16. Flutter 淡入淡出与逐渐出现动画
  17. 程序员写了个开源软件,完成了舔狗的绝地反杀...
  18. 【CTFhub】web-信息泄露-备份文件下载-网站源码_WriteUp
  19. vue-baidu-api地图标记点(自定义标记图标),设置标记点的优先级
  20. mysql建表时插入中文_Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题...

热门文章

  1. [转]MacBook Pro上装三系统 OS X、Ubuntu、Win 7
  2. SQL 技巧-ORACLE
  3. 献给开发者的大礼--打造CSDN论坛专用阅读器(电脑报2006年11月6日 第44期)
  4. android的task任务栈
  5. Java Web学习(一)Web基础
  6. mysql 使用正则表达式查询
  7. XML原理及应用pdf
  8. C++标准转换运算符static_cast
  9. Android 小项目之--数据存储【Network】(附源码)
  10. pass information between XXX.Aspx and XXX.Aspx.cs