Android SQLite資料庫操作樣本

來源:互聯網
上載者:User

SQLite介紹SQLite是一個非常流行的嵌入式資料庫,它支援SQL語言,並且只利用很少的記憶體就有很好的效能。此外,它還是開源的,任何人都可以使用它。
SQLite由以下幾個組件組成:SQL編譯器、核心、後端以及附件。SQLite通過利用虛擬機器和虛擬資料庫引擎(VDBE),使調試、修改和擴充SQLite的核心變得更加方便。
SQLite支援的資料類型參考連結:http://blog.csdn.net/wzy_1988/article/details/36005947
Android在運行時(run-time)整合了SQLite,所以每個Android應用程式都可以使用SQLite資料庫。對於熟悉SQL的開發人員來說,在Android開發中使用SQLite相當簡單。但是,由於JDBC會消耗太多的系統資源,所以JDBC對於手機這種記憶體受限裝置來說並不合適。因此,Android提供了一些新的API來使用SQLite資料庫。
資料庫儲存在/data/data/項目包名/databases/ 目錄下。
Android開發中使用SQLite資料庫Activity可以使用Content Provider或者 Service訪問一個資料庫。
建立資料庫Android不自動提供資料庫。在Android應用程式中使用SQLite,必須自己建立資料庫,然後建立表、索引、填充資料。Android提供了一個SQLiteOpenHelper協助你建立一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕鬆的建立資料庫。SQLiteOpenHelper 類根據開發應用程式的需要,封裝了建立和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:建構函式,調用父類SQLiteOpenHelper的建構函式。這個方法需要四個參數:上下文環境,資料庫名字,一個可選的遊標工廠(通常是NULL),一個代表你正在使用的資料庫模型版本的整數。onCreate()方法,它需要一個SQLiteDatabase對象作為參數,根據需要對這個對象填充表和初始化資料。onUpgrade()方法,它需要三個參數,一個SQLiteDatabase對象,一箇舊的版本號碼和一個新的版本號碼,這樣你就可以清楚如何把一個資料庫從舊的模型轉變為新的模型。
下面代碼展示了如何繼承SQLiteOpenHelper建立資料庫:

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyDBHelper extends SQLiteOpenHelper {private static final String COLUMN_ID = "_id";public static final String TABLE_NAME = "category";private static final String DATABASE_NAME = "category.db";private static final int DATABASE_VERSION = 1;private static final String DATABASE_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + COLUMN_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + " fid TEXT, token TEXT, cid TEXT, cname TEXT)";public CategoryDBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(DATABASE_CREATE);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);onCreate(db);}}

增刪改查資料庫因為SQLite支援標準的SQL語句,因此我們可以用標準SQL語句才增刪改查資料庫,推薦使用預留位置的sql語句,看起來更加清爽,下面是My Code樣本:
public class CategoryDBManager {private MyDBHelper myDBHelper;private static CategoryDBManager categoryDBManager = null;private CategoryDBManager(Context context) {myDBHelper = new MyDBHelper(context);}/** * 單例模式 */public static CategoryDBManager getInstance(Context context) {if (categoryDBManager == null) {synchronized (CategoryDBManager.class) {if (categoryDBManager == null) {categoryDBManager = new CategoryDBManager(context);}}}return categoryDBManager;}public SQLiteDatabase getDB() {SQLiteDatabase db = myDBHelper.getWritableDatabase();while (db.isDbLockedByCurrentThread()) {}return db;}public void insertLists(String token, String fid, List lists) {// 開啟可寫資料庫SQLiteDatabase db = getDB();for (PlateCategoryData pd : lists) {// 執行SQL語句,替換預留位置db.execSQL("insert into " + MyDBHelper.TABLE_NAME + "(cid, cname, fid, token) values(?, ?, ?, ?)",new Object[] { pd.getId(), pd.getName(), fid, token });}// 釋放資源db.close();}public ArrayList getLists(String fid, String token) {ArrayList datas = new ArrayList();SQLiteDatabase db = getDB();// 執行原始查詢,得到cursorString querySql = "select cid, cname from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?";Cursor cursor = db.rawQuery(querySql, new String[] { fid, token });// 移動cursor到第一個資料(無資料返回false)if (cursor.moveToFirst()) {// while判斷是否有下一條資料do {PlateCategoryData pd = new PlateCategoryData(cursor.getString(cursor.getColumnIndex("cid")),cursor.getString(cursor.getColumnIndex("cname")));datas.add(pd);} while (cursor.moveToNext());}cursor.close();db.close();return datas;}public void updateLists(String fid, String token, ArrayList datas) {SQLiteDatabase db = getDB();for (PlateCategoryData pd : datas) {String sql = "update " + MyDBHelper.TABLE_NAME+ " set cid = ?, cname = ? where fid = ? and token = ?";db.execSQL(sql, new Object[] { pd.getId(), pd.getName(), fid, token });}db.close();}public void deleteLists(String fid, String token) {SQLiteDatabase db = getDB();db.execSQL("delete from " + MyDBHelper.TABLE_NAME + " where fid = ? and token = ?", new Object[] { fid,token });db.close();}public void closeDB() {SQLiteDatabase db = getDB();if (db.isOpen()) {myDBHelper.close();db.close();}}}

參考連結[1] http://www.ibm.com/developerworks/cn/opensource/os-cn-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.