Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android SQLiteOpenHelper使用示例

android SQLiteOpenHelper使用示例

編輯:Android開發實例

   我們大家都知道Android平台提供給我們一個數據庫輔助類來創建或打開數據庫,這個輔助類繼承自SQLiteOpenHelper類,在該類的構造器中,調用Context中的方法創建並打開一個指定名稱的數據庫對象。繼承和擴展SQLiteOpenHelper類主要做的工作就是重寫以下兩個方法。

    onCreate(SQLiteDatabase db) : 當數據庫被首次創建時執行該方法,一般將創建表等初始化操作在該方法中執行。
    onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):當打開數據庫時傳入的版本號與當前的版本號不同時會調用該方法。
  
    除了上述兩個必須要實現的方法外,還可以選擇性地實現onOpen 方法,該方法會在每次打開數據庫時被調用。

  SQLiteOpenHelper 類的基本用法是:當需要創建或打開一個數據庫並獲得數據庫對象時,首先根據指定的文件名創建一個輔助對象,然後調用該對象的getWritableDatabase 或 getReadableDatabase方法 獲得SQLiteDatabase 對象。

   調用getReadableDatabase 方法返回的並不總是只讀數據庫對象,一般來說該方法和getWriteableDatabase 方法的返回情況相同,只有在數據庫僅開放只讀權限或磁盤已滿時才會返回一個只讀的數據庫對象。
 
   下面通過一個簡單的小例子說明SQLiteOpenDatabase的用法,其中包括創建數據庫、插入數據、更新 、查詢等等,我們將查詢後獲取到的數據顯示到TextView上,看一下運行後的效果。



MySQLiteHelper
 

package xiaohang.zhimeng;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class MySQLiteHelper extends SQLiteOpenHelper{
	//調用父類構造器
	public MySQLiteHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
	}

	/**
	 * 當數據庫首次創建時執行該方法,一般將創建表等初始化操作放在該方法中執行.
	 * 重寫onCreate方法,調用execSQL方法創建表
	 * */
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table if not exists hero_info("
				  + "id integer primary key,"
				  + "name varchar,"
				  + "level integer)");
		
	}
	
	//當打開數據庫時傳入的版本號與當前的版本號不同時會調用該方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {		
	}

}



Activity01
 

package xiaohang.zhimeng;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class Activity01 extends Activity {
	MySQLiteHelper myHelper;
	TextView tv;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.tv);
        //創建MySQLiteOpenHelper輔助類對象
        myHelper = new MySQLiteHelper(this, "my.db", null, 1);
        //向數據庫中插入和更新數據
        insertAndUpdateData(myHelper);
        //查詢數據
        String result = queryData(myHelper);
        tv.setTextColor(Color.RED);
        tv.setTextSize(20.0f);
        tv.setText("名字\t等級\n"+result);
        
    }
	
	//向數據庫中插入和更新數據
	public void insertAndUpdateData(MySQLiteHelper myHelper){
		//獲取數據庫對象
		SQLiteDatabase db = myHelper.getWritableDatabase();
		//使用execSQL方法向表中插入數據
		db.execSQL("insert into hero_info(name,level) values('bb',0)");
		//使用insert方法向表中插入數據
		ContentValues values = new ContentValues();
		values.put("name", "xh");
		values.put("level", 5);
		//調用方法插入數據
		db.insert("hero_info", "id", values);
		//使用update方法更新表中的數據
		//清空ContentValues對象
		values.clear();
		values.put("name", "xh");
		values.put("level", 10);
		//更新xh的level 為10
		db.update("hero_info", values, "level = 5", null);
		//關閉SQLiteDatabase對象
		db.close();
	}
	
	//從數據庫中查詢數據
	public String queryData(MySQLiteHelper myHelper){
		String result = "";
		//獲得數據庫對象
		SQLiteDatabase db = myHelper.getReadableDatabase();
		//查詢表中的數據
		Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc");
		//獲取name列的索引
		int nameIndex = cursor.getColumnIndex("name");
		//獲取level列的索引
		int levelIndex = cursor.getColumnIndex("level");
		for (cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()) {
			result = result + cursor.getString(nameIndex)+ "\t\t";
			result = result + cursor.getInt(levelIndex)+"       \n";
		}
		cursor.close();//關閉結果集
		db.close();//關閉數據庫對象
		return result;
	}
	
	@Override
	protected void onDestroy() {
		SQLiteDatabase db = myHelper.getWritableDatabase();//獲取數據庫對象
		//刪除hero_info表中所有的數據 傳入1 表示刪除所有行------>點擊back按鈕
		db.delete("hero_info", "1", null);
		super.onDestroy();
	}
}



   源碼附件
xh_Sample_4_3.rar

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved