Android數據庫SQLite基礎

一、SQLiteOpenHelper java

package com.pas.sqllitehelper;

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

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper
{

	/**
	 * 數據庫構造方法 用來定義數據庫的名稱 數據庫查詢的結果集 數據庫的版本
	 * @param context
	 * @param name
	 * @param factory
	 * @param version
	 */
	public PersonSQLiteOpenHelper(Context context)
	{
		super(context, "person.db", null, 2);
	}

	/**
	 * 數據庫首次建立的執行的方法
	 * @param db 被建立的數據庫
	 */
	@Override
	public void onCreate(SQLiteDatabase db)
	{
		db.execSQL("create table persons (id integer primary key autoincrement," +
				"name varchar(20),number varchar(20))");
	}

	/**
	 * 當數據庫版本號發生變化時候調用
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{
		Log.i("數據庫更新", "數據庫更新……");
		db.execSQL("alter table persons add account varchar(20)");

	}

}

二、Dao類 android

package com.pas.db.dao;

import java.util.ArrayList;
import java.util.List;

import com.pas.domain.Person;
import com.pas.sqllitehelper.PersonSQLiteOpenHelper;

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

public class PersonDao
{
	private PersonSQLiteOpenHelper helper;

	public PersonDao(Context context)
	{
		helper = new PersonSQLiteOpenHelper(context);
	}

	/**
	 *  傳統方式-添加(不推薦)
	 * 
	 * @param name
	 * @param number
	 */
	public void add(String name, String number)
	{
		SQLiteDatabase db = helper.getWritableDatabase();

		String sql = "insert into persons (name,number) values (?,?)";
		Object[] para = new Object[]
		{ name, number };
		db.execSQL(sql, para);
		db.close();
	}

	/**
	 * 系統API添加
	 * 
	 * @param name
	 * @param number
	 */
	public boolean add_api(String name, String number, long account)
	{
		SQLiteDatabase db = helper.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put("name", name);
		values.put("number", number);
		values.put("account", account);
		/*
		 * 參數爲 表名 null填充列名 插入值的map集合
		 *      關於第二個參數:
		 *  當values參數爲空或者裏面沒有內容的時候,
		 *  咱們insert是會失敗的(底層數據庫不容許插入一個空行),
		 *  爲了防止這種狀況,咱們要在這裏指定一個 列名,
		 *  到時候若是發現將要插入的行爲空行時,
		 *  就會將你指定的這個列名的值設爲null,而後再向數據庫中插入
		 */
		long flag = db.insert("persons", null, values);
		db.close();
		if (flag == -1)
			return false;
		return true;
	}

	/**
	 * 查詢
	 * 
	 * @param name
	 */
	public List<Person> find(String name)
	{
		SQLiteDatabase db = helper.getReadableDatabase();

		// String sql = "select * from persons where name=?";
		// String[] para = new String[]
		// { name };
		// Cursor res = db.rawQuery(sql, para);

		
		Cursor res = db.query("persons", null, "name=?", new String[]
		{ name }, null, null, null);
		List<Person> persons = new ArrayList<Person>();
		while (res.moveToNext())
		{
			Person person = new Person();
			person.setId(res.getString(0));
			person.setName(res.getString(1));
			person.setNumber(res.getString(2));
			person.setAccount(res.getString(3));
			persons.add(person);
		}
		res.close();
		db.close();

		return persons;
	}

	/**
	 * 更新
	 * 
	 * @param name
	 * @param number
	 * @return
	 */
	public int update(String name, String number, String account)
	{
		SQLiteDatabase db = helper.getReadableDatabase();
		ContentValues values = new ContentValues();
		values.put("number", number);
		values.put("account", account);
		int rows = db.update("persons", values, "name=?", new String[]
		{ name });
		db.close();
		return rows;
	}

	/**
	 * 刪除
	 * 
	 * @param name
	 * @return
	 */
	public int del(String name)
	{
		SQLiteDatabase db = helper.getReadableDatabase();
		int rows = db.delete("persons", "name=?", new String[]
		{ name });
		db.close();
		return rows;
	}

	/*
	 * 轉帳 測試事務
	 */
	public void transfer(String sourceName, String targetName, double value)
	{
		SQLiteDatabase db = helper.getWritableDatabase();
		
		//開啓事務
		db.beginTransaction();
		try
		{
			db.execSQL("update persons set account=account-? where name=?", new Object[]
			{ value, sourceName });
			db.execSQL("update persons set account=account+? where name=?", new Object[]
			{ value, targetName});
			
			//標記數據庫事務執行成功
			db.setTransactionSuccessful();
		} finally
		{
			db.endTransaction();
		}
		db.close();
	}
}
相關文章
相關標籤/搜索