枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述在Android上运用Anko和Kotlin开发数据库:SQLite从来不是一件轻松的事(KAD25)相关的知识,希望能为你提供帮助。
原作者介绍,在android上如何运用Anko和Kotlin开发数据库。作者:Antonio Leiva
时间:Mar 30, 2017
原文链接:https://antonioleiva.com/databases-anko-kotlin/
文章图片
事实告诉我们:在Android中编写数据库是相当无聊的。
使用SQLite时,所需的所有模板在当今世界上都不是一件最令人愉快的事情。
所幸的是,在最新一次Google I / O会议上,它们宣布的其中一项事项(称其为:Room),就是为简化这项工作,开发出足够的库。
然而,运用Anko,我们仍可以继续像使用低级别框架一样工作,但是摆脱了实施过程中一些繁琐的部分。今天我们来看看究竟是怎么样做到的。
运用Anko创建你的数据库这里你将看到如何从头开始创建数据库。在Android上,你需要SQLiteOpenHelper,来检索数据库。其后,你还需要记住在请求之后关闭它。而这些Anko都为你做了。
维持,你需要添加Anko的SQLite依赖关系:
1 compile \'org.jetbrains.anko:anko-sqlite:0.10.0\'
实现ManagedSQLiteOpenHelper如果你使用这个继承
SQLiteOpenHelper
的类,就可以创建操作数据库的代码块,如下所示:1 database.use { 2... 3 }
大括号内是
SQLiteDatabase
类的扩展函数,这样你就可以直接调用它的方法。另外,仅在这块代码执行前,将此表打开。而在代码执行结束后将其关闭。我们如何实现这个类?基于Anko的文档,推荐的方法是:
1 class mysqlHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "mydb") { 2 3companion object { 4private var instance: MySqlHelper? = null 5 6@Synchronized 7fun getInstance(ctx: Context): MySqlHelper { 8if (instance == null) { 9instance = MySqlHelper(ctx.applicationContext) 10} 11return instance!! 12} 13} 14 15override fun onCreate(db: SQLiteDatabase) { 16} 17 18override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 19} 20 21 } 22 23 // Access property for Context 24 val Context.database: MySqlHelper 25get() = MySqlHelper.getInstance(applicationContext)
我们创建一个短小的单例程,它保存helper的实例,用同步的方法使不同的线程不能生成多个实例。
另外,我们为上下文创建一个扩展属性,这样任何需要
Context
的类都可以直接访问数据库。这就是允许我们使用的最初始代码。
定义数据库表结构
为了创建我们的数据库,我们需要实现helper的
onCreater
方法,并使用Anko提供的createTable
扩展函数:1 override fun onCreate(db: SQLiteDatabase) { 2db.createTable("Person", true, 3"_id" to INTEGER + PRIMARY_KEY, 4"name" to TEXT, 5"surname" to TEXT, 6"age" to INTEGER) 7 }
这里第一个参数给出的是数据库名称,第二个参数说明是否要在
create
之前,确定表不存在。第三个参数是
vararg
(变量)
对。也就是,你可以添加加任意数量变量。如你所见,这个变量对的格式是 A to B
。这个用保留字infix
修饰的函数,称之为中缀函数(infix function)。变量对的第二部分是
SqlType
类常量。由于这很有趣,我建议你看看它的实现。在这里,它巧妙地使用了操作符重载。插入和查询数据
运用Anko一切都变得容易多了。在插入过程中,不需要创建自己的
ContentValue
来添加所有数据,而是用数据库对象的扩展函数。这样就可以:1 database.use { 2insert("Person", 3"_id" to 1, 4"name" to "John", 5"surname" to "Smith", 6"age" to 20) 7 }
而查询,可以有几种方法进行。在其中之一是,你可以为查询的变量添加名称,并将作为变量对将值添加上:
1 select("Person") 2.where("(_id = {id}) and (name = {name})", 3"id" to 1, 4"name" to "John")
还有另一个方法更类似在Android框架中使用,允许在其后用询问符号和值。在这种情况下,它们都必须为
String
:1 select("Person") 2.whereSimple("(_id = ?) and (name = ?)", 31.toString(), "John")
我个人认为第二种方法更简单。
你还可以使用所有数据库常规操作,如
limit
,orderBy
,having
或groupBy
。你可以在Anko文档中看到所有这些操作。为了处理结果光标,Anko还为我们提供了不同的函数,如
parseSingle
(对一个结果)或者parseList
(对于几个结果)。这些函数接收一个rowParser
。有许多不同的解析器。
MapRowParser
是其中一个有趣的,它将列映射到一张图(map)中。运用这个解析器和
map
委托,您可以直接解析图中的值到类中。可以我的书中看到这个说明。结论
尽管有许多的库可以简化数据库的很多工作,而对于简化工作来说,Anko已足够了。
【在Android上运用Anko和Kotlin开发数据库(SQLite从来不是一件轻松的事(KAD25))】
由于它为我们简化了许多使用数据库的带来痛苦事情,所以它是简化数据库工作的很好选择。
另外,它向我们展示了用其他方式来使用语言,当您遇到问题时,这些语言非常有用。
不要忘了看看以前的文章,了解更多关于Kotlin!
推荐阅读
- Android动态改变布局
- Android Studio升级到0.8.1后怎样设置字体大小()
- Android之asset文件夹下文件的使用
- Android 基于Netty的消息推送方案之概念和工作原理
- App Extension的脱壳办法
- 平面图和非平面图
- Windows的15款最佳免费重复文件查找和删除工具
- 平面设计的5个最佳Canva替代品合集
- 通过注册表固定Win10专业版下桌面图标位置的技巧