在Android中利用SQLite實現對數據的增刪查改


  停更了一天,I'm back again~~當我們需要操作大量的數據時,我們首先想到的當然是數據庫,因為可以通過簡單的語句實現數據的增刪改查,在Android中,我們不使用SQL或者ORACLE,我們使用SQLite,因為它占用資源更少,而語句格式與SQL語句一樣。

  首先,我們來在Android中實現數據庫的創建與增刪改查,引用數據庫的類時,不再繼承常用的Activity類,而是繼承Android中的SQLiteOpenHelper,創建一個構造方法,四個參數分別是(Context context, String name, SQLiteDatabase.CursorFactory factory,int version),下面我們來分別解釋一下這四個參數,context代表上下文環境,大多情況是上下文環境就是activity,name是數據庫的名字,通常我們寫成"xxx.db",這樣方便知道我們創建的是一個數據庫,cursor代表指針,在默認為null時,它表示初始為-1,然后依次指向數據庫的每一行,我們可以利用cursor來掃描數據庫,有條件的掃描就是查找,version代表版本號,只要設置大於等於1的值即可。在數據庫類中一定要調用兩個方法,即onCreate()與onUpdate()方法,傳進來的參數都是數據庫對象,它們分別在數據庫被創建與數據庫被更新時調用,在數據庫被創建時創建表,直接調用執行數據庫語句方法execSQL(String),代碼如下:

package com.administrator.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.Settings;

/**
 * Created by Administrator on 2016/7/22.
 */
public class MyOpenHelper extends SQLiteOpenHelper {

    //構造方法,new時會調用,cursor:封裝數據庫查詢時返回的數據,初始為-1.依次向下讀取下一行數據,null使用默認游標
    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){
        super(context,name,factory,version);
    }
    //數據庫創建時,此方法會調用
    //創建數據庫的同時創建表
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table student(number char(4) primary key,name char(4),age char(1))";
        db.execSQL(sql);

    }

   //數據庫升級時,此方法會調用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("數據庫被升級了");
    }
}

  下面我們用單元測試方法來實現一下數據庫的增刪改查,寫在ApplicationTest中,首先我們定義一個MyOpenHelper的對象,此時我們在測試,沒有任何前台任務,所以此時沒有正在執行的Activity,Android為我們提供了getContext()方法,用來在沒有上下文環境中為我們創建一個虛擬的上下文環境。接下來我們調用getReadableDatabase()來創建或打開一個數據庫(如果沒有,我們就創建一個數據庫,如果有,我們就打開這個數據庫),對數據的增刪改操作,就是創建好一個數據庫后執行相應的SQL語句,最后關閉數據庫。代碼如下:

package com.administrator.sqlite;

import android.app.Application;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.ApplicationTestCase;

/**
 * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
 */
public class ApplicationTest extends ApplicationTestCase<Application> {
    public ApplicationTest() {
        super(Application.class);
    }

    public void testInsert(){
        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);
        SQLiteDatabase db=moh.getReadableDatabase();
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1234","Lily","19"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1235","Bob","20"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1236","Amy","18"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1237","Tom","21"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1238","Alice","18"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1239","Grace","20"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1240","Henry","23"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1241","David","40"});
        db.execSQL("insert into student values(?,?,?)",new Object[]{"1242","Soada","17"});
        db.close();
    }

    public void testDelete(){
        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);
        SQLiteDatabase db=moh.getReadableDatabase();
        db.execSQL("delete from student where number=?",new Object[]{1241});
        db.close();
    }

    public void testUpdate(){
        MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);
        SQLiteDatabase db=moh.getReadableDatabase();
        db.execSQL("update student set number=? where name=?",new Object[]{"1314","Soada"});
        db.close();
    }
}

  對於對數據庫的查找操作,我們需要利用游標實現按行掃描一遍數據庫,並取出符合要求的數據,我們調用rawQuery方法,第一個參數為select語句;第二個參數為select語句中占位符參數的值,如果select語句沒有使用占位符(也就是where語句),該參數可以設置為null,返回一個游標Cursor。掃描方法是:如果游標指向的下一行不為空,就獲取每行每個屬性的值,從而實現多行掃描並得到整個數據庫的數據。我們還要強調一下getString()方法傳遞的參數是一個整型的索引值,它代表該屬性的索引值,第一個為0,以此類推;但我們在不明確數據庫結構的情況下,很難知道確切的值,因此我們通常調用getColumnIndex方法。代碼如下:

 1 public void testSelect(){
 2         MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2);
 3         SQLiteDatabase db=moh.getReadableDatabase();
 4         Cursor cursor=db.rawQuery("select * from student",null);
 5         while(cursor.moveToNext()){
 6             //獲取下一行數據
 7             String number = cursor.getString(cursor.getColumnIndex("number"));
 8             String name = cursor.getString(cursor.getColumnIndex("name"));
 9             String age = cursor.getString(cursor.getColumnIndex("age"));
10             System.out.println(number+";"+name+";"+age);
11             db.close();
12         }

下面我們來逐一測試一下:

    增加若干條數據進入數據庫student:

刪除一條記錄:刪除number為1241的記錄

修改一條記錄:Soada的number改為1314

  我們掌握了在Android中使用SQLite對數據的增刪改查,下節我們要實現的是將數據庫的每條記錄依次顯示到屏幕上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM