【Android基礎篇】SQLite資料庫的增刪改查基本操作

來源:互聯網
上載者:User

標籤:android   sqlite   增刪改查   資料庫   基礎   

一、概述

SQLite是Android系統的核心資料存放區服務之一,它是一個輕型的嵌入式資料庫,佔用非常少的資源卻能提供很好很快的資料存取服務,許多大型的需要資料存放區的Android項目都有用到SQLite(也可以用於傳統型應用程式)。

下面介紹一下SQLite的建立資料庫、表的操作,以及基本的增刪改查操作。

二、基本操作API簡介

在Android中,SQLiteDatabase類提供了SQLite的底層API,但在使用SQLite資料庫時,我們往往不會直接操作SQLiteDatabase這個類,而是自己建立一個繼承自SQLitOpenHelper的子類來實現資料庫操作。這樣做的目的一是為了以後如果資料庫升級不至於要改動太多代碼,已實現封裝;二則是為了我們使用更方便。

1、建立資料庫和表

SQLiteOpenHelper是一個抽象類別,在這個類裡有兩個抽象方法,OnCreate和OnUpgrade,前者用於第一次建立資料庫,後者用於資料庫升級,建立類DBServices如下:

public class DBServices extends SQLiteOpenHelper{    final static int version = 1;    final static String dbName = "plan";    public DBServices(Context context){        super(context,dbName,null,version);    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        //建立今日計劃表        String create_today_plan_sql = "CREATE TABLE [_today_plan] ("                + "[_Date] varchar(10) not null,"                 + "[Item] varchar(200),"                + "[Check] varchar(5) )";        db.execSQL(create_today_plan_sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub    }}

樣本裡定義兩個變數,一個是資料庫的版本號碼,一個是資料庫名。當Android應用運行時,SQLiteOpenHelper會先檢查是否已經存在資料庫,如果不存在,就建立資料庫,然後開啟資料庫,最後調用OnCreate方法,所以我們需要再OnCreate中建立表(視圖等);如果資料庫已存在,而版本號碼比上次建立的資料庫版本號碼高,就調用OnUpgrade,用於升級。

2、資料的增——insert

在建立了資料庫和表之後,我們就可以給資料庫和表添加資料了。
添加資料的操作和其他資料庫一樣,也是使用insert,只是SQLite的insert是函數,而且使用起來非常方便,下面是方法(屬於上面的DBServices類,附錄裡有完整代碼):

public void insert(String table, String nullColumnHack, ContentValues values){        SQLiteDatabase db = this.getWritableDatabase();        db.insert(table, nullColumnHack, values);    }

參數說明:
table:表名,直接使用字串指定;
nullColumnHack:指定null值的列,SQLite裡不允許空行,使用這個參數可以指定一個列的值為null,當存入行為空白時,這個列的值就被指定為null;
values:使用類似map索引值對映射的資料結構ContentValues來指定插入的資料

添加資料樣本:

            String[] args = {                    today,                    content,                    Boolean.toString(checked)            };            String[] column = {                    "[_Date]",                    "[Item]",                    "[Check]"            };            //資料庫中添加資料            ContentValues c = new ContentValues();            for(int i=0;i<args.length;i++){                c.put(column[i], args[i]);            }            dbServices.insert("_today_plan", null, c);
3、資料的刪——delete

刪除和添加一樣,也是通過傳入參數調用方法來實現,方法:

public void delete(String table , String whereClause , String[] whereArgs){        SQLiteDatabase db = this.getWritableDatabase();        db.delete(table, whereClause, whereArgs);        Log.d("Delete",whereClause);    }

參數說明:
table:表名;
whereClause:可選,指定刪除條件,相當於SQL語句WHERE語句之後的類容,可通過?來指定參數;
whereArgs:當whereClause指定了?參數,這個字串數組裡就是?所代表的參數,個數應與?數一致;

刪除資料樣本:

String args[] ={    today,        content,        Boolean.toString(checked)};dbServices.delete("_today_plan", "[_Date]=? and [Item]=? and [Check]=?",args);
4、資料的修改——update

修改與添加、刪除相差不多,下面是update方法:

public void update(String table, ContentValues values,        String whereClause, String[] whereArgs){        SQLiteDatabase db = this.getWritableDatabase();        db.update(table, values, whereClause, whereArgs);    }

參數說明:
table:表名;
values:同上,是需要修改的列和值的映射集合;
whereClause:修改的行所需符合的條件;
whereArgs:指定條件裡的參數;

修改資料樣本:

String args[] ={    today,        content,        Boolean.toString(!m)};ContentValues c = new ContentValues();c.put("[Check]", Boolean.toString(m));dbServices.update("_today_plan", c,"[_Date]=? and [StartTime]=? and [Item]=? and [Check]=?",args);
5、資料的查詢——read

在這裡就和前面有所不同了,讀取資料所用的方法是直接執行查詢語句,擷取遊標,然後通過遊標來遍曆資料庫,方法如下:

public Cursor read(String sql ,String[] args){        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db.rawQuery(sql, args);        Log.d("Database",cursor.getColumnName(0));        return cursor;    }

方法說明:
請注意:在這裡db擷取的是唯讀資料庫(getReadableDatabase),而在上述三種操作裡都是使用的可寫資料庫(getWritableDatabase);至於遊標的用法此處就不再贅述,只需看一下API的名字就能掌握基本用法,但最後一定要記得將遊標關閉(close)!

三、附錄

附錄了DBServices類,僅作參考

package com.plan;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class DBServices extends SQLiteOpenHelper{    final static int version = 1;    final static String dbName = "plan";    public DBServices(Context context){        super(context,dbName,null,version);    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        //建立今日計劃表        String create_today_plan_sql = "CREATE TABLE [_today_plan] ("                + "[_Date] varchar(10) not null,"                 + "[Item] varchar(200),"                + "[Check] varchar(5) )";        db.execSQL(create_today_plan_sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub    }    public Cursor read(String sql ,String[] args){        SQLiteDatabase db = this.getReadableDatabase();        Cursor cursor = db.rawQuery(sql, args);        Log.d("Database",cursor.getColumnName(0));        return cursor;    }    public void insert(String table, String nullColumnHack, ContentValues values){        SQLiteDatabase db = this.getWritableDatabase();        db.insert(table, nullColumnHack, values);    }    public void delete(String table , String whereClause , String[] whereArgs){        SQLiteDatabase db = this.getWritableDatabase();        db.delete(table, whereClause, whereArgs);        Log.d("Delete",whereClause);    }    public void update(String table, ContentValues values,        String whereClause, String[] whereArgs){        SQLiteDatabase db = this.getWritableDatabase();        db.update(table, values, whereClause, whereArgs);    }}

有關SQLite的進階特性,如索引、視圖以及觸發器等,大家可以去看看SQlite的官方文檔。另外,如果一次性添加(刪除等)的資料量比較大的話,建議使用交易處理,可以大幅提高效率和可靠性。

【Android基礎篇】SQLite資料庫的增刪改查基本操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.