Android 系统数据库编程学习日志

Android 完整地支持 sqlite 数据库,而且一个APP不能访问其他APP的数据库。


1、查看Android API,看到有两个package与数据库相关:android.database 和 android.database.sqlite。

android.database 用于与Content Provider交互的;直接操作数据库的API位于 android.database.sqlite。

2、查看Dev Guide -> Data Storage 这份文档。讲解了一些常用的存储数据的方法,不过对于直接操作数据库的内容只是略微提及,并没有详细讲解。

3、查看Android SDK中的 sqlite3 这个工具的用法(可以在PC上试用一下这个软件)

4、到 sqlite 的官方网站逛一逛,网址 http://www.sqlite.org。然后把它的参考手册下载回来,因为在开发的时候会用到。


手工操作一下数据库,熟悉一下sqlite3这个工具。

1、首先启动虚拟机或者将手机连接到PC,执行 adb shell,进入android的shell

2、执行 sqlite3 命令(在andoid系统中执行,不是在PC端)。用真机执行的话需要root权限,建议在虚拟机中操作。

     执行 sqlite3 命令的时候,可以带一个数据库的文件路径,例如

$ sqlite3 /data/data/com.android.providers.media/database/internal.db。

    如果你有Linux的系统,完全可以在PC上试用sqlite3,跟Android上面的sqlite3是差不多的。

3、进入了 sqlite3 的终端,可以执行各种sqlite命令(提示:sqlite命令都是以句点符号开头,例如“.tables” 列出所有表格,“.databases”列出所有数据库,“.help” 查看帮助,“.exit”  退出)

4、在sqlite3的终端界面还可以执行SQL语句,例如 CREATE TABLE, SELECT 等等。参考sqlite官网了解SQL语句的写法。


手工操作了一下数据库之后,然后就开始利用Android API编写访问数据库的Java程序。

大致了解一下android.database.sqlite包中的各个类的用途:

1、SQLiteCloseable  抽象类,一般不直接用这个类(它主要是提供一个接口,提供了close()方法)

2、SQLiteCursor 保存查询操作返回的结果,类似于Content Provider返回的Cursor。

3、SQLiteDatabase 是访问sqlite数据库的最主要的类,提供了多个操作数据库的API(查询、插入、删除等)

4、SQLiteOpenHelper 是为了简化数据库操作而引入的类,也很常用(对于这个类,根据API文档的描述,需要覆盖它的几个onXXX() 回调函数,然后使用)

5、SQLiteProgram  表示一次sqlite查询操作(这个类的作用是提供一个基类,供继承的,一般不用)

6、SQLiteQuery  是一次查询,从SQLiteProgram继承而来。这个类要提供给SQLiteCursor才有用,它本身没什么用。

7、SQLiteQueryBuilder  是用于构造SQLiteQuery的工厂类,通过这个类建立SQLiteQuery,再把SQLiteQuery传给SQLiteCursor,做查询操作。

8、SQLiteStatement  表示一个提前编译好的SQL语句,而且这个语句只能返回一行一列数据,需要从SQLiteDatabase.compileStatement来创建(不要用构造函数创建),引入他的目的是为了复用。


典型开发步骤:

1、写一个类,继承 SQLiteOpenHelper类,并实现它的回调函数。这个类的最主要作用就创建数据库,返回数据库调用接口:

public class DictionaryOpenHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 2;
    private static final String DICTIONARY_TABLE_NAME = "dictionary";
    private static final String DICTIONARY_TABLE_CREATE =
                "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" +
                KEY_WORD + " TEXT, " +
                KEY_DEFINITION + " TEXT);";

    DictionaryOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DICTIONARY_TABLE_CREATE);
    }
}

2、写好SQLiteOpenHelper子类之后,用构造函数实例化对象(用new运算符),即可访问数据库了。典型的访问数据库的代码如下:

DictionaryOpenHelper helper = new DictionOpenHelper(getApplicationContext());
SQLiteDatabase db = helper.getWritableDatabase();
String delete = "DELETE FROM " + Dictionary.TABLE_NAME +
        " WHERE year=" + year + " AND month=" + month +";";
db.execSQL(delete);
db.close();

创建 helper,调用 helper 的 getReadableDatabase()  / getWritableDatabase() ,得到SQLiteDatabase(数据库接口),然后用这个对象提供的API对数据库进行查询、插入、删除等各种操作。


3、如果要对数据库做查询操作,就调用 SQLiteDatabase 的 query() 函数,返回 Cursor 对象。


注意:

1、如果数据库要提供数据给 Content Provider,那么需要包含一个字段,名称为 BaseColumn._ID。

2、我在做开发的时候,遇到的麻烦问题就是SQL字符串比较复杂,容易出错,把SQL传过去报错的话

不能马上发现错误。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值