¿Quieres saber cómo usar SQLite en Android Studio? Tener una base de datos es importante cuando queremos almacenar contenido en nuestra app de manera persistente, es decir, que no se pierdan los datos cuando cerramos la aplicación. En este tutorial veremos cómo implementar SQLite en Android Studio muy fácil, no te lo puedes perder, porque te ayudará a almacenar datos.
SQLite en Android Studio (ejemplo)
Para mostrarte cómo usar SQLite en Android Studio, veremos un sencillo ejemplo que te ayudará a implementarla en tu propia aplicación. Para ello, necesitamos 2 clases, la clase principal y una clase que extienda de SQLiteOpenHelper.
Trataremos un ejemplo muy sencillo, de alta, baja, modificación y borrado de usuarios, es decir, un CRUD. Almacenaremos el DNI (que será la clave primaria, que nos ayudará a encontrar al usuario), además de nombre y apellidos, ciudad y número.
Estas son las clases que necesitamos (las 2 clases .java) y .XML (que es la vista/layout):
AdminSqLiteOpenHelper
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package es.aadesigners.pruebabd; /** * Created by Andrea on 29/2/16. */ import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class AdminSQLiteOpenHelper extends SQLiteOpenHelper { public AdminSQLiteOpenHelper(Context context, String nombre, SQLiteDatabase.CursorFactory factory, int version) { super(context, nombre, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //aquí creamos la tabla de usuario (dni, nombre, ciudad, numero) db.execSQL("create table usuario(dni integer primary key, nombre text, ciudad text, numero integer)"); } @Override public void onUpgrade(SQLiteDatabase db, int version1, int version2) { db.execSQL("drop table if exists usuario"); db.execSQL("create table usuario(dni integer primary key, nombre text, ciudad text, numero integer)"); } } |
Main_activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
package es.aadesigners.pruebabd; /** * Created by Andrea on 29/2/16. */ import android.widget.Toast; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et1, et2, et3, et4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // proviene del layout, son los campos de texto et1 = (EditText) findViewById(R.id.editText1); et2 = (EditText) findViewById(R.id.editText2); et3 = (EditText) findViewById(R.id.editText3); et4 = (EditText) findViewById(R.id.editText4); } // Damos de alta los usuarios en nuestra aplicación public void alta(View v) { AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1); SQLiteDatabase bd = admin.getWritableDatabase(); String dni = et1.getText().toString(); String nombre = et2.getText().toString(); String ciudad = et3.getText().toString(); String numero = et4.getText().toString(); ContentValues registro = new ContentValues(); registro.put("dni", dni); registro.put("nombre", nombre); registro.put("ciudad", ciudad); registro.put("numero", numero); // los inserto en la base de datos bd.insert("usuario", null, registro); bd.close(); // ponemos los campos a vacío para insertar el siguiente usuario et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); Toast.makeText(this, "Datos del usuario cargados", Toast.LENGTH_SHORT).show(); } // Hacemos búsqueda de usuario por DNI public void consulta(View v) { AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1); SQLiteDatabase bd = admin.getWritableDatabase(); String dni = et1.getText().toString(); Cursor fila = bd.rawQuery( "select nombre, ciudad, numero from usuario where dni=" + dni, null); if (fila.moveToFirst()) { et2.setText(fila.getString()); et3.setText(fila.getString(1)); et4.setText(fila.getString(2)); } else Toast.makeText(this, "No existe ningún usuario con ese dni", Toast.LENGTH_SHORT).show(); bd.close(); } /* Método para dar de baja al usuario insertado*/ public void baja(View v) { AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1); SQLiteDatabase bd = admin.getWritableDatabase(); String dni = et1.getText().toString(); // aquí borro la base de datos del usuario por el dni int cant = bd.delete("usuario", "dni=" + dni, null); bd.close(); et1.setText(""); et2.setText(""); et3.setText(""); et4.setText(""); if (cant == 1) Toast.makeText(this, "Usuario eliminado", Toast.LENGTH_SHORT).show(); else Toast.makeText(this, "No existe usuario", Toast.LENGTH_SHORT).show(); } // Método para modificar la información del usuario public void modificacion(View v) { AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1); SQLiteDatabase bd = admin.getWritableDatabase(); String dni = et1.getText().toString(); String nombre = et2.getText().toString(); String ciudad = et3.getText().toString(); String numero = et4.getText().toString(); ContentValues registro = new ContentValues(); // actualizamos con los nuevos datos, la información cambiada registro.put("nombre", nombre); registro.put("ciudad", ciudad); registro.put("numero", numero); int cant = bd.update("usuario", registro, "dni=" + dni, null); bd.close(); if (cant == 1) Toast.makeText(this, "Datos modificados con éxito", Toast.LENGTH_SHORT) .show(); else Toast.makeText(this, "No existe usuario", Toast.LENGTH_SHORT).show(); } /* fin del programa */ } |
main_activity.xml
A continuación te mostramos el main_activity.xml, es decir, el layout de la app. Es la vista, lo que veremos al ejecutarlo en el móvil.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="es.aadesigners.pruebabd.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DNI" android:id="@+id/textView" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_below="@+id/textView" android:layout_alignParentStart="true" android:layout_alignParentEnd="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Nombre y apellidos" android:id="@+id/textView3" android:layout_below="@+id/editText1" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText2" android:layout_below="@+id/textView3" android:layout_alignParentStart="true" android:layout_alignEnd="@+id/editText1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ciudad" android:id="@+id/textView4" android:layout_below="@+id/editText2" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText3" android:layout_below="@+id/textView4" android:layout_alignEnd="@+id/editText2" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Número" android:id="@+id/textView5" android:layout_below="@+id/editText3" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText4" android:layout_below="@+id/textView5" android:layout_alignParentStart="true" android:layout_alignEnd="@+id/editText3" android:layout_alignParentEnd="false" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Alta" android:id="@+id/button" android:layout_below="@+id/editText4" android:layout_alignParentStart="true" android:onClick="alta" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Consulta DNI" android:id="@+id/button2" android:onClick="consulta" android:layout_alignTop="@+id/button" android:layout_toEndOf="@+id/button" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BAJA" android:id="@+id/button3" android:onClick="baja" android:layout_alignTop="@+id/button2" android:layout_toEndOf="@+id/button2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MODIFICACIÓN DE DATOS" android:id="@+id/button4" android:onClick="modificacion" android:layout_below="@+id/button" android:layout_toEndOf="@+id/button" android:layout_marginTop="55dp" /> </RelativeLayout> |
Resultado
El resultado del anterior layout, lo vemos en la siguiente imagen.
Ahora, tan solo tendrás que ejecutar la app en tu smartphone.
- Alta de usuarios: tras introducir los datos, hacemos clic en el botón de alta para que automáticamente se almacenen en la base de datos.
- Consulta DNI: introduce el DNI que has almacenado, para que te muestre toda la información del usuario.
- Baja: introduce el DNI del usuario que quieras dar de baja, y al hacer clic aquí automáticamente se dará de baja.
- Modificación de datos: introduce el DNI del usuario que quieres modificar los datos, tan solo tendrás que cambiar los datos que quieras. Haces una consulta, cambias los parámetros que quieras y luego, los modificas.
¿Ya sabes cómo usar SQLite en Android Studio? Esperamos que te haya quedado claro con este ejemplo. Lo cierto, es que es muy sencillo porque podrás empezar a trabajar con BD desde 0.
Esperamos que te haya funcionado. Acuérdate de que son 2 clases y otra el layout. ¡No tiene pérdida!
Muy buena explicación. sabes de una buena manera de usar la el SQLite para ser sincronizado con un webservice.
Buenas Noches no me permite realizar consultas la base de datos
como seria el codigo para consultar por nombre plase?
Si en el dni incluyo la letra se detiene la app, como hacer para poder meter el dni completo con letra?
Conseguiste solucionarlo?
coloca en tu( activity_main.xml) donde tengas q ingresar numeros este codigo
android:inputType=»number»
y solo se podra ingresar numeros
Hola, muchas gracias por el tutorial y los codigos. Exporte la tabla y llene una nueva con muchos datos, pero solo me funciona en el emulador. como puedo agregar una tabla sqlite para que sea instalada en los dispositivos junto con la aplicacion?
Hola pudiste ? , a mi me pasa igual y me encantaria saber la solucion , mi correo es seba.tamay37@gmail.com , gracias.
Woo muy bien tutorial!, lo único que quería era lograr la conexión y con esto no batallé nada :D, ahora viene lo difícil y divertido, personalizarlo.
Se podra poner todos los registros en un listview?
Cómo se hace para poder meter letras en el DNI? alguien encontró la solución?
por lo que veo en el código la razón de que no acepte letras el DNI es por que esta declarado como integer en la clase AdminSQLiteOpenHelper si lo cambian a tipo texto podrían ingresar cualquier carácter
Como implementarlo para más de una tabla?
Cuando se instancia una base de datos por primera vez (AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,»administracion», null, 1);) qué valores tienen los campos? null?
Si es la primera vez que se utilizase la app y quisiera comprobar si hay guardada una password… podría consultar la base de datos sin haber insertado ningún dato todavía?
tengo un problema se me cae mi aplicación cuando voy a tener q hacer una búsqueda por el dni y también otras modificaciones ,lo único q puedo haces es ingresar datos … por favor verifica tu codigo.,.
hola buenos días una pregunta como exportaríamos el ejemplo