Kotlin for Android Developers


 Creating an SQLiteOpenHelper


Download 1.04 Mb.
Pdf ko'rish
bet45/79
Sana18.06.2023
Hajmi1.04 Mb.
#1588404
1   ...   41   42   43   44   45   46   47   48   ...   79
Bog'liq
Kotlin for Android Developers Learn Kotlin the Easy Way While Developing an Android App ( PDFDrive )

17 Creating an SQLiteOpenHelper
As you may know, Android uses SQLite as a database management system. SQLite is a database
embedded into the App, and it’s really lightweight. That’s why it is a good option for mobile Apps.
However, the API to work with databases in Android is quite raw. You’ll see you need to write many
SQL sentences and map your objects into
ContentValue
s or from
Cursor
s. Thankfully, by using a
mix of Kotlin and Anko, we are simplifying this task a lot.
Of course, there are many libraries to work with databases in Android, and all of them work in
Kotlin thanks to its interoperability. But it’s possible you don’t need them for simple databases, as
we are going to see in a minute.
17.1 ManagedSqliteOpenHelper
Anko provides a powerful
SqliteOpenHelper
which simplifies things a lot. When we use a regular
SqliteOpenHelper
, we need to call
getReadableDatabase()
or
getWritableDatabase()
, and then
we can perform our queries over the object we get. After that, we shouldn’t forget to call
close()
.
With a
ManagedSqliteOpenHelper
we just do:
1
forecastDbHelper.use {
2
...
3
}
Inside the lambda we can use
SqliteDatabase
functions directly. How does it work? It’s really
interesting to read the implementation of Anko functions, you can learn a lot of Kotlin from it:
1
public fun  use(f: SQLiteDatabase.() -> T): T {
2
try {
3
return openDatabase().f()
4
} finally {
5
closeDatabase()
6
}
7
}
First,
use
receives a function that will be used as an extension function by
SQLiteDatabase
. This
means we can use
this
inside the brackets, and we’ll be referring to the
SQLiteDatabase
object.
This extension function can return a value, so we could do something like this:
64


17 Creating an SQLiteOpenHelper
65
1
val result = forecastDbHelper.use {
2
val queriedObject = ...
3
queriedObject
4
}
Take in mind that, inside a function, the last line represents the returned value. As
T
doesn’t have
any restrictions, we can return any value. Even
Unit
if we don’t want to return anything.
By using a
try-finally
, the
use
function makes sure that the database is closed no matter the
extended function succeeds or crashes.
Besides, we have a lot of other really useful extension functions over
SqliteDatabase
that we’ll be
using later. But for now let’s define our tables and implement the
SqliteOpenHelper
.

Download 1.04 Mb.

Do'stlaringiz bilan baham:
1   ...   41   42   43   44   45   46   47   48   ...   79




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling