Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android數據庫學習123

Android數據庫學習123

編輯:關於Android編程

我個人感覺安卓自帶的數據庫用的不是太多的,畢竟現在很多應用都直接和服務器數據庫進行交互,或者直接API獲取一些接口的數據,但是不可否認自帶的數據庫還是有一些作用的,所以我們還是需要對自帶的數據庫進行一定的學習和研究。(前面都是廢話)進入正題:

一、創建數據庫

 

Android為了讓我們更好的管理數據庫,專門提供了一個SQLiteOpenHelper幫助類,借助這個類就可以簡單地對數據庫進行創建和升級。SQLiteOpenHelper是一個抽象類,啥是抽象類?抽象類就像領導,一般自己不干活(實例化),只發號司令,所以要想用這個類就必須自己創建一個類去繼承它。此外這個類裡面還有兩個抽象方法,onCreate()和onUpgrade(),我們必須在自己的幫助類裡重寫這兩個方法,然後用這兩個方法去創建和升級數據庫。

這個類裡還有兩個重要的實例方法,getReadableDatabase()和getWritableDatabase()。這兩個方法都可以創建或打開一個現有的數據庫(如果數據庫存在則打開,如果不存在則創建一個新的數據庫)話說這兩個方法有啥不同呢?當數據庫不可寫入的時候(比如磁盤已滿)第一個方法以只讀的方式打開,第二個方法就會出現異常。

廢話理論不多說了,下面看一下建表語句:

create table Book(
id integer primary key autoincrement,
author text,
price real,
pages integer, 
name text)


假如上面的看不懂,那你要稍微對SQL語句了解一下,這個不難。

下面編寫代碼:

package org.lxh.demo;

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

public class MyDatabaseHelper extends SQLiteOpenHelper {
	public static final String CREATE_BOOK = "create table Book("
			+ "id integer primary key autoincrement," + "author text, "
			+ "price real," + "pages integer," + "name text)";// SQL語句自己寫吧
	private Context mcontext;// 上下文對象,這玩意很多地方用得到

	public MyDatabaseHelper(Context context, String name,// 構造方法也自動生成了
			CursorFactory factory, int version) {
		super(context, name, factory, version);
		mcontext = context;

	}

	@Override
	public void onCreate(SQLiteDatabase db) {// 自動覆寫了
		db.execSQL(CREATE_BOOK);// 創建數據庫
		Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自動覆寫了
		// TODO Auto-generated method stub

	}

}


然後我們在布局文件中搞一個按鈕:




    


最後創建一個按鈕監聽在MainActivity裡

package org.lxh.demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button create;
	private MyDatabaseHelper myDatabaseHelper;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 設置要使用的布局管理器
		create = (Button) findViewById(R.id.btn);
		myDatabaseHelper = new MyDatabaseHelper(this, "BookStore", null, 1);//構造方法裡有四個參數哎,填好
		create.setOnClickListener(new OnClickListener() {// 匿名內部類

			public void onClick(View v) {

				myDatabaseHelper.getWritableDatabase();// 調用實例方法getWritableDatabase()創建數據庫
			}
		});

	}
}


點擊創建按鈕就成功創建了,沒來的及截圖到Toast(因為它只出現一次,也就是數據庫只創建一次,自行測試吧):

\

二、更新數據庫:

創建MyDatabaseHelper 中還有一個覆寫的方法沒用呢,就是onUpgrade()是用於對數據庫進行更新的。比如數據庫已有一張Book表了,我們現在還想創建一個Catagory表:

package org.lxh.demo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

public class MyDatabaseHelper extends SQLiteOpenHelper {
	
	public static final String CREATE_BOOK = "create table Book("
			+ "id integer primary key autoincrement," + "author text, "
			+ "price real," + "pages integer," + "name text)";// SQL語句自己寫吧
	
	public static final String CREATE_CATEGORY = "create table Category ("//再創建一張表
			+ "id integer primary key autoincrement, "
			+ "category_name text, "
			+ "category_code integer)";
	private Context mcontext;// 上下文對象,這玩意很多地方用得到

	public MyDatabaseHelper(Context context, String name,// 構造方法也自動生成了
			CursorFactory factory, int version) {
		super(context, name, factory, version);
		mcontext = context;

	}

	@Override
	public void onCreate(SQLiteDatabase db) {// 自動覆寫了
		db.execSQL(CREATE_BOOK);
		db.execSQL(CREATE_CATEGORY);
		Toast.makeText(mcontext, "Create succeeded", Toast.LENGTH_SHORT).show();
		

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 自動覆寫了
		db.execSQL("drop table if exists Book");//先刪除
		db.execSQL("drop table if exists Category");
		onCreate(db);//最後再創建

	}

}


MainActivity.java:

package org.lxh.demo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button create;
	private MyDatabaseHelper myDatabaseHelper;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 設置要使用的布局管理器
		create = (Button) findViewById(R.id.btn);
		myDatabaseHelper=new MyDatabaseHelper(this, "BookStore", null, 2);// 這裡版本號改成2
		create.setOnClickListener(new OnClickListener() {// 匿名內部類

			public void onClick(View v) {

				myDatabaseHelper.getWritableDatabase();// 調用實例方法getWritableDatabase()創建數據庫
				Log.d("Success", "chenggong");
			}
		});

	}
}


運行如下:

\

下面我們怎麼知道自己創建的數據庫有木有成功呢?在哪兒能看到他們呢?我們要通過adb了,這是Android SDK自帶的一個調試工具,怎麼用嫩?首先你要將你的platform_tools目錄配置到環境變量中去:

\

然後在DOS界面下輸入:adb shell,進入到設備的控制台:

\

然後鍵入:cd /data/data/org.lxh.demo/databases/下:

\

鍵入sqlite3 BookStore.db:

\

然後鍵入:.table:

\

 

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