• Android SQLite使用


    1. 介绍

    SQLite是一款轻型的数据库, 是遵守ACID的关系型数据库管理系统, Android系统已经在框架中适配接口供用户使用.

    2. 数据类型

    SQLite采用的是动态数据类型, 会根据存入值自动判断.
    SQLite具有以下五种常用的数据类型:

    存储类 描述
    NULL NULL 值
    INTEGER 带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中
    REAL 浮点值,存储为 8 字节的 IEEE 浮点数字
    TEXT 文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储
    BLOB blob 数据,完全根据它的输入存储

    详细信息参考<SQLite 数据类型>

    3. 基本使用

    在Android中使用SQLite涉及到下面三个类

     - SQLiteOpenHelper: 抽象类. 我们通过继承该类, 然后重写数据库创建以及更新的方法. 我们还可以通过该类的对象获得数据库实例, 或者关闭数据库. 
     - SQLiteDatabase: 数据库访问类. 我们可以通过该类的对象来对数据库做一些增删改查的操作. 
     - Cursor: 游标. 有点类似于JDBC里的resultset, 结果集. 可以简单理解为指向数据库中某 一个记录的指针.

    2.1 SQLiteOpenHelper

    SQliteOpenHelper是一个抽象类, 用来管理数据库的创建和版本的管理

    常用方法有:

    SQLiteDatabase getReadableDatabase()   :  得到可读的数据库, 返回SQLiteDatabase对象       
    SQLiteDatabase getWritableDatabase()   :  得到一个可写的数据库, 返回SQLiteDataba
    void onCreate(SQLiteDatabase)          :  创建一个表, 当数据库第一次被建立的时候被执行
    void onOpen(SQLiteDatabase)            :  打开数据库, 当数据库被打开的时候被执行
    void onUpgrade(SQLiteDatabase,int,int) :  当数据库需要被更新的时候执行
    void close()                           :  关闭数据库

    我们我们实行一个类(Like DBHelper)来继承SQliteOpenHelper, 同时实现onCreate和onUpgrade方法.
    然后创建DBHelper实例, 通过getReadableDatabase()/getWritableDatabase()来获取数据库实例, 随后即可对数据库进行操作

    2.2 SQLiteDatabase

    SQLiteDatabase是一个数据库对象, 它提供了丰富的方法

    /* 静态方法, 打开或创建数据库 */
    SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory);
    /* 插入记录 */

    long insert(String table, String nullColumnHack, ContentValues values);
    /* 删除记录 */
    int delete(String table, String whereClause, String[] whereArgs);
    /* 查询记录 */
    Cursor query(boolean distinct, String table, String[] columns,
    String selection, String[] selectionArgs, String groupBy,
    String having, String orderBy, String limit);
    /* 更新记录 */
    int update(String table, ContentValues values, String whereClause, String[] whereArgs)
    /* 执行SQL语句 */
    void execSQL (String sql)

    更多方法请参考<SQLiteDataBase的一些方法整理>

    2.3 Cursor

    Cursor 是每行记录的集合, 在使用时必须知道每一列的名称和数据类型
    常用方法如下:

    /* 关闭游标,释放资源 */
    void close()
    /* 在缓冲区中检索请求的列的文本,将将其存储 */
    void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
    /* 返回所有列的总数 */
    int getColumnCount()
    /* 返回指定列的名称, 不存在返回-1 */
    int getColumnIndex(String columnName)
    /* 从零开始返回指定列名称, 不存在抛出IllegalArgumentException异常 */
    int getColumnIndexOrThrow(String columnName)
    /* 从给定的索引返回列名 */
    String getColumnName(int columnIndex)
    /* 返回一个字符串数组的列名 */
    String[] getColumnNames()
    /* 返回Cursor中的行数 */
    int getCount()
    /* 移动光标到第一行 */
    boolean moveToFirst()
    /* 移动光标到最后一行 */
    boolean moveToLast()
    /* 移动光标到下一行 */
    boolean moveToNext()
    /* 移动光标到一个绝对的位置 */
    boolean moveToPosition(int position)
    /* 移动光标到上一行 */
    boolean moveToPrevious()

    参考:
    <
    SQLite教程>
    <Android操作SQLite基本用法>
    <
    Android数据存储与访问之-初见SQLite数据库>
    <Android数据库储方式(一)-SQLite的基本操作>

  • 相关阅读:
    电子科技大学实验中学PK赛(二)比赛题解
    伊苏比的梦幻之旅(三)比赛题解
    电子科技大学实验中学PK赛(一)比赛题解
    伊苏比的梦幻之旅(二)比赛题解
    伊苏比的梦幻之旅(一)比赛题解
    The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C
    The Solution of UESTC 2016 Summer Training #1 Div.2 Problem B
    c++11 多线程间共享数据 <c++ concurrency in action>
    c++11 多线程 2<<c++ concurrency in action>>
    c++11 多线程 1<<c++ concurrency in action>>
  • 原文地址:https://www.cnblogs.com/hzl6255/p/6710277.html
Copyright © 2020-2023  润新知