学习笔记:android下SQLite数据的相关操作

SQLite数据库是一个移动平台的嵌入式数据库,提供的数据类型较少。值得注意的是,SQLite数据库在底层存放数据时均采用String字符的形式,所以指定列的字符长度只是为了方便开发人员理解,若存储时数据长度超过设置长度系统也是不会报错的。

创建SQLite数据库

android下为我们提供了一个数据库创建和打开的事件类——SQLiteOpenHelper类。在这个类中包含两个方法,分别为是

onCreate(SQLiteDatabase db):在数据库第一次被创建的时候调用,db表示被创建的数据库。通常用来该方法来初始化数据库的表结构以及初始化一些参数。

onUpdate(SQLiteDatabase db):在数据库版本号发生增加时被调用。注意数据库的版本号只能一直增加,不能改小。

首先我们需要实现SQLiteOpenHelper类的构造方法,用该构造方法来定义数据库的名称,数据库的查询结果集以及数据库的版本号(版本号必须大于等于1)。然后实现onCreate(SQLiteDatabase db)的方法,数据库的创建就基本完成了。

获得SQLite数据库的实例

获取数据库实例也有两种方式,分别是

getWritableDatabase():获取可写的数据库实例,从而可以对数据库进行增删改操作。

getReadableDatabase():获取可读的数据库实例,从而可以对数据库进行查询操作。


在Android下,提供了对sql语句进行包装的api,以避免一些手写sql语句出现的小错误。同时也提供了数据库的事务管理方法。在此主要介绍一下增删改查操作。

对SQLite进行简单添加操作——insert(table, nullColumnHack, values)

String table:指定进行添加操作的表结构名称。

String nullColumnHack:将某一列指定为“NULL”,如果表结构中存在自增长的主键,可以将该值指定为null。

ContentValues values:是一个需要添加的信息的Map集合。可以不用考虑变量的类型,只需将其put到ContentValues类型的集合中,系统可以自动对类型进行处理。

该方法返回一个long值,若添加成功则返回新添加的条目的id,若添加失败则返回-1。

对SQLite进行简单修改操作——update(table, values, whereClause, whereArgs)

String table:指定进行查询操作的表结构名称。

ContentValues values:是一个需要修改的信息的Map集合。在Map集合中添加表结构对应列的内容。

String whereClause:指定修改条件。

String[] whereArgs:指定whereClause中?所代表的占位符的值。

该方法返回一个int值,表示表中更新的条目数。

对SQLite进行简单查找操作——query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

String table:指定进行查询操作的表结构名称。

String[] columns:指定查询返回的结果列,指定为null时,返回所有列。

String selection:指定选择条件,若选择条件指定为null且selectionArgs也指定为null,即执行查找表中所有条目的操作。

String[] selectionArgs:指定selection中?所代表的占位符的值。

String groupBy:指定分组查询。

String having:指定聚合过滤。

String orderBy:指定排序方式。

Android下还提供了其他的query方法,可以根据需要进行选择。该方法返回一个Cursor值。

对SQLite进行简单删除操作——delete(table, whereClause, whereArgs)

String table:指定进行删除操作的表结构名称。

ContentValues values:是一个需要修改的信息的Map集合。在Map集合中添加表结构对应列的内容。

String whereClause:指定修改条件。

String[] whereArgs:指定whereClause中?所代表的占位符的值。

该方法返回一个int值,表示表中移除的条目数。

在进行测试时,我们可以通过使用命令提示符窗口来访问SQLite数据库,步骤如下:

1、  adb shell

2、  cd 目录

3、  sqlite 3 数据库名

4、  执行sql语句,验证操作是否正确执行

附:用户信息数据操作类的实现

public class PersonDao implements PersonIDao {
	private PersonSQLiteOpenHelper helper;
	// 在构造方法里完成helper的初始化
	public PersonDao(Context context) {
		helper = new PersonSQLiteOpenHelper(context);
	}

	@Override
	public long insert(String name, String number) {
		SQLiteDatabase db = helper.getWritableDatabase();
		//		db.execSQL("insert into person (name,number) values (?,?)",
//				new Object[] { name, number });
		ContentValues values=new ContentValues();
		values.put("name", name);
		values.put("number", number);
		long i=db.insert("person", null, values);
		db.close();
		return i;
	}

	@Override
	public int update(String name, String newnumber) {
		SQLiteDatabase db = helper.getWritableDatabase();
//		db.execSQL("update person set number=? where name=?", new Object[] {
//				newnumber, name });
		ContentValues values=new ContentValues();
		values.put("number", newnumber);
		int i=db.update("person", values, "name=?", new String[]{name});
		db.close();
		return i;
	}

	@Override
	public Person find(String name) {
		SQLiteDatabase db = helper.getReadableDatabase();
//		Cursor cursor = db.rawQuery("select * from person where name=?",
//				new String[] { name });
		Cursor cursor=db.query("person", null, "name=?", new String[]{name}, null, null, null);
		if (cursor.moveToNext()) {
			int id = cursor.getInt(cursor.getColumnIndex("id"));
			String number = cursor.getString(cursor.getColumnIndex("number"));
			Person person = new Person(id, name, number);
			db.close();
			return person;
		} else {
			db.close();
			return null;
		}
	}

	@Override
	public int delete(String name) {
		SQLiteDatabase db = helper.getWritableDatabase();
//		db.execSQL("delete from person where name=?", new Object[] { name });
		int i=db.delete("person", "name=?", new String[]{name});
		db.close();
		return i;
	}

	@Override
	public List<Person> findAll() {
		SQLiteDatabase db = helper.getReadableDatabase();
//		Cursor cursor = db.rawQuery("select * from person", null);
		Cursor cursor=db.query("person", null, null, null, null, null,null);
		List<Person> persons = new ArrayList<Person>();
		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 person = new Person(id, name, number);
			persons.add(person);
		}
		db.close();
		return persons;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值