Kotlin for android學習十四(佈局篇):資料庫
前言
kotlin官網和kotlin教程學習教程的筆記。
這一節,我們學習Anko庫中的anko-sqlite。主要用於運算元據庫。
引入庫
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
一、定義表
object UserContract {
val TABLE_NAME = "myTable"
val COLUMN_NAME_ID = "id"
val COLUMN_NAME_NAME = "name"
}
二、建立ManagedSQLiteOpenHelper
class MyDatabaseOpenHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, DATABASE_NAME, null, DATABASE_VERSION) {
companion object {
val DATABASE_VERSION = 1
val DATABASE_NAME = "MyDataBase.db"
private var instance: MyDatabaseOpenHelper? = null
fun getInstance(ctx: Context): MyDatabaseOpenHelper {
if (instance == null) {
instance = MyDatabaseOpenHelper(ctx.applicationContext)
}
return instance!!
}
}
override fun onCreate(db: SQLiteDatabase?) {
}
override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
}
}
val Context.database: MyDatabaseOpenHelper
get() = MyDatabaseOpenHelper.getInstance(applicationContext)
三、建立表
override fun onCreate(db: SQLiteDatabase?) {
db?.createTable(UserContract.TABLE_NAME, true,
Pair(UserContract.COLUMN_NAME_ID, INTEGER + PRIMARY_KEY + UNIQUE), // + 會把多個修飾符組合起
Pair(UserContract.COLUMN_NAME_NAME, TEXT))
}
也可以這樣
override fun onCreate(db: SQLiteDatabase?) {
db?.createTable(UserContract.TABLE_NAME, true,
UserContract.COLUMN_NAME_ID to INTEGER + PRIMARY_KEY + UNIQUE,
UserContract.COLUMN_NAME_NAME to TEXT)
}
四、重建表
override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {
db?.dropTable(UserContract.TABLE_NAME, true)
onCreate(db)
}
五、建立資料庫model類
class User(var id: Long,var name: String)
六、寫入和查詢資料庫
doAsync {
var result: List<User> = listOf()
database.use {
for (i in 1..100) {
val values = ContentValues()
values.put(UserContract.COLUMN_NAME_ID, i*10)
values.put(UserContract.COLUMN_NAME_NAME, "user $i")
insert(UserContract.TABLE_NAME, null, values)
}
result = select(UserContract.TABLE_NAME)
.whereSimple("${UserContract.COLUMN_NAME_ID} %?=0", "7")
.parseList(classParser())
}
uiThread {
var str = ""
for (item in result) {
str += "${item.id} is ${item.name} \n"
}
txtView.text = str
}
}
七、使用高階函式與委託的另一種方式
User實體類這樣子
class User(map: MutableMap<String, Any?>) {
var id: Long by map
var name: String by map
}
讀取資料這樣子
......
result = select(UserContract.TABLE_NAME)
.parseList<User> {
User(HashMap(it))
}
......
fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
parseList(object : MapRowParser<T> {
override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})
相關文章
- Android學習—— Android佈局Android
- 學習筆記|AS入門(三) 佈局篇筆記
- Android學習之 UI佈局優化AndroidUI優化
- flex佈局學習Flex
- 一篇全面的CSS佈局學習指南 [譯]CSS
- 保安日記:前端學習第十三篇之移動端佈局rem佈局前端REM
- android基礎學習-android篇day15-相對佈局的常用屬性Android
- 前端BFC佈局學習前端
- CSS學習-Flex佈局複習CSSFlex
- 重新學習MySQL資料庫開篇:資料庫的前世今生MySql資料庫
- Android學習第9課—Activity的佈局初步(一)Android
- Android開發者珍藏必備【學習資料篇】Android
- Android的反編譯(佈局植入篇)Android編譯
- Flex佈局學習筆記Flex筆記
- css經典佈局學習CSS
- (資料科學學習手札103)Python+Dash快速web應用開發——頁面佈局篇資料科學PythonWeb
- Kotlin學習之起點篇Kotlin
- Kotlin【1】 kotlin-android-extensions 通過佈局元件id直接獲取物件KotlinAndroid元件物件
- 大資料學習筆記(十四)-Sqoop大資料筆記OOP
- Android 佈局Android
- 第十四章:絕對佈局(三)
- 第十四章:絕對佈局(五)
- Flutter學習之”相對佈局“Flutter
- kivy八種佈局方式學習
- Xamarin 學習筆記 - Layout(佈局)筆記
- CSS學習筆記:flex佈局CSS筆記Flex
- Android Qcom USB Driver學習(十四)Android
- oracle 學習總結篇一: 資料庫的建立Oracle資料庫
- 資料庫學習資料庫
- Python學習【第十四篇】shutil模組Python
- [面試倉庫]CSS面試題彙總--佈局篇CSS面試題
- Flutter之在Flutter佈局中嵌入原生元件Android篇Flutter元件Android
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- Android佈局概述Android
- Android xml 佈局AndroidXML
- Flutter學習之佈局、互動、動畫Flutter動畫
- Flex 佈局:個人的學習與理解Flex
- Ext學習筆記11-佈局筆記