kotlin学习笔记——sqlite(anko)
发布时间:2020-12-12 19:18:07 所属栏目:百科 来源:网络整理
导读:Kotlin学习笔记系列: http://blog.csdn.net/column/details/16696.html Anko提供了很多强大的SQLiteOpenHelper来可以大量简化代码,首先需要依赖anko的sqlite模块: compile "org.jetbrains.anko:anko-sqlite:$anko_version" 1、ManagedSQLiteOpenHelper Ma
Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html
Anko提供了很多强大的SQLiteOpenHelper来可以大量简化代码,首先需要依赖anko的sqlite模块: compile "org.jetbrains.anko:anko-sqlite:$anko_version" 1、ManagedSQLiteOpenHelperManagedSQLiteOpenHelper是一个抽象类。 我们使用一般的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和SqlTypeModifierAnko中有一个特殊类型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)这样上面的代码可以简化: 5、parseList函数和RowParser、MapRowParser接口RowParser、MapRowParser是接口,我们需要去实现它们。 parseList函数使用RowParser和MapParser将cursor转换为对象集合。不同的是,RowParser是依赖列的顺序,得到的是一个array;而MapRowParser是将column名作为key值,得到一个map。6、parSEOpt和parseSingle这两个都是在结果中返回单一对象,不同的是parSEOpt可以返回null;而parseSingle则只能返回非null对象,当找不到这条数据会抛出一个错误。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |