SQlite是一个轻量级的数据库,它最初是为嵌入式设计的,占用资源非常少,在内存中只需要几百KB的存储空间。SQlite是遵守ACID关联式的数据库管理系统。它没有服务进程,通过文件保存数据,该文件是跨平台的,可以放在其他平台上使用。
Android SDK 为SQlite提供了一系列的数据库进行操作的类和接口,下面做一些简单的介绍:
1、SQLiteOpenHelper类是主要用于创建数据库和数据库版本更新。
2、SQLiteDatabase类是一个数据库访问类,该类封装了一系列数据库操作的API,可以对数据库进行增、删、改、查操作。
3、Cursor接口是一个游标接口,在数据库操作中作为返回值,相当于结果集ResultSet。
前面介绍了一些SDK提供的API,接下来介绍了一些具体的使用方法。
创建SQlite数据库需要创建一个类继承SQLiteOpenHelper,重写onCreate()方法,并在该方法中执行创建数据库的命令。具体代码如下所示:
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper{
public PersonSQLiteOpenHelper(Context context){
super (context,"person,db",null,5);
}
public void onCreate(SQLiteDatabase db){//初始化数据库的表结构,执行一条建表的SQL语句
db.execSQL("create table person(id integer primary key antoincrement,"+"name archer(20),"+"number varchar(20))");
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,int new newVersion){//当数据库版本号增加时调用
db.execSQL("alter table person add account varchar(20)");
}
}
在person表中插入一条数据,具体操作如下:
public long add(String name,String number){
SQLiteDatabase db=helper.getWritableDatabase();//拿到一个读写的对象
ContentValue values = new ContentValues();//将各种参数名和列添加到ContentValue对象里面
values.put("name",name);
values.put("number",number);
long id =db.insert("person",null,values);//插入数据
db.close();//关闭数据库
return id;
}
修改数据需要使用到update()方法:
public int update(String name,String number){
SQLiteDatabase db=helper.getWritableDatabase();//拿到一个读写的对象
ContentValue values = new ContentValues();//将各种参数名和列添加到ContentValue对象里面
values.put("number",new number);//将参数以key,value的形式添加进去
int number=db.update("person",value,"name=?",new String[]{name});//修改数据
db.close();//关闭数据库
return number;
}
删除数据需要用到delete()方法,操作代码如下:
public int delete(String name){
SQLiteDatabase db=helper.getWritableDatabase();//拿到一个读写的对象
int number=db.delete("per son",value,"name=?",new String[]{name});//修改数据
db.close();//关闭数据库
return number;
}
在删除数据的时候,不需要使用ContentValues来添加参数,而使用一个一个字符串和一个字符串数组来添加参数名和参数值。
查询一条数据时,需要用到rawQuery()方法或query(),代码如下:
public boolean find(String name){
SQLiteDatabase db=helper.getWritableDatabase();//拿到一个读写的对象
//查询数据库的操作 参数1:表名,参数2:查询的列名,参数3:查询条件,参数4:查询参数值,参数5:分组条件,参数6:having条件,参数7:排序方式
Cursor cursor = db.query("person",null,"name=?",new String[]{name},null,null,null);
boolean result = cursor.moveToNext();
cursor.close();//关闭游标
db.close();//关闭数据库
return result;
}
而rawQuery()方法的使用如下:
Cursor cursor =db.rawQuery("select * from person where name=?",new String[]{name});
与前面增删改的操作不同的是,前面三个都可以用execSQL()方法执行SQL语句,而这里使用的是rawQuery()。这是因为查询数据库会返回一个结果集Cursor,而execSQL()没有返回值。
注意:在使用完SQLiteDatabase对象后一定要关闭,否则数据库会一直连接,不断消耗内存,并且报出数据库未关闭的异常,当系统内存不足时会获取不到SQLiteDatabase对象。Cursor对象使用完后也要及时关闭,否则会造成内存泄露。