数据存储之SQLite数据库存储

使用SQLite可以为应用程序创建完全封装的关系数据库。使用这些数据库可以存储和管理复杂的、结构化的应用程序数据。
Android数据库存储在设备(或模拟器)上的/data/data/包名/databases文件夹中。所有的数据库都是私有的,只能被创建它们的应用程序访问。

1.SQLiteOpenHelper
SQLiteOpenHelper是一个抽象类,可以用来实现创建、打开和升级数据库。要使用SQLiteOpenHelper访问数据库,需要调用getWritableDatabase或者getReadableDatabase来分别打开和获得底层数据库的一个可写的或只读的实例。
在SQLiteOpenHelper的子类中至少需要实现三个方法:
*构造方法,调用父类SQLiteOpenHelper的构造函数。需要四个参数:上下文环境(例如一个Activity);数据库名称;一个可选的游标工厂(通常是null);一个正在使用的数据库版本。
*onCreate方法,需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。
*onUpgrade方法,需要三个参数:一个SQLiteDatabase对象,一个旧的版本号和一个新的版本号。
下面以代码进行说明:

/*
     * 参数依次说明:上下文环境(例如一个Activity);数据库名称;一个可选的游标工厂(通常是null);一个正在使用的数据库版本。
     */
    public LocDb(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /*
     * 数据库第一次创建时onCreate方法会被调用
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table if not exists " + LOC_TABLE + "(" + _ID + " integer primary key autoincrement,"
                + loc_lon + " text," + loc_lat + " text," + loc_name + " text"+")");
    }

    /*
     * 如果Version的值更改,系统发现数据库版本不同,会调用onUpgrade
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS" + LOC_TABLE);// 删除旧表
        onCreate(db);// 创建新表
    }

2.Content Value和Cursor
Content Value用来向数据库的表中插入新的行。每个ContentValues对象都将一个表行表示为列名到值的映射。
数据库查询作为Cursor对象返回。Cursor是底层数据中的结果集的指针,它没有提取和返回结果值的副本。Cursor为控制在数据库查询的结果集中的位置提供了一种易于管理的方式。
一些常见的Cursor类包含的函数:

moveToNext 将游标移动到下一行
moveToFirst 将游标移动到第一行
moveToPrevious把游标移动到前一行
getCount 返回结果集中的行数
getColumnName 返回指定列索引的名称
getPosition 返回当前的游标位置
moveToPosition 将游标移动到指定行

结束使用结果Cursor后,关闭它非常重要,这样可以防止内存泄漏,并降低应用程序的资源负载。

3.SQLiteDatabase
SQLiteDatabase类通过提供INSERT、DELETE、UPDATE方法来封装执行这些操作所需要的SQL语句。当然,也可以使用execSQL方法对数据库执行任何有效的SQL语句。
插入行
构造一个ContentValues对象,使用它的put方法来添加代表每一列的名称及其相关值的名/值对,调用insert方法插入新行。
示例如下:

        ContentValues values = new ContentValues();

        values.put(loc_lon, loc.getLoc_lon());
        values.put(loc_lat, loc.getLoc_lat());
        values.put(loc_name, loc.getLoc_name());

        // 插入
        raw = db.insert(LOC_TABLE, null, values);

更新行
构造一个ContentValues对象,使用它的put方法为所希望更新的每一列赋新值,调用update方法更新。
示例如下:

            ContentValues values = new ContentValues();

            values.put(loc_lon, "108.93");
            values.put(loc_lat, "34.27");
            values.put(loc_name, "xi'an");

            String where = _ID + "=" + 1;
            String whereArgs[] = null;
            db.update(LOC_TABLE, values, where, whereArgs);

删除行
调用delete方法。
示例如下:

            String where = _ID + "=" + 1;
            String whereArgs[] = null;
            // 刪除 _ID=1的行
            db.delete(LOC_TABLE, where, whereArgs);

4.运行结果如下: (源码下载)

这里写图片描述

5.查看数据库
第一步:导出数据表
这里写图片描述

第二步:使用工具SQLite Expert Personal查看
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值