SQLite Tutorial con esempio in Android Studio | Android Database Tutorial in Android Studio: Memorizza i tuoi dati

SQLite Tutorial Con Esempio In Android Studio

SQLite è un database a base di query Structure, open source, leggero, senza accesso alla rete e standalone. Supporta le caratteristiche del database relazionale incorporato.

Operazioni database SQLite

Operazioni database SQLite

Quando un’applicazione ha bisogno di memorizzare grandi quantità di dati, utilizzare sqlite è più preferibile di altri sistemi di repository come SharedPreferences o salvare i dati nei file.

Android ha incorporato l’implementazione del database SQLite. È disponibile localmente sul dispositivo (mobile & tablet) e contiene dati in formato testo. Trasporta dati leggeri e adatti a molte lingue. Quindi, non richiede alcuna amministrazione o procedura di configurazione del database.

Nota importante – Il database creato viene salvato in una directory: data/data/APP_Name/databases/DATABASE_NAME.

Creazione e aggiornamento del database in Android

Per creare, aggiornare e altre operazioni è necessario creare una sottoclasse o classe SQLiteOpenHelper. SQLiteOpenHelper è una classe di aiuto per gestire la creazione di database e la gestione delle versioni. Fornisce due metodi onCreate(SQLiteDatabase db), onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion).

L’SQLiteOpenHelper è responsabile dell’apertura del database se esiste, della creazione del database se non esiste e dell’aggiornamento se richiesto. SQLiteOpenHelper richiede solo il DATABASE_NAME per creare il database. Dopo aver esteso SQLiteOpenHelper è necessario implementare i suoi metodi onCreate, onUpgrade e il costruttore.

onCreate(SQLiteDatabase sqLiteDatabase) è chiamato solo una volta durante il ciclo di vita dell’applicazione. Sarà chiamato ogni volta che c’è una prima chiamata alla funzione getReadableDatabase() o getWritableDatabase() disponibile nella classe super SQLiteOpenHelper. Quindi la classe SQLiteOpenHelper chiama il metodo onCreate() dopo aver creato il database e istanziare l’oggetto SQLiteDatabase. Il nome del database viene passato nel costruttore.

onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion) viene chiamato solo quando c’è un aggiornamento nella versione esistente. Quindi per aggiornare una versione dobbiamo incrementare il valore della variabile version passata nel costruttore della superclasse.

Nel metodo onUpgrade possiamo scrivere query per eseguire qualsiasi azione sia richiesta. Nella maggior parte degli esempi vedrete che le tabelle esistenti vengono eliminate e il metodo onCreate() viene chiamato per creare nuovamente le tabelle. Ma non è obbligatorio farlo e tutto dipende dalle vostre esigenze.

Dobbiamo cambiare la versione del database se abbiamo aggiunto una nuova riga nella tabella del database. Se abbiamo l’esigenza di non perdere i dati esistenti nella tabella, allora possiamo scrivere la query alter table nel metodo onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion).

Per maggiori dettagli leggi: Insert, Read, Delete & Operazione di aggiornamento in SQLite

Esempio di SQLite in Android Studio

Capire meglio Sqlite prima di leggere l’esempio – Per capire meglio il database SQlite, si raccomanda di leggere prima il seguente articolo:

  • Introduzione a SQLite e installazione
  • Elenco di tutti gli operatori in SQLite
  • Tipo di dati e comandi in SQLite
  • Elenco di tutte le clausole in SQLite per definire condizioni specifiche
  • Inserire, Read, Delete & Operazione di aggiornamento in SQLite

In questo esempio vogliamo semplicemente illustrare le operazioni di inserimento, aggiornamento, cancellazione e altro di SQLite su una tabella in Android Studi. Abbiamo creato un’attività con una textview, un pulsante e un edittext su di essa. Un’altra classe che estende SQLiteOpenHelper dove verranno eseguite le operazioni di creazione e inserimento. L’esempio contiene un’adeguata convalida come la necessità di inserire i dati prima di eseguire qualsiasi operazione.

Di seguito potete scaricare il codice, vedere l’output finale e la spiegazione passo dopo passo:

Scaricare il codice

Operazione di inserimento di SQlite in Android Studio

Operazione di inserimento di SQlite in Android Studio

Step 1: creare un nuovo progetto e nominarlo SQLiteOperations.

Passo 2: Aprire il res -> layout -> activity_main.xml (o) main.xml e aggiungere il seguente codice:

In questo passo creiamo un layout nel nostro file XML aggiungendo textbox, buttons, edittext. Sul pulsante onclick è definito che lo associa alla funzione relativa.

