在上一篇博客中,我们简单介绍了SharedPreferences存储和文件存储,android除了这两种存储,还可以进行数据库存储。Android系统集成了一个轻量级的关系数据库----SQLite,它占用资源少,运行效率高、安全性好、可移植性强,故而非常适合在资源有限的设备上进行数据存储。下面就让我们一起来学习Android的数据库存储。
1、创建数据库
创建数据库主要用到的是SQLiteOpenHelper类,该类是一个抽象类,需要自定义一个类去继承它,并重写onCreate()、onUpgrade()方法和自定义类的构造方法。因为SQLiteOpenHelper类没有无参构造方法。代码如下:
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context,int version) {
super(context, "text.db", null, version);
}
/**
* 什么时候才会创建数据库文件?
* 1). 数据库文件不存在
* 2). 连接数据库
*
* 什么时候调用?
* 当数据库文件创建时调用(1次)
* 在此方法中做什么?
* 建表
* 插入一些初始化数据
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.e("TAG", "DBHelper onCreate()");
//建表
String sql = "create table person(_id integer primary key autoincrement, name varchar,age int)";
db.execSQL(sql);
//插入一些初始化数据
db.execSQL("insert into person (name, age) values ('Tom1', 11)");
db.execSQL("insert into person (name, age) values ('Tom2', 12)");
db.execSQL("insert into person (name, age) values ('Tom3', 13)");
}
//当传入的版本号大于数据库的版本号时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("TAG", "DBHelper onUpgrade()");
}
}
其中onCreate()方法在数据库创建的时候执行,onUpgrade()方法在数据库更新的时候执行。
在创建好这个类后,需要在MainActivity中实现这个类,并获取数据库连接,代码如下:
DBHelper dbHelper = new DBHelper(this, 1);
//获取连接
SQLiteDatabase database = dbHelper.getReadableDatabase()
2、实现数据库的增删改查
在创建好数据库后,就可以对数据库进行操作,主要包括增加数据、删除数据、修改数据和产看数据,下面做一一介绍。
2.1 增加数据
数据库中增加一条数据的执行语句为:insert into person(name, age) values('Tom', 12),而在Android中,对一个数据库增加数据则通过键值对来完成的,具体代码如下:
public void testInsert(View v) {
//1. 得到连接
DBHelper dbHelper = new DBHelper(this, 2);
SQLiteDatabase database = dbHelper.getReadableDatabase();
//2. 执行insert insert into person(name, age) values('Tom', 12)
ContentValues values = new ContentValues();
values.put("name", "Tom");
values.put("age", 12);
long id = database.insert("person", null, values);
//3. 关闭
database.close();
//4. 提示
Toast.makeText(this, "id="+id, 1).show();
}
2.2 删除数据
删除数据时,需要知道删除的位置,通常是根据id号来进行删除的,具体代码如下:
public void testDelete(View v) {
// 1. 得到连接
DBHelper dbHelper = new DBHelper(this, 2);
SQLiteDatabase database = dbHelper.getReadableDatabase();
// 2. 执行delete delete from person where _id=2
int deleteCount = database.delete("person", "_id=2", null);
// 3. 关闭
database.close();
// 4. 提示
Toast.makeText(this, "deleteCount=" + deleteCount, 1).show();
}
2.3 修改数据
public void testUpdate(View v) {
DBHelper dbHelper = new DBHelper(this, 2);
SQLiteDatabase database = dbHelper.getReadableDatabase();
//执行update update person set name=Jack, age=13 where _id=4
ContentValues values = new ContentValues();
values.put("name", "jack");
values.put("age", 13);
int updateCount = database.update("person", values , "_id=?", new String[]{"4"});
database.close();
Toast.makeText(this, "updateCount="+updateCount, 1).show();
}
2.4 查询数据
public void testQuery(View v) {
// 1. 得到连接
DBHelper dbHelper = new DBHelper(this, 2);
SQLiteDatabase database = dbHelper.getReadableDatabase();
// 2. 执行query select * from person
Cursor cursor = database.query("person", null, null, null, null, null, null);
//cursor = database.query("person", null, "_id=?", new String[]{"3"}, null, null, null);
//得到匹配的总记录数
int count = cursor.getCount();
//取出cursor中所有的数据
while(cursor.moveToNext()) {
//_id
int id = cursor.getInt(0);
//name
String name = cursor.getString(1);
//age
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.e("TAG", id+"-"+name+"-"+age);
}
// 3. 关闭
cursor.close();
database.close();
// 4. 提示
Toast.makeText(this, "count=" + count, 1).show();
}