Base de datos SQLite de Android en Kotlin

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:

Publicación traducida automáticamente

Artículo escrito por scoder13 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *