Android學習筆記(三數據庫SQLITE的基本操作) – Android移動開發技術文章_手機開發 Android移動開發教學課程

SQLITE是android自帶的標準數據庫,它支持SQL語句,是一個輕量級的嵌入式數據庫.
學習SQLITE首先需要瞭解一些知識點:
1. SQLiteDatabase
 一個SQLiteDatabase的實例代表一個SQLite的數據庫,通過SQLiteDatabase實例的一些方法,我們可以執行SQL語句,進行對數據庫的增刪改查操作。 數據庫對於一個應用來說是私有的,並且在一個應用當中,名字也是唯一的。
2. SQLiteOpenHelper
 這是一個抽象類。當在程序中調用這個類的方法getWritableDatebase()或者getReadableDatebase()方 法的時候,如果當時沒有數據,那麼android系統就會自動生成一個數據庫。對於SQLiteOpenHelper我們通常需要繼承它,並實現它裡面的 3個函數
  (1)onCreate
      在數據庫第一次生成的時候會調用這個方法,一般我們在這個方法裡邊生成數據庫表
  (2)onUpgrade
      當數據庫需要升級的時候,Android系統會自動調用這個方法,一般我們在這個方法裡面刪除數據庫表,並建立新的數據庫表。並且還可以根據應用需求進行其它操作。
  (3)onOpen
      這是當打開數據庫時的回調函數,一般也不會用到。
下面來展示一下操作數據庫的具體代碼
public class ActivityMain extends Activity {
 OnClickListener listener1 = null;
 OnClickListener listener2 = null;
 OnClickListener listener3 = null;
 OnClickListener listener4 = null;
 OnClickListener listener5 = null;
 Button button1;
 Button button2;
 Button button3;
 Button button4;
 Button button5;
 DatabaseHelper mOpenHelper;
 private static final String DATABASE_NAME = "dbForTest.db";
 private static final int DATABASE_VERSION = 1;
 private static final String TABLE_NAME = "diary";
 private static final String TITLE = "title";
 private static final String BODY = "body";
 private static class DatabaseHelper extends SQLiteOpenHelper {
  DatabaseHelper(Context context) {
   super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }
  @Override
  public void onCreate(SQLiteDatabase db) {
   String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
     + " text not null, " + BODY + " text not null " + ");";
   System.out.print(sql);
   Log.i("haiyang:createDB=", sql);
   db.execSQL(sql);
  }
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  }
 }
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  prepareListener();
  initLayout();
  mOpenHelper = new DatabaseHelper(this);
 }
 private void initLayout() {
  button1 = (Button) findViewById(R.id.button1);
  button1.setOnClickListener(listener1);
  button2 = (Button) findViewById(R.id.button2);
  button2.setOnClickListener(listener2);
  button3 = (Button) findViewById(R.id.button3);
  button3.setOnClickListener(listener3);
  button4 = (Button) findViewById(R.id.button4);
  button4.setOnClickListener(listener4);
  button5 = (Button) findViewById(R.id.button5);
  button5.setOnClickListener(listener5);
 }
 private void prepareListener() {
  listener1 = new OnClickListener() {
   public void onClick(View v) {
    CreateTable();
   }
  };
  listener2 = new OnClickListener() {
   public void onClick(View v) {
    dropTable();
   }
  };
  listener3 = new OnClickListener() {
   public void onClick(View v) {
    insertItem();
   }
  };
  listener4 = new OnClickListener() {
   public void onClick(View v) {
    deleteItem();
   }
  };
  listener5 = new OnClickListener() {
   public void onClick(View v) {
    showItems();
   }
  };
 }
 
 private void CreateTable() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
    + " text not null, " + BODY + " text not null " + ");";
  Log.i("haiyang:createDB=", sql);
  try {
   db.execSQL("DROP TABLE IF EXISTS diary");
   db.execSQL(sql);
   setTitle("數據表成功重建");
  } catch (SQLException e) {
   setTitle("數據表重建錯誤");
  }
 }
 
 private void dropTable() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql = "drop table " + TABLE_NAME;
  try {
   db.execSQL(sql);
   setTitle("數據表成功刪除:" + sql);
  } catch (SQLException e) {
   setTitle("數據表刪除錯誤");
  }
 }
 
 private void insertItem() {
  SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('haiyang', 'android的發展真是迅速啊');";
  String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('icesky', 'android的發展真是迅速啊');";
  try {
   Log.i("haiyang:sql1=", sql1);
   Log.i("haiyang:sql2=", sql2);
   db.execSQL(sql1);
   db.execSQL(sql2);
   setTitle("插入兩條數據成功");
  } catch (SQLException e) {
   setTitle("插入兩條數據失敗");
  }
 }
 
 private void deleteItem() {
  try {
   SQLiteDatabase db = mOpenHelper.getWritableDatabase();
   db.delete(TABLE_NAME, " title = 'haiyang'", null);
   setTitle("刪除title為haiyang的一條記錄");
  } catch (SQLException e) {
  }
 }
 
 private void showItems() {
  SQLiteDatabase db = mOpenHelper.getReadableDatabase();
  String col[] = { TITLE, BODY };
  Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
  Integer num = cur.getCount();
  setTitle(Integer.toString(num) + " 條記錄");
 }
}
在上述代碼中
 DataBaseHelper類繼承瞭SQLieOpenHelper類,並且重寫瞭onCreate和onUpgrade方法。
 在onCreate方法中我們首先構造瞭一條SQL語句,然後調用瞭db.execSQL(sql)執行SQL語句。生成瞭一個表
 因為目前我們還不需要升級數據庫,所以我們在onUpgrade()函數裡面沒有執行任何操作。
==============================================================================================
下面對應的就是增刪改查方法
主要說下查的方法:
  如前面知識點所說,先創建一個SQLiteDatebase的對象,得到一個可寫的數據庫.
 Sring col[]={TITLE,BODY};
 SQLiteDatabase db = mOpenHelper.getReadableDatabase();
 Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
 這條語句將查詢到的數據放到一個Cursor中。這個Cursor中封裝瞭這個數據表TABLE_NAME當中的所有條列。下面具體說下query()方法:
 第一個參數是數據庫裡邊表的名字。
 第二個參數是我們想要返回數據包含的列的信息。如上面代碼所示 我們把列名存放在名為col的數組裡
 第三個參數為selection,相當於SQL語句的where部分,如果想返回所有的數據,那麼就直接設置為null.
 第四個參數為selectionArgs.在selection部分,有可能用到"?",那麼在selectionArgs定義的字符串會代替selection中的"?".
 第五個參數為groupBy。定義查詢出來的數據是否分組,如果為null,則說明不需要分組。
 第六個參數為having。相當於SQL語句當中的having部分。
 第七個參數為orderBy。這個就是排序。
最後 Integer num=cur.getCount()語句通過getCount()方法,可以得到Cursor當中數據的個數。
對於Cursor的理解:
Cursor本身是指針的意思。在android中是一個非常有用的接口,通過Cursor我們可以對從數據庫查詢出來的結果集進行隨機的讀寫訪問。
 
一個簡單的對數據庫操作的demo介紹完瞭,最後需要說明的是 在Android的設計哲學裡鼓勵開發者使用內部類,這樣不但使用方便,而且執行效率也高。

 

本文出自“haiyang08101”
 

發佈留言