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