• android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLITE ,CURSOR操作,CURSOR适配器,SQLITEHELPER,数据库设计模式


    1 ANDROID数据库技术 文件系统,结构;

    2 SDCARD访问(读写)

    3 CONTENT PROVIDER:在多个应用中存取和读取数据。增加,查询,删除,更改数据。

    4 SQLITE:轻量级的黄入式的数据库。

    5 cursor 光标对象

    1 android 数据库技术

       

    Android中,提供了4种数据存储的途径,和两种存储方式。这是重点,要撑握:

        系统配置Shared Preferences

         FILE

         SQLITE

         NETWORK

    1>  系统配置Shared Preferences:保存应用程式配置信息.键值对保存方式;namevalue

          比如我给程序界面设置了颜色,我想在下一次启动时还是能够保留上次设置的颜色。由于Android系统的界面是采用Activity栈的形式,在系统资源不足时,会收回一些界面,那么,我  想   有些操作也是需要在不活动时保留下来的,等再次激活时能够显示出来

     

    存:

    // 取得活动的preferences对象.

        SharedPreferences uiState = getPreferences(0);

    // 取得编辑对象

        SharedPreferences.Editor editor = uiState.edit();

        // 添加值

        editor.putString(KEY, value);

        editor.putBoolean(KEY, value);

        editor.commit();//提交保存.

    取:

    //取得活动的preferences对象.

        SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);

        // 取得值.

        String value = settings.getString(KEY, "默认值");

    Boolean value = settings.getBoolean(KEY, false);

    存取时间:

    有了存取的方法后,我们就要想在什么时候来存取:

    protected void onPause()//系统通知暂停,可以保存设置

    public void onDestroy()//系统通知关闭,可以保存设置

    public void onCreate(Bundle savedInstanceState) //系统启动,可以打开设置

    同样还有其他状态,我们可以根据实际情况来处理

     

     

       2> files:将数据保存到文件和读文件内容.

             把数据以文件的形式记录下来

         

    l  打开文件并可操作,如果文件不存在会自动创建:

    FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);

    //操作时,在fos里写入值即可

    l  读文件:

    FileInputStream fis = openFileInput(FILE_NAME);

    l  取得当前活动创建的文件列表:

    String[] lst =fileList()

    l  删除文件:

    super.deleteFile(FILE_NAME);

     

       3>   数据库SQlite:轻量级数据库. 考虑到系统资源(内存,硬盘),是一个开源的关系型数据库,与普通关系型数据库一样,也具有ACID的特性

             

    数据库操作无非是建库、建表、增、删、改、查的一些常用功能。在Android系统中封装了一个SQLiteDatabase类,用于这些操作。

    l  建库

    创建数据库,是由SQLiteOpenHelper类自动完成,同时,创建后,会返回一个SQLiteDatabase类:

    try {

                  SQLiteOpenHelper dbHelper= new SQLiteOpenHelper(context,DBName,null,1);

                  db = dbHelper.getWritableDatabase();

           } catch (SQLiteException ex) {

                  db = dbHelper.getReadableDatabase();

           }

    其中参数DBName就是数据库的名称。getWritableDatabase(),这方法就会获取数据库对象,如果库不存在就会新建,但这里为什么还要包一层catch呢,主要考虑到,手机的资源有限,有时空间不足了,就无法再写入数据,但这里我们可以读啊,所以在catch中调用了getReadableDatabase

     

    l  建表

    _db.execSQL(create table tableName (id integer primary key autoincrement,name text not null););

    看到,这个建表其实跟我们写的SQL很类似,只是可能一些语法细节不同,具体这个就不写了,google一下会N多了。

     

    l 

    当然我们可以执行一条SQL语句来插入,我们也可以这样来:

    ContentValues newTaskValues = new ContentValues();

        // Assign values for each row.

        newTaskValues.put(KEY_TASK, value);

        newTaskValues.put(KEY_CREATION_DATE, value);

        // Insert the row.

    db.insert(DATABASE_TABLE, null, newTaskValues);

    我们可以将值依次放入一个Hash表中,然后直接存入。

     

    l 

    db.delete(tableName, "id=" + _rowIndex, null)

    输入表名,以及条件,当然,直接拼成一条标准SQL也是可以的。

     

    l 

    ContentValues newValue = new ContentValues();

        newValue.put(KEY_TASK, _task);

        db.update(DATABASE_TABLE, newValue,    KEY_ID + "=" + _rowIndex, null

           将值存于Hash表中,再直接调用

     

    l 

    Cursor result =db.query(DATABASE_TABLE,

            new String[] { KEY_ID, KEY_TASK, KEY_CREATION_DATE},

            null, 条件, null, null, null)

    这里,查询后返回的是一个游标,我们可以通过这游标来获取数据,使用方法跟java通用程序一样。

    还有更多的用法,只有边用边再搜Google

       4> network:网络数据库.Content Providers共享数据

  • 相关阅读:
    js-计算器
    正确看待HTML5的语法变化
    什么是Web前端,Web前端是做什么的?
    css复合属性的写法
    Unicode与JavaScript详解
    input 定宽,文本超出后缩小字体,尽可能多的显示文本
    手机号中间四位加*号
    React 状态和生命周期
    还是数组 练习题 而已
    数组 练习题 而已
  • 原文地址:https://www.cnblogs.com/csj007523/p/2051951.html
Copyright © 2020-2023  润新知