SQLite 資料庫的基本使用

2021-07-24 03:36:20 字數 4149 閱讀 7819

一、概述

sqlite是android系統的核心資料儲存服務之一,它是乙個輕型的嵌入式資料庫,占用非常少的資源卻能提供很好很快的資料訪問服務,許多大型的需要資料儲存的android專案都有用到sqlite(也可以用於桌面應用程式)。

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

二、基本操作api簡介

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

1、建立資料庫和表

sqliteopenhelper是乙個抽象類,在這個類裡有兩個抽象方法,oncreate和onupgrade,前者用於第一次建立資料庫,後者用於資料庫公升級,建立類dbservices如下:

public class dbservices extends sqliteopenhelper

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

}

示例裡定義兩個變數,乙個是資料庫的版本號,乙個是資料庫名。當android應用執行時,sqliteopenhelper會先檢查是否已經存在資料庫,如果不存在,就建立資料庫,然後開啟資料庫,最後呼叫oncreate方法,所以我們需要再oncreate中建立表(檢視等);如果資料庫已存在,而版本號比上次建立的資料庫版本號高,就呼叫onupgrade,用於公升級。

2、資料的增——insert

在建立了資料庫和表之後,我們就可以給資料庫和表新增資料了。

新增資料的操作和其他資料庫一樣,也是使用insert,只是sqlite的insert是函式,而且使用起來非常方便,下面是方法(屬於上面的dbservices類,附錄裡有完整**):

public void insert(string table, string nullcolumnhack, contentvalues values)

引數說明:

table:表名,直接使用字串指定;

nullcolumnhack:指定null值的列,sqlite裡不允許空行,使用這個引數可以指定乙個列的值為null,當存入行為空時,這個列的值就被指定為null;

values:使用類似map鍵值對對映的資料結構contentvalues來指定插入的資料

string args = ;

string column = ;

//資料庫中新增資料

contentvalues c = new contentvalues();

for(int i=0;i3、資料的刪——delete

刪除和新增一樣,也是通過傳入引數呼叫方法來實現,方法:

public void delete(string table , string whereclause , string whereargs)

引數說明:

table:表名;

whereclause:可選,指定刪除條件,相當於sql語句where語句之後的類容,可通過?來指定引數;

whereargs:當whereclause指定了?引數,這個字串陣列裡就是?所代表的引數,個數應與?數一致;

刪除資料示例:

string args =;

dbservices.delete(「_today_plan」, 「[_date]=? and [item]=? and [check]=?」

,args);

4、資料的修改——update

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

public void update(string table, contentvalues values,

string whereclause, string whereargs)

引數說明:

table:表名;

values:同上,是需要修改的列和值的對映集合;

whereclause:修改的行所需符合的條件;

whereargs:指定條件裡的引數;

修改資料示例:

string args =;

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)
方法說明:

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

三、附錄

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

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

public cursor read(string sql ,string args)

public void insert(string table, string nullcolumnhack, contentvalues values)

public void delete(string table , string whereclause , string whereargs)

public void update(string table, contentvalues values,

string whereclause, string whereargs)

}

有關sqlite的高階特性,如索引、檢視以及觸發器等,大家可以去看看sqlite的官方文件。

上述類在手機重啟時,資料庫會重新建立,原因是資料庫沒有關閉(但因為要提供游標,所以控制起來會比較困難),所以這裡提出乙個解決辦法,就是資料庫的操作(建表、增、刪、改)均使用事務方式,示例如下:

db.begintransaction();          //事務開始

//建表、增、刪、改、查

db.settransactionsuccessful(); //事務成功

db.endtransaction(); //提交事務

Sqlite資料庫的使用

以上表的操作為 cn.execute str sqlstring 表的查詢 str sqlstring select from testtable where testcol02 hello limit 1440 offset 2880 where 後面是條件 limit 後面是限制顯示1440條 ...

資料庫sqlite基本操作

一般使用sqliteopenhelper 子類運算元據庫 繼承sqliteopenhelper 類實現兩個方法,至少乙個構造方法 oncreate sqlitedatabase db 在這個方法實現具體的資料庫建立 onupgrade sqlitedatabase db,int oldversion...

QML使用Sqlite資料庫

在程式中,我們經常需要把一些資料持久化,比如一些設定資訊和程式配置。qml並不能直接訪問本地檔案,但是可以通過 offline storage api訪問本地sqlite資料庫,從而達到目的。首先在qml目錄下建立乙個storage.js 首先建立乙個helper方法連線資料庫 function g...