Android viene con una implementación incorporada de un paquete de base de datos, que es SQLite , una base de datos SQL de código abierto que almacena datos en forma de texto en los dispositivos. En este artículo, veremos la implementación de Android SQLite en Kotlin.
SQLite es un motor de base de datos SQL autónomo, de alta confiabilidad, integrado, con todas las funciones y de dominio público. Es el motor de base de datos más utilizado en el mundo. Es una biblioteca en proceso y su código está disponible públicamente. Es de uso gratuito para cualquier propósito, comercial o privado. Es básicamente un motor de base de datos SQL integrado. SQLite puede leer y escribir fácilmente los archivos de disco ordinarios porque no tiene ningún servidor separado como SQL. El formato de archivo de la base de datos SQLite es multiplataforma, por lo que cualquiera puede copiar fácilmente una base de datos entre sistemas de 32 y 64 bits. Debido a todas estas características, es una opción popular como formato de archivo de aplicación.
¿Qué vamos a construir en este artículo?
Construiremos una aplicación simple que almacenará datos usando SQLite y también implementaremos métodos para recuperar los datos. A continuación se muestra un video de muestra para mostrar lo que haremos.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: dar permiso para acceder al almacenamiento en el archivo AndroidManifest.xml
Vaya a aplicación > AndroidManifest.xml y agréguele el siguiente código.
XML
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Paso 3: trabajar con el archivo activity_main.xml
Vaya a aplicación > res > diseño > actividad_principal.xml . Agregue el siguiente código a su archivo. A continuación se muestra el código para activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!-- Edit text to enter name --> <EditText android:id="@+id/enterName" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter Name" android:textSize="22sp" android:layout_margin="20sp"/> <!-- Edit text to enter age --> <EditText android:id="@+id/enterAge" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20sp" android:textSize="22sp" android:hint="Enter Age"/> <!-- Button to add Name --> <Button android:id="@+id/addName" android:layout_width="150sp" android:layout_gravity="center" android:background="@color/colorPrimary" android:text="Add Name" android:textColor="#ffffff" android:textSize="20sp" android:layout_height="wrap_content" android:layout_marginTop="20sp"/> <!-- Button to print Name --> <Button android:id="@+id/printName" android:layout_width="150sp" android:layout_gravity="center" android:background="@color/colorPrimary" android:text="Print Name" android:textColor="#ffffff" android:textSize="20sp" android:layout_height="wrap_content" android:layout_marginTop="20sp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Text view to get all name --> <TextView android:id="@+id/Name" android:textAlignment="center" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20sp" android:text="Name\n\n" android:textSize="22sp" android:padding="10sp" android:textColor="#000000"/> <!-- Text view to get all ages --> <TextView android:layout_weight="1" android:id="@+id/Age" android:textAlignment="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20sp" android:text="Age\n\n" android:textSize="22sp" android:padding="10sp" android:textColor="#000000"/> </LinearLayout> </LinearLayout>
Paso 4: Creando una nueva clase para operaciones de SQLite
Vaya a aplicación > java > nombre del paquete de su proyecto > haga clic con el botón derecho en él > Nuevo > clase Kotlin y asígnele el nombre DBHelper y agréguele el siguiente código. Para hacer el código más comprensible, se agregan comentarios.
Kotlin
package com.release.gfg1 import android.content.ContentValues import android.content.Context import android.database.Cursor import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper class DBHelper(context: Context, factory: SQLiteDatabase.CursorFactory?) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION) { // below is the method for creating a database by a sqlite query override fun onCreate(db: SQLiteDatabase) { // below is a sqlite query, where column names // along with their data types is given val query = ("CREATE TABLE " + TABLE_NAME + " (" + ID_COL + " INTEGER PRIMARY KEY, " + NAME_COl + " TEXT," + AGE_COL + " TEXT" + ")") // we are calling sqlite // method for executing our query db.execSQL(query) } override fun onUpgrade(db: SQLiteDatabase, p1: Int, p2: Int) { // this method is to check if table already exists db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME) onCreate(db) } // This method is for adding data in our database fun addName(name : String, age : String ){ // below we are creating // a content values variable val values = ContentValues() // we are inserting our values // in the form of key-value pair values.put(NAME_COl, name) values.put(AGE_COL, age) // here we are creating a // writable variable of // our database as we want to // insert value in our database val db = this.writableDatabase // all values are inserted into database db.insert(TABLE_NAME, null, values) // at last we are // closing our database db.close() } // below method is to get // all data from our database fun getName(): Cursor? { // here we are creating a readable // variable of our database // as we want to read value from it val db = this.readableDatabase // below code returns a cursor to // read data from the database return db.rawQuery("SELECT * FROM " + TABLE_NAME, null) } companion object{ // here we have defined variables for our database // below is variable for database name private val DATABASE_NAME = "GEEKS_FOR_GEEKS" // below is the variable for database version private val DATABASE_VERSION = 1 // below is the variable for table name val TABLE_NAME = "gfg_table" // below is the variable for id column val ID_COL = "id" // below is the variable for name column val NAME_COl = "name" // below is the variable for age column val AGE_COL = "age" } }
Paso 5: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package com.release.gfg1 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // below code is to add on click // listener to our add name button addName.setOnClickListener{ // below we have created // a new DBHelper class, // and passed context to it val db = DBHelper(this, null) // creating variables for values // in name and age edit texts val name = enterName.text.toString() val age = enterAge.text.toString() // calling method to add // name to our database db.addName(name, age) // Toast to message on the screen Toast.makeText(this, name + " added to database", Toast.LENGTH_LONG).show() // at last, clearing edit texts enterName.text.clear() enterAge.text.clear() } // below code is to add on click // listener to our print name button printName.setOnClickListener{ // creating a DBHelper class // and passing context to it val db = DBHelper(this, null) // below is the variable for cursor // we have called method to get // all names from our database // and add to name text view val cursor = db.getName() // moving the cursor to first position and // appending value in the text view cursor!!.moveToFirst() Name.append(cursor.getString(cursor.getColumnIndex(DBHelper.NAME_COl)) + "\n") Age.append(cursor.getString(cursor.getColumnIndex(DBHelper.AGE_COL)) + "\n") // moving our cursor to next // position and appending values while(cursor.moveToNext()){ Name.append(cursor.getString(cursor.getColumnIndex(DBHelper.NAME_COl)) + "\n") Age.append(cursor.getString(cursor.getColumnIndex(DBHelper.AGE_COL)) + "\n") } // at last we close our cursor cursor.close() } } }
Ahora ejecute su aplicación y vea el resultado.
Producción: