[Android]SQLite 学习笔记

之前一直做java web项目,没有用过mobile端的这种轻量级数据库,今天学初步学习了一下sqlite,记录一点学习心得。

首先, sqlite它也是关系型数据库,不过由于是针对移动客户端开发设计的,所以它非常的小,整个sqlite项目才4m大小,在移动设备里更是只有几百k,而通常它的一个数据库文件也就几k。所以ios平台和android平台都不约而同的使用了它做为手机端的数据库,下面我们就来看一下在android中我们如何来使用sqlite.

通常我们对于数据库的操作不外乎以下几种:

1. Create Database

2. Insert Data

3. Update Data

4. Query Data

5. Delete Data

6. Update Database

Android 平台为我们提供了一个非常方便的工具类SQLiteOpenHelper,这个工具类里面为我们提供了oncreate/onupgrade等回调方法来让我们能够在创建和升级数据库的时候自定义一些操作。而通过这个工具类的getReadableDatabase(),getWritableDatabase()方法,我们就能够得到一个sqliteDatabase对象进而对数据库进行增删查改等操作。

所以首先,我们可以实现一个继承于SQLiteOpenHelper的工具类。

要注意的是,它有两个必须要实现的接口法onCreate和onUpgrade. 以及它的构造函数,在onCreate方法中,我们可以去建立数据库中的表。实现如下:

public class DatabaseHelper extends SQLiteOpenHelper {

    private static int VERSION = 1;

    public DatabaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
    }
    
    public DatabaseHelper(Context context, String name, int version) {
        this(context, name, null, version);
    }
    
    public DatabaseHelper(Context context, String name) {
        this(context, name, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase arg0) {
        System.out.println("Create database!");
        arg0.execSQL("create table user(id int, name varchar(20))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        System.out.println("Update database!");
    }

}
然后,我们再来看一看,我们如何利用这个DatabaseHelper进行各种数据库操作。

1. 新建数据库

我们先通过定义的构造函数得到一个DatabaseHelper的实例,然后再调用getReadableDatabase()或者getWritableDatabase()方法,得到SQLiteDatabase对象,这里调用getReadableDatabase()方法的时候,DatabaseHelper就会去sqlite数据库中查找名字为"test.db"的数据库文件,如果不存在就会新建这个数据库,这个时候DatabaseHelper中的onCreate函数会被调用,数据库被初始化。

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db");
SQLiteDatabase testDB = dbHelper.getReadableDatabase();

2. 插入数据

同样的,我们先得到一个sqliteDatabase实例(不过这里是通过getWritableDatabase()方法),然后调用SQLiteDatabase的insert(table, nullColumnHack, values)方法进行插入。

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db");
SQLiteDatabase testDB = dbHelper.getWritableDatabase();
testDB.insert("user", null, values);
3. 更新数据

调用SQLiteDatabase的update(table, values, whereClause, whereArgs)方法.

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db");
SQLiteDatabase testDB = dbHelper.getWritableDatabase();
testDB.update("user", values, "id=?", new String[]{"1"});
4. 查询数据

调用SQLiteDatabase的query(table, columns, selection, selectionArgs, groupBy, having, orderBy)方法。这个方法的参数非常多,但其实就是把一个完整的sql语句拆分成了各个部分,我们按照我们要进行的查询将各个参数设置好即可。

不过要注意的是,这里和以前sql查询返回的结果集resultSet不一样,这里sqlite查询返回的是一个结果集的游标cursor对象。我们需要通过控制cursor的下移来取得我们需要的结果。

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db");
SQLiteDatabase testDB = dbHelper.getReadableDatabase();
Cursor cursor = testDB.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
while (cursor.moveToNext()) {
      String name = cursor.getString(cursor.getColumnIndex("name"));
      System.out.println("Query=>name : " + name);
}
5. 删除数据

调用SQLiteDatabase的delete(table, whereClause, whereArgs)方法。

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db");
SQLiteDatabase testDB = dbHelper.getWritableDatabase();
testDB.delete("user", "id=?", new String[]{"1"});
6. 更新数据库

这里要注意的是sqlite的数据库有一个版本号的管理。在DatabaseHelper的构造函数中,我们可以看到有一个version参数,当我们用一个新的版本号得到databaseHelper并调用它的getReadableDatabase(),getWritableDatabase()方法时,sqlite会认为我们是要进行数据据的更新,这时DatabaseHelper中的onUpgrade()方法会被调用。

DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "test.db", 2);
SQLiteDatabase testDB = dbHelper.getReadableDatabase();
好了,以上就是sqlite最基本的几种操作和使用方法介绍。

当然还有很多问题需要继续研究。

比如,如何提取出一个更好用的DatabaseHelper,可以看到我们这里每个操用都还是重复的去取得Database实例,以及参数的设置也比较不方便,这个后面我会继续更新。

另外,sqlite数据库的查看问题依然不好解决。虽然android sdk提供了adb工具进入shell可以查看数据库,但更多时候我们都是使用手机直接调试,而adb只能看模拟器中的数据。目前只能通过file explorer将手机中的db文件传到pc上再用sqlite客户端进行查看(需要root)。再不然就只能通过手过添加log来调试了,依然比较不方便。

这里附上一个简单的android demo项目供参考:sqlite demo







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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值