zoukankan      html  css  js  c++  java
  • 数据库SQLite

    数据库SQLite是一种轻量级的关系型数据库,与大型数据库相比,它的体积小、零配置,可以直接运行在应用程序中,非常设和嵌入式的操作系统。

    Android中的SQLite:

    SQLite的数据库文件默认为与/data/data/package-name/database目录下

    SQLiteOpenHelper

    要创建一个灵活应用、便于维护的数据库,首先要实现SPLiteOpenHelper的子类

    数据库最经典的四个操作:添加、删除、修改、查找,在处理大量数据的时候使用数据库可以帮我们迅速定位当前需要处理的数据,例如要实现一个搜索功能,用数据库的话只需要其中一个搜索条件。一个数据库语句就可以迅速的在N条数据中找到我们想要的数据。在Android的开发中使用的数据库是SQLite,他是一个轻量级的数据库,非常小,已执行好,效率高,可靠,陷入式设备因为受到硬件条件的限制所以ufeichangshiheshiyongSQLite数据库。

    创建与删除数据库

    封装一个类去继承SQLiteOpenHelper,在构造函数中传入数据库名称与数据库版本号,数据库被创建的时候会调用onCreate(SQliteDatabase db)方法,数据库版本号发生改变的时候会调用onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法,可以方便的对软件升级后作出相应处理避免覆盖安装数据库发生改变产省的错误。调用SQLiteOpenHelper的getReadableDatabase()方法去创建数据库,如果数据库不存在则创建并返回SQLiteDatabase对象,如果数据库存在则不创建只返回SQLiteDatabase对象。调用deleteDatabase(DATEVASE_NAME)方法,传入数据库名称及可以删除数据库

    封装了一个DatabaseHelper类继承SQLiteOpenHer,使用单例模式来处理这个类,单例模式是常见的代码设计模式之一,它的好处是避免在内存中的频繁的实例化所以将他的对象写成static静态,这样他的对象就只有一份存在静态内存区,使用的时候只需要通过getInstance()就可以直接拿到这个静态对象。

     一、SqliteDataBase类

    Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API。一旦应用程序获得了代表指定数据库的SqliteDatabase对象,接下来就可通过SqliteDatabase对象来管理、操作数据库了。

    1.1创建数据库和表

    1.1.1创建数据库,并获得SqliteDataBase对象。调用SqliteDataBase类的静态方法,可以获得一个数据库对象。

    SqliteDataBase.db = SQLiteDataBase.openOrCreateDatabase(path,factory);//打开或创建(不存在则创建)

    注意:1.如果指定的数据文件存在则打开,不存在则创建。

             2.参数而是指的CursorFactory,传入null则代表使用默认的CursorFactory,一般传入null足够。

    1.1.2使用sql语句操作SQLite数据库。建表、数据的CRUD等操作。

    注意:SQliteDataBase的execSQL()方法可以执行任意的SQL语句,包括带占位符的SQL语句。但是该方法没有返回值,所以一般只用于执行DDL或DML语句,执行查询语句,则调用SQLiteDataBase的rawQuery()方法。

    1.2关于Cursor

        当执行查询语句的时候,返回值是一个Cursor对象,这里的Cursor类似于JDBC中的ResultSet。Cursor也提供了一些方法来移动查询结果的记录指针。

    1.2.1move(int offset)将指针向上或向下移动指定的行数。offset是证书就是向下,负数就是向上

    1.2.2moveToFirst()哟东道第一行,成功则返回true

    1.2.3moveToLast()

    1.2.4moveToNext()

    1.2.5moveToPosition(position)移动到指定的行

    1.2.6moveToPrevious()向上移动一行

    1.2.7一旦将记录指针移动到指定的行后,接下来就尅调用Cusor对象的getXxx()方法来获得该行记录的数据了。

    1.3、关于事务

    SQLiteDatabase中包含如下两个方法来控制事务:

    beginTransaction() 开始事务

    endTransaction()   结束事务

    inTransaction() 如果当前上下文处于事务中,则返回true

    关于事务的提交还是回滚:

    在结束事务之前调用setTransactionSuccessful()方法,则当调用结束事务的时候是事务提交。否则事务回滚。

    1.4特定方法操作SQLite数据库

    如果不动用sql语句,可以使用Android提供的专有API操作数据库:insert、update、delete和query方法

    insert(table, nullColumHack, values)

    updatetablevalueswhereClausewhereArgs

    delete()

    query();

    二、SQLiteOpenHelper类(建华或的数据库对象的方式)

    直接使用SQLiteDataBase进行数据的创建比较麻烦,Android专门提供了SqliteOpenHelper来创建数据库。

     SqliteOpenHelper是一个管理数据库的工具类,用于管理数据库的创建和版本更新。

    2.1SQLiteOpenHelper类的构造方法

    可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
    所有继承了这个类的类都必须实现下面这样的一个构造方法:
    public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
    第一个参数:Context类型,上下文对象。
    第二个参数:String类型,数据库的名称
    第三个参数:CursorFactory类型
    第四个参数:int类型,数据库版本

    注意:1.数据名称只需要写数据库名就可以,会自动把数据库存到app的目录选

               2.CursorFactory一般使用null即可。

    2.2SQLiteOpenHelper类的方法

    2.2.1 getReadableDatabase()创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。

    2.2.2getWritableDatabase()获得一个可读写的数据库。如果磁盘满则会抛出异常。

    2.2.3onCreate(SQLiteDataBase db)只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。

    2.2.4onOpen(SQLiteDatabase db)当每次打开数据库的时候都会调用。这个方法很少使用

    2.2.5onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库的时候调用

    2.2.6close()   关闭打开的所有数据库对象

    三、读取数据与ListView结合使用

    3.1 把Cursor数据转换成List集合

    Cursor中的数据转换成List集合,然后做Adapter的数据源,来让ListView展示

    3.2使用CursorAdapter

    构造方法:

    public CursorAdapter ( Context context, Cursor c, int flags)

    context

    应用程序上下文

    c

    用于取得数据的游标

    flags

    用于决定适配器行为的标志位.可以是 FLAG_AUTO_REQUERY 和 FLAG_REGISTER_CONTENT_OBSERVER 的任意组合. 

    CursorAdapter继承自BaseAdapter

    一般实现腹泻如下两个方法就可以了:

    View newView(Context context,Cursor cursor,ViewGroup parent)

    为游标指向的数据创建新视图

    bindView(View view,Context context,Cursor cursor)

    绑定游标指向的数据到传入的view视图中

    当数据库中的数据发生变化时:可以调用adapterchangeCursor(newCursor)来更新数据显示,此方法会更新新的Cursor,并关闭旧的Cursor。   不需要另外调用Adapternotifdataset.

  • 相关阅读:
    80端口被NT kernel & System 占用pid 4的解决方法 80端口被占用
    Linux:linux输入输出重定向、管道命令grep/wc、linux进程管理ps、pstree、kill命令、linux防火墙命令firewall-cmd、防火墙开启关闭端口号
    Linux:Linu文件权限管理、文件权限修改chmod、修改属主属组chown、特殊权限SUID、SGID、Sticky、umask
    [Java]获取图片高和宽
    [Java]获取Window界面的标题栏的高度大小
    [算法 笔记]字符串表达式计算(简易版)
    [算法 笔记]大数相乘(续)
    [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正
    [算法 笔记]堆排序(续)
    [算法 笔记]用小范围随机函数编写大范围随机函数
  • 原文地址:https://www.cnblogs.com/chhom/p/5016859.html
Copyright © 2011-2022 走看看