• android中的SQLite数据库


    SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法

    SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,就可以使用SQLiteDatabase对象来管理、操作数据库了。

    SQLiteDatabase的方法:

    1、static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags):打开path文件所代表的SQLite数据库

    2、static SQLiteDatabase openOrCreateDatabase(File file, CursorFactory factory):打开(或创建)file文件所代表的SQLite数据库

    3、static SQLiteDatabase openOrCreateDatabase(File path, CursorFactory factory):打开(或创建)path文件所代表的SQLite数据库

    4、execSQL(String sql, Object[] bindArgs):执行带占位符的SQL语句

    5、execSQL(String sq):执行SQL语句

    使用insert方法插入数据:

    long insertOrThrow(String table, String nullColumnHack, ContentValues values)

    table:表名

    nullColumnHack:强行插入null值的数据列的列名

    values:代表一行记录的数据

    ContentValues values = new ContentValues();
    values.put("name", "hemingliang");
    values.put("age", "18");
    db.insert("person_info",null, values);

    使用update更新数据

    int update(String table, ContentValues values, String whereClause, String[] whereArgs)

    table:表名

    values:代表更新的值

    whereClause:更新的条件

    whereArgs:为条件传入参数

    ContentValues values = new ContentValues();
    values.put("name", "hemingliang");
    db.upate("person_info",values, "_id > ?", new Integer[]{20});

    使用delete删除数据

    delete(String table, String whereClause, String[] whereArgs)

    values:代表更新的值

    whereClause:更新的条件

    whereArgs:为条件传入参数

    db.delete("person_info", "person_name like ?", new String[]{"王_"});

    使用query查询数据

    Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    distinct:是否去除重复记录

    table:表名

    columns:需要查询的列

    selection:查询条件,允许使用?占位符

    selectionArgs:为查询条件传值

    groupBy:分组

    having:对分组过滤

    orderBy:对记录排序

    limit:分页

    创建数据库和表:

    SQLiteDatabase.openOrCreateDatabase("path", null);

    path:数据库文件的路径

    CursorFactory为null则代表使用默认的工厂。

    上面SQLiteDatabase.openOrCreateDatabase("path", null);即可返回一个SQLiteDatabase对象,调用该对象就可以执行建表语句或者数据库操作语句。 execSQL(SQL)

    SimpleCursorAdapter类:该类和SimpleAdapter类相似都是对数据进行封装,区别是SimpleAdapter构造器是负责封装集合元素为Map的List。而SimpleCursorAdapter负责封装Cursor。值得注意的是SimpleCursorAdapter封装Cursor时要求底层表的主键列的列名为_id,因为SimpleCursorAdapter只能识别列名为_id的主键。如果主键不是_id就会报异常。

    事物:

    beginTransaction() :开始事物

    endTransaction() : 结束事物

    inTransaction() :判断是否在事物中

    SQLiteOpenHelper类:是android提供的一个数据库管理类,可用于管理数据库的创建和版本更新,一般都是使用该类的子类,并扩展他的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int new Version)方法。

    SQLiteDatabase getWritableDatabase():以写的方式打开数据库

    SQLiteDatabase getReadableDatabase():以读的方式打开数据库

    abstract void onCreate(SQLiteDatabase db):当第一次创建该数据库时回调该方法

    abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库版本更新时回调该方法

    synchronized void close():关闭所有的数据库

    onCreate(SQLiteDatabase db)方法用于初次使用软件时生成数据库表,当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例时,如果数据库不存在,android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCeate()方法中可以生成数据库表结构及添加一些应用使用的初始化数据。

     onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):用于升级软件时更新数据库表结构,方法在数据库的版本发生变化时被调用,该方法调用时oldVersion代表数据库之前的版本号,newVersion代表当前数据库的版本号。当程序创建SQLiteOpenHelper对象时,必须指定一个version参数,该参数决定所使用的数据库版本号——也就是说,数据库的版本是由程序员控制的,只要某次创建SQLiteOpenHelper时指定的数据库版本号高于之前指定的版本号,系统就会自动触发onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法,程序可以在onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法中根据原版本号和目标版本号进行判断,即可根据版本号进行必要的表结构更新。

       一旦得到了SQLiteOpenHelper对象之后,程序无须使用SQLiteDatabase的静态方法创建实例,而且可以使用getWritableDatabase()或者getReadableDatabase()方法来获取一个用于操作数据库的SQLiteDatabase实例。

    其中getWritableDatabase()方法以读写的方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,此时使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写的方式打开数据库,如果数据库磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

  • 相关阅读:
    Repeater自定义翻页 存储过程实现
    Redis常用命令
    常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例
    网站转接支付宝解决方案
    如何有效抓取SQL Server的BLOCKING信息
    SVN 冲突文件详解
    JavaScript可否多线程? 深入理解JavaScript定时机制
    MS SQL Server:分区表、分区索引详解
    支付宝外部商家购物流程
    排查数据库性能的常用sql语句
  • 原文地址:https://www.cnblogs.com/heml/p/3568952.html
Copyright © 2020-2023  润新知