Android数据库SQLite基础

1、SQLiteOpenHelper

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)");

	}

}

2、Dao类

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();
	}
}


你可能感兴趣的:(android,sqlite)