1. 程式人生 > >Android學習之SQLite學習

Android學習之SQLite學習

花了2天時間,系統學習了下Android開發過程中使用的輕量級資料庫SQLite的使用。並掌握其增,刪,該,查的基本資料庫操作。

首先要使用SQLite資料庫,需要通過Android系統提供的SQLiteOpenHelper的幫助類,通過這個類我們可以得到一個SQLite資料庫。因此我們需要建立一個類繼承SQLiteOpenHelper這個類,然後實現它的onCreate()和update()方法。  我在我的welthy.myDB包中所建立的基礎幫助類的類 只實現onCreate()和update()方法。具體的增,刪,改,查操作我另外建立了一個類實現。  所以這裡的資料庫初始化部分也放在了  操作實現的類中。  對於實現幫助類的程式碼如下:

package welthy.mydb;

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

public class DBmanager extends SQLiteOpenHelper{
	
	public DBmanager(Context context,String name)
	{
		super(context,name,null,1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		System.out.println("create a database");
		db.execSQL("CREATE TABLE user(id int,name varchar(20))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}
}

實現了幫助類後 我便可以建立資料庫,並對資料庫進行一系列的操作。

首先進行資料庫的初始化部分:

package welthy.mydb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


public class DBways {
	private SQLiteDatabase db;
	private DBmanager dbHelper;
	private String key;
	//private Person person;
	
	public DBways(Context context,String name)
	{
		dbHelper=new DBmanager(context,name);
		db=dbHelper.getWritableDatabase();
		
		ContentValues values=new ContentValues();
		values.put("name", "xiao_ming");
		values.put("id", "001");
		values.put("name", "xiao_hong");
		values.put("id", "002");
		
		db.insert("user", null, values);
		
		System.out.println("建立表"+name);
	}

在進行初始化之前首先要得到SQLiteDatabase的物件和實現SQLiteOpenHelper幫助類的物件(即:DBmanager)。然後再資料庫操作實現類DBways類的建構函式中建立資料庫。如果僅僅是dbHelper=new DBmanager(context,name);的話是無法得到資料庫的,還有通過dbHelper.getWriteable()【需要對資料庫編輯時】或者dbHelper.getReadable();【只讀取資料庫時】。通過這2個函式才可以得到一個數據庫。然後通過ContentValues類給資料庫的內容進行初始化【也可以不初始化,此時就是一個空資料庫】。然後呼叫insert("表名",null,values)將初始化的值新增進資料庫。

初始化後,首先說明下新增資料操作。

這裡我定義的函式為:insert(String Pname,int Pid);具體實現內容和初始化新增資料時一樣都是呼叫db【即 SQLiteDatabase的物件】的insert(。。。)函式。具體程式碼如下:

public void insert(String Pname,int Pid)
	{
		ContentValues value=new ContentValues();
		value.put("name",Pname);
		value.put("id",Pid);
		db.insert("user", null, value);
		System.out.println(value);
	}

主函式中直接呼叫就可以。

然後說明刪除資料操作。

這裡我定義的函式有2個一個是根據關鍵字刪除,一個是刪除資料庫所有資料。呼叫的是db.delete("表名","刪除條件","刪除條件中的引數【即刪除條件中?號的值】");

其中根據關鍵字刪除的是deleteKey(String name);實現程式碼如下:

public void deleteKey(String name)
	{
		db.delete("user", "name=?", new String[]{name});
		System.out.printf("delete:%s\n",name );
	}

刪除所有資料就是刪除條件為null的情況。實現程式碼如下:

public void deleteAll()
	{
		db.delete("user",null,null);
	}

接著,說明下查詢操作。

這裡利用Cursor類來蒐集查詢結果集。這裡呼叫的是rawQuery函式,這個函式是可以直接通過SQL語句進行查詢操作。然後結果放入Cursor的物件cursor中。

當然,也可以使用query()函式,這個函式不需要熟悉SQL語句的操作,但同樣返回的是cursor型別值。 實現程式碼如下:

public void queryAll()
	{
		Cursor cursor=db.rawQuery("SELECT * FROM user", null);
		if(cursor.getCount()>0)
		{
			cursor.moveToFirst();
			while(cursor.moveToNext())
			{
				String id=cursor.getString(0);
				String name=cursor.getString(1);
				System.out.printf("%s,%s\n",name,id);
			}
		}
	}

這裡得到cursor結果集之後,則可以通過Cursor類的方法對結果進行查詢,首先將cursor遊標放在第一行cursor.moveToFirst(),然後進入一個迴圈,只要下一行還有資料,則通過cursor.getString(欄位下標【0開始】)以字串的形式得到資料。直到下一行沒有資料為止。

最後,說明下修改操作。

這裡我同樣定義了2個函式,因為我的欄位就只有name和 id 2個。所以,可以根據一個欄位修改同一行的另一個欄位值。同樣是通過ContentValues類得到修改後的資料,然後通過db.update("表名",更新的值,更新條件,更新條件引數)。來修改資料。

首先是修改name欄位的函式editName(String name,int id)。具體實現程式碼如下:

public void editName(String name,int id)
	{
		ContentValues values=new ContentValues();
		values.put("name",name);
		db.update("user", values, "id=?", new String[]{String.valueOf(id)});
	}

然後是修改id欄位的函式editId(String name,int id)。 具體實現程式碼如下:

public void editId(String name,int id)
	{
		ContentValues values=new ContentValues();
		values.put("id",id);
		db.update("user", values, "name=?", new String[]{name});
	}

具體的4種操作如上所述。如有疑問,歡迎探討。