askIT

Database tutorial (Android SQLite)

I denne guiden får du et innblikk i hvordan du kan lage en enkel database med Android. Artikkelen lager en applikasjon som kan skrive notater.

e34559d41311fa4ac86dfe915ac7fa2a Last ned kildekode for databasetutorial   applications-multimedia.png Se video

01 Opprett prosjekt

Start opp Android Studio og velg nytt prosjekt. Klikk så neste til prosjektet er opprettet.

01_nytt_prosjekt.jpg

01_nytt_prosjekt.jpg

03_nytt_prosjektb.jpg

04_add_an_activity_to_mobile.jpg

05_customize_the_activity.jpg

02 Kjør app i emulator

For å forsikre oss om at prosjektet ble opprettet korrekt kjører man alltid prosjektet inn i emulatoren. Dette gjøres ved å først renske prosjektet ved å klikke «Build -> Clean project», deretter «Run app».

06_clean_project.jpg

07_run_app.jpg

08_lunch_emulator.jpg

Du skal nå få opp en applikasjon som er helt tom med kun teksten «Hello World».

09_ny_tom_app.jpg

03 Databasen

Nå skal vi tenkte hvordan vi ønsker databasetabellen. Vi ønsker å lagre notater, og tenker derfor at notatene skal ha følgende:

Tabellen «notes» vil derfor se slik ut:

Field Type Key
note_id int Primærnøkkel
note_title varchar
note_text text

03 DBAdapter java klasse

For å lage tabellen, samt kjøre spørringer mot den trenger applikasjonen en egen klasse med navnet «DBAdapter». For å lage DBAdapter åpner du «app -> java». Høyreklikk så på «com.nettport.notatblokk» slik at du får opp menyen. Velg «New -> Java Class».

10_new_java_class.jpg

Gi navnet «DBAdapter» til den nye klassen.

11_create_new_class.jpg

04 Opprett tabell

I klassen «DBAdapter» må vi opprette tabellen «notes».
01: Her lagrer vi variabler om databasen.
02: Her lager vi opprettingen av tabellen inn i en variabel.

DBadapter.class

package com.nettport.notatblokk;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

public class DBAdapter {
        /*- 01 Database and table names ------------------------------ */
        private static final String databaseName        = "MinDB";
        private static final String databaseTableNotes = "notes";
        private static final int databaseVersion        = 1;


        /*- 02 Create table statements ------------------------------ */
        // Create table notes
        private static final String databaseCreateTableNotes =
        "CREATE TABLE IF NOT EXISTS " + databaseTableNotes + " " +
        "( note_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
        " note_title VARCHAR," +
        " note_text TEXT);";


}

Deretter oppretter vi metodene onCreate og onUpgrade. Disse skal sørge for at vi lager tabellene, og oppgraderer de hvis vi endrer versjonsnummeret til tabellen som er lagret i variabelen databaseVersion.

        /*- 03 Database variables ----------------------------------- */
        /*- Dont edit! ---------------------------------------------- */
        private final Context context;
        private DatabaseHelper DBHelper;
        private SQLiteDatabase db;

        /*- 04 Class ------------------------------------------------ */
        /*- Dont edit! ---------------------------------------------- */
        public DBAdapter(Context ctx) {
                this.context = ctx;
                DBHelper = new DatabaseHelper(context);
        } // end public DBAdapter


        /*- 05 Start DBAdapter -------------------------------------- */
        private static class DatabaseHelper extends SQLiteOpenHelper {
                DatabaseHelper(Context context) {
                        super(context, databaseName, null, databaseVersion);
                }

                @Override
                public void onCreate(SQLiteDatabase db)
                {
                        try {
                                // ! All tables that are going to be created need to be listed here
                                db.execSQL(databaseCreateTableNotes);
                        } catch (SQLException e) {
                                e.printStackTrace();
                        }
                } // end public void onCreate

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


                        // ! All tables that are going to be dropped need to be listed here
                        db.execSQL("DROP TABLE IF EXISTS " + databaseTableNotes);
                        onCreate(db);

                        String TAG = "Tag";
                        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                                        + newVersion + ", which will destroy all old data");

                } // end public void onUpgrade
        } // end private static class DatabaseHelper extends SQLiteOpenHelper

Til slutt kan vi skrive metodene for å åpne open og lukke close tilkoblingen til databasen.


        /*- 06 Open and close database ---------------------------- */
        /*- Dont edit! -------------------------------------------- */
        //---opens the database---
        public DBAdapter open() throws SQLException {
                db = DBHelper.getWritableDatabase();
                return this;
        }

        //---closes the database---
        public void close() {
                DBHelper.close();
        }

Du kan kikke på DBAdapter for å se om du har fått alt likt til nå.

05 Spørringer til databasen

Vi ønsker å skrive data til tabellen, lese data, oppdatere data og slette data. Dette gjør vi ved å skrive spørringer. Alle spørringene skal skrives inn i klassen DBAdapter.


        /*- 07 Queries for notes ----------------------------------- */
        // Insert record
        public long insertRecordToNotes(String inpTitle, String inpText)
        {
                ContentValues initialValues = new ContentValues();
                initialValues.put("note_title", inpTitle);
                initialValues.put("note_text", inpText);

                return db.insert(databaseTableNotes, null, initialValues);
        }
        // Retrieve
        public Cursor getAllRecordsFromNotes()
        {
                return db.query(databaseTableNotes, new String[]{
                                "note_id",
                                "note_title",
                                "note_text"
                }, null, null, null, null, null, null);
        }
        public Cursor getAllRecordsFromNotesListView()
        {
                return db.query(databaseTableNotes, new String[]{
                                "note_id AS _id",
                                "note_title",
                                "note_text"
                }, null, null, null, null, null, null);
        }
        // Retrieves a particular record
        public Cursor getRecordFromNotes(long rowId) throws SQLException {
                Cursor mCursor = db.query(databaseTableNotes, new String[] {
                                                "note_id",
                                                "note_title",
                                                "note_text"
                                },
                                "note_id" + "=" + rowId, null, null, null, null, null);
                if (mCursor != null) {
                        mCursor.moveToFirst();
                }
                return mCursor;
        }
        public int truncateNotes()
        {
                return db.delete(databaseTableNotes, "1", null);
        }

Last ned hele DBAdapter.

06 MainActivity

Du kan nå åpne klassen «MainActivity». I denne klassen skal du programmere det som skal gjøres mot databasen. Vi skal ta for oss følgende:

Vi programmerer det vi ønsker å gjøre til databasen under metoden onCreate, og for å vise data fra databasen oppretter vi en ny metode displayRecordFromNotes.

12_mainactivity.jpg

Under onCreate


                /*- Database ---------------------------------------------------------------------------- */
                /* Open DBAdapter */
                DBAdapter db = new DBAdapter(this);

                /* Open db */
                db.open();

                // Insert row
                long id = 0;
                id = db.insertRecordToNotes("Handleliste", "Cola Zero, Knekkebrød");
                Toast.makeText(this, "Insered ID: " + id, Toast.LENGTH_LONG).show();

                // Display row
                Cursor cNote = db.getAllRecordsFromNotes();
                cNote.moveToLast();
                displayRecordFromNotes(cNote);

                // Update Row
                int feedback = db.updateNote(id, "Handleliste", "Cola Light, Knekkebrød");
                Toast.makeText(this, "Feedback: " + feedback, Toast.LENGTH_LONG).show();

                // Display row
                cNote = db.getAllRecordsFromNotes();
                cNote.moveToLast();
                displayRecordFromNotes(cNote);

                /* Close db */
                db.close();

Ny metode displayRecordFromNotes

        /*- Notes ------------------------------------------------- */
        // Print notes table content
        private void displayRecordFromNotes(Cursor inpCursor) {
                Toast.makeText(this,
                                "Id: " + inpCursor.getString(0) + "\n" +
                                "Tittel: " + inpCursor.getString(1) + "\n" +
                                "Tekst: " + inpCursor.getString(2),
                                Toast.LENGTH_LONG).show();
        } // end private void displayRecordFromNotes

Når du nå kjører applikasjonen vil den først lage en rad som heter «Handleliste». Denne vil inneholde teskten «Cola Zero, Knekkebrød».

Deretter vil denne bli vist.

Så vil programmet oppdatere radens tekst fra Cola Zero til Cola Light.

Så vil den nye teksten bli vist.

13_run.jpg

14_inserted.jpg
Figur: Data blir satt inn.

15print.jpg
Figur: Data blir skrevet ut.

16_update.jpg
Figur: Data blir oppdatert. Feedback gir verdien 1 for å bekrefte at det fungerte.

17_ny_print.jpg
Figur: Ny data blir skrevet ut.

mark_down.png Annonse

Akuratt nå: Ask IT bruker og anbefaler one.com for domener, e-post og webhotell!
hva-er-ditt-nye-domene.com
Besøk oss på one.com