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 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 persons = new ArrayList();
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();
}
}