将anko-sqlite
依赖项添加到您的build.gradle(Module app)
:
dependencies {
implementation "org.jetbrains.anko:anko-sqlite:0.10.8"
}
Anko提供了一个ManagedSQLiteOpenHelper
无缝替换默认类的特殊类。以下是如何使用它:
class MyDatabaseOpenHelper private constructor(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "MyDatabase", null, 1) {
init {
instance = this
}
companion object {
private var instance: MyDatabaseOpenHelper? = null
@Synchronized
fun getInstance(ctx: Context) = instance ?: MyDatabaseOpenHelper(ctx.applicationContext)
}
override fun onCreate(db: SQLiteDatabase) {
// 在这里创建表
db.createTable("Customer", true,
"id" to INTEGER + PRIMARY_KEY + UNIQUE,
"name" to TEXT,
"photo" to BLOB)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
// 在这里,您可以像往常一样升级表
db.dropTable("User", true)
}
}
// Context的访问属性
val Context.database: MyDatabaseOpenHelper
get() = MyDatabaseOpenHelper.getInstance(this)
使用Anko,您可以轻松创建新表并删除现有表。语法很简单。
database.use {
createTable("Customer", true,
"id" to INTEGER + PRIMARY_KEY + UNIQUE,
"name" to TEXT,
"photo" to BLOB)
}
SQLite中,有五种主要类型:NULL
,INTEGER
,REAL
,TEXT
和BLOB
。但每列可能有一些像PRIMARY KEY
或UNIQUE
的修饰符。您可以附加此类修饰符,并将它们“添加”到主类型名称。
要删除表,请使用以下dropTable
函数:
dropTable("User", true)
// 其中db是SQLiteDatabase
// 例如:val db = database.writeableDatabase
db.insert("User",
"id" to 42,
"name" to "John",
"email" to "[email protected]"
)
或者在database.use的
内部:
database.use {
insert("User",
"id" to 42,
"name" to "John",
"email" to "[email protected]"
)
}
请注意,在上面的示例中database
是一个数据库帮助程序实例,并且db
是一个SQLiteDatabase
对象
函数insertOrThrow()
,replace()
,replaceOrThrow()
也存在且具有相似的语义。
Anko提供了一个方便的查询构建器。可以使用db.select(tableName, vararg columns)
where db
的 SQLiteDatabase
实例创建它。
方法 | 描述 |
---|---|
column(String) |
Add a column to select query |
distinct(Boolean) |
Distinct query |
whereArgs(String) |
Specify raw String where query |
whereArgs(String, args) |
Specify a where query with arguments |
whereSimple(String, args) |
Specify a where query with ? mark arguments |
orderBy(String, [ASC/DESC]) |
Order by this column |
groupBy(String) |
Group by this column |
limit(count: Int) |
Limit query result row count |
limit(offset: Int, count: Int) |
Limit query result row count with an offset |
having(String) |
Specify raw having expression |
having(String, args) |
Specify a having expression with arguments |
标记的函数以特殊方式解析其参数。它们允许您以任何顺序提供值并支持无缝转义。
db.select("User", "name")
.whereArgs("(_id > {userId}) and (name = {userName})",
"userName" to "John",
"userId" to 42)