SQLite是一种轻量级的关系型数据库,它体积小,零配置,可以直接运行在应用程序的进程中,非常适合嵌入式的操作系统。
首先要创建一个SQLite数据库
通过类来实现SQLiteHelper这个抽象类,
public class PersonSqliteHelper extends SQLiteOpenHelper {
public PersonSqliteHelper(Context context) {
super(context, "person.db", null, 1);
}
里面有四个参数分别是context,数据库名称,工厂,和版本
传的参数本来有四个,只需要保留一个就好了。
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
}
onCreate是数据库第一次被创建时调用的方法
这些还没有真正的创建数据库
PersonSqliteHelper p=new PersonSqliteHelper(this);
p.getWritableDatabase();
这样才算创建了一个数据库。
有getReadableDatabase()和getWritableDatabase()两个方法可用。
下面通过一些常见的操作来演示一下SQLite的增删该查操作
private PersonSqliteHelper helper;
// 在构造函数里完成helper的初始化
public PersonDao(Context context) {
helper = new PersonSqliteHelper(context);
}
/**
* 添加一条数据到数据库
* @param name 姓名
* @param number 电话号码
* @return 返回插入的数据的id
* */
private boolean find(String name) {
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.query("person", null, "name=?",new String[] { name }, null, null, null);
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
在上面的代码中首先通过ContentValues创建了一个容器,然后通过put()方法将数据添加到ContentValues容器中,最后通insert()方法再分配到数据表中。
返回的值是新创建的一行的id.
查询数据
/**
* 查询一条记录是否存在
* @param name 姓名
* @return true 存在 false 不存在
* */
private boolean find(String name) {
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.query("person", null, "name=?",new String[] { name }, null, null, null);
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
/**
* 修改一条记录
* @param name 要修改信息的人的姓名
* @param newNumber 新的电话号码
* @return 返回受影响的记录的条数
* */
private int updata(String name,String newNumber){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("number", newNumber);
int numbers=db.update("person", values, "name=?", new String[]{name});
db.close();
return numbers;
}
删除数据
/**
* 删除一条数据
* @param name 姓名
* */
private int del(String name){
SQLiteDatabase db=helper.getWritableDatabase();
int number=db.delete("person", "name=?", new String[]{name});
db.close();
return number;
}
/**
* 返回全部的数据信息
* */
public List<Person> findAll(){
SQLiteDatabase db=helper.getReadableDatabase();
List<Person> persons=new ArrayList<Person>();
Cursor cursor=db.query("person", new String[]{"id","name","number"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int id=cursor.getInt(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String number=cursor.getString(cursor.getColumnIndex("number"));
Person p=new Person(id, name, number);
persons.add(p);
}
cursor.close();
db.close();
return persons;}
}
数据库中的事物
所谓的事务处理就是保证操作的完整性,所有操作要么同时成功,要么同时失败。
在SQLite中,事物的使用方法如下:
1、首先通过beginTransation()开始一个事物。
2、通过setTransactionSuccessful()设置一个事物成功的标志。
3、如果调用了以上第二步则成功地提交了事物,结束事物,否则回滚事物。方法为endTransaction().
比如:
db.beginTransaction();
try {
......//其他部分语句体
db.setTransactionSuccessful();
}finally{
db.endTransaction();
}