<?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:id="@+id/activity_main" 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="com.example.sqliteoperations.MainActivity" android:background="@android:color/holo_blue_dark"> <TextView android:text="@string/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="12dp" android:id="@+id/textView" android:textSize="18sp" android:textStyle="bold|italic" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:gravity="center" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editName" android:textStyle="bold|italic" android:layout_below="@+id/textView" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:hint="Enter Name" android:gravity="center_vertical|center" /> <TextView android:text="@string/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="13dp" android:id="@+id/textView2" android:textStyle="bold|italic" android:textSize="18sp" android:layout_below="@+id/editName" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:gravity="center" android:hint="Enter Password" /> <Button android:text="@string/view_data" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:textSize="18sp" android:onClick="viewdata" android:textStyle="bold|italic" android:layout_alignBaseline="@+id/button" android:layout_alignBottom="@+id/button" android:layout_alignRight="@+id/button4" android:layout_alignEnd="@+id/button4" /> <Button android:text="@string/add_user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:textStyle="bold|italic" android:textSize="18sp" android:onClick="addUser" android:layout_marginLeft="28dp" android:layout_marginStart="28dp" android:layout_below="@+id/editPass" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="23dp" /> <Button android:text="@string/update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:onClick="update" android:textStyle="normal|bold" android:layout_below="@+id/editText3" android:layout_alignLeft="@+id/button4" android:layout_alignStart="@+id/button4" android:layout_marginTop="13dp" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editText6" android:layout_alignTop="@+id/button4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:freezesText="false" android:hint="Enter Name to Delete Data" android:layout_toLeftOf="@+id/button2" android:layout_toStartOf="@+id/button2" /> <Button android:text="@string/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="21dp" android:layout_marginEnd="21dp" android:id="@+id/button4" android:onClick="delete" android:textStyle="normal|bold" tools:ignore="RelativeOverlap" android:layout_marginBottom="41dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:layout_marginTop="47dp" android:id="@+id/editText3" android:textStyle="bold|italic" android:textSize="14sp" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="7dp" android:layout_marginStart="7dp" android:hint="Current Name" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:layout_marginTop="11dp" android:id="@+id/editPass" android:hint="Enter Password" android:gravity="center_vertical|center" android:textSize="18sp" android:layout_below="@+id/textView2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:textAllCaps="false" android:textStyle="normal|bold" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editText5" android:textStyle="bold|italic" android:textSize="14sp" android:hint="New Name" android:layout_alignTop="@+id/button3" android:layout_alignLeft="@+id/editText3" android:layout_alignStart="@+id/editText3" android:layout_marginTop="32dp" /></RelativeLayout>

Step 3 : Ora aprite l’app -> java -> package -> MainActivity.java e aggiungere il codice seguente.

In questo passo abbiamo usato le funzioni che si collegano tramite il click del pulsante. Queste funzioni sono definite in altre classi e sono usate qui. Ogni funzione restituisce un valore che definisce il numero di righe aggiornate, usando questo abbiamo definito se l’operazione ha successo o no. Inoltre l’utente deve definire i dati validi per eseguire l’operazione i campi vuoti non saranno accettati e restituiranno un errore.

package com.example.sqliteoperations;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { EditText Name, Pass , updateold, updatenew, delete; myDbAdapter helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Name= (EditText) findViewById(R.id.editName); Pass= (EditText) findViewById(R.id.editPass); updateold= (EditText) findViewById(R.id.editText3); updatenew= (EditText) findViewById(R.id.editText5); delete = (EditText) findViewById(R.id.editText6); helper = new myDbAdapter(this); } public void addUser(View view) { String t1 = Name.getText().toString(); String t2 = Pass.getText().toString(); if(t1.isEmpty() || t2.isEmpty()) { Message.message(getApplicationContext(),"Enter Both Name and Password"); } else { long id = helper.insertData(t1,t2); if(id<=0) { Message.message(getApplicationContext(),"Insertion Unsuccessful"); Name.setText(""); Pass.setText(""); } else { Message.message(getApplicationContext(),"Insertion Successful"); Name.setText(""); Pass.setText(""); } } } public void viewdata(View view) { String data = helper.getData(); Message.message(this,data); } public void update( View view) { String u1 = updateold.getText().toString(); String u2 = updatenew.getText().toString(); if(u1.isEmpty() || u2.isEmpty()) { Message.message(getApplicationContext(),"Enter Data"); } else { int a= helper.updateName( u1, u2); if(a<=0) { Message.message(getApplicationContext(),"Unsuccessful"); updateold.setText(""); updatenew.setText(""); } else { Message.message(getApplicationContext(),"Updated"); updateold.setText(""); updatenew.setText(""); } } } public void delete( View view) { String uname = delete.getText().toString(); if(uname.isEmpty()) { Message.message(getApplicationContext(),"Enter Data"); } else{ int a= helper.delete(uname); if(a<=0) { Message.message(getApplicationContext(),"Unsuccessful"); delete.setText(""); } else { Message.message(this, "DELETED"); delete.setText(""); } } }}

