Andriod开发——SQlite数据库的学习

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

上述代码中创建数据库表的SQL语句被定义在onCreate()方法中,当数据库第一次被创建时会自动调用该方法,并执行方法中的SQL语句。当数据库版本号增加时会调用onUpgrade()方法,如果版本号不增加,则不会被调用。

在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;
}

上述代码中需要注意的是,第五行使用ContentValues类放置参数。它的底层是用Map集合实现的。key表示数据插入的列名,value表示插入数据的值。除了insert()方法外,还可以使用execSQL()方法实现功能。

修改数据需要使用到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对象使用完后也要及时关闭,否则会造成内存泄露。




你可能感兴趣的:(Android)