Step 4: In questo passo creiamo una classe java myDbAdapter. java.

In questo definiamo le funzioni che sono utilizzate per eseguire le operazioni di inserimento, aggiornamento e cancellazione in SQLite. Inoltre questa classe crea un’altra classe che estenderà SQLiteOpenHelper. Ogni funzione porta metodi equivalenti che eseguono le operazioni.

Nota importante – Secondo la convenzione di denominazione si suggerisce di definire la chiave primaria iniziando con underscore esempio: _id.

package com.example.sqliteoperations;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class myDbAdapter { myDbHelper myhelper; public myDbAdapter(Context context) { myhelper = new myDbHelper(context); } public long insertData(String name, String pass) { SQLiteDatabase dbb = myhelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(myDbHelper.NAME, name); contentValues.put(myDbHelper.MyPASSWORD, pass); long id = dbb.insert(myDbHelper.TABLE_NAME, null , contentValues); return id; } public String getData() { SQLiteDatabase db = myhelper.getWritableDatabase(); String columns = {myDbHelper.UID,myDbHelper.NAME,myDbHelper.MyPASSWORD}; Cursor cursor =db.query(myDbHelper.TABLE_NAME,columns,null,null,null,null,null); StringBuffer buffer= new StringBuffer(); while (cursor.moveToNext()) { int cid =cursor.getInt(cursor.getColumnIndex(myDbHelper.UID)); String name =cursor.getString(cursor.getColumnIndex(myDbHelper.NAME)); String password =cursor.getString(cursor.getColumnIndex(myDbHelper.MyPASSWORD)); buffer.append(cid+ " " + name + " " + password +" \n"); } return buffer.toString(); } public int delete(String uname) { SQLiteDatabase db = myhelper.getWritableDatabase(); String whereArgs ={uname}; int count =db.delete(myDbHelper.TABLE_NAME ,myDbHelper.NAME+" = ?",whereArgs); return count; } public int updateName(String oldName , String newName) { SQLiteDatabase db = myhelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(myDbHelper.NAME,newName); String whereArgs= {oldName}; int count =db.update(myDbHelper.TABLE_NAME,contentValues, myDbHelper.NAME+" = ?",whereArgs ); return count; } static class myDbHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myDatabase"; // Database Name private static final String TABLE_NAME = "myTable"; // Table Name private static final int DATABASE_Version = 1;. // Database Version private static final String UID="_id"; // Column I (Primary Key) private static final String NAME = "Name"; //Column II private static final String MyPASSWORD= "Password"; // Column III private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+ " ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+NAME+" VARCHAR(255) ,"+ MyPASSWORD+" VARCHAR(225));"; private static final String DROP_TABLE ="DROP TABLE IF EXISTS "+TABLE_NAME; private Context context; public myDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_Version); this.context=context; } public void onCreate(SQLiteDatabase db) { try { db.execSQL(CREATE_TABLE); } catch (Exception e) { Message.message(context,""+e); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { try { Message.message(context,"OnUpgrade"); db.execSQL(DROP_TABLE); onCreate(db); }catch (Exception e) { Message.message(context,""+e); } } }}

Step 5: In questo passo creare un’altra classe java Message.class

In questa semplicemente aggiungere un toast per la visualizzazione del messaggio. Questo è opzionale, è solo aggiunto di nuovo e di nuovo definendo toast nell’esempio.

package com.example.sqliteoperations;import android.content.Context;import android.widget.Toast;public class Message { public static void message(Context context, String message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); }}

Output
Ora esegui l’app e visualizza la funzionalità aggiunta sopra i pulsanti.
Operazione di aggiornamento e cancellazione in Android Studio

Operazione di aggiornamento e cancellazione in Android Studio

Aggiungi & Recupera immagine dal database SQLite:

Per capire come aggiungere o recuperare l’immagine dalla memoria esterna del telefono all’applicazione utilizzando SQLite Database. Si prega di leggere il nostro passo per passo aggiungere & recuperare l’immagine da SQLite tutorial.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *