Android学习笔记―第八章 数据存储

第八章 数据存储

  1. 数据存储方式

    Internal Storage 内部存储

    External Storage 外部存储

    SQLite DataBase 数据库存储

    Http 网络存储

  2. Shared Prefrences 参数共享

    存储位置:data/data/包名/shared_prefs/MainAcitivy.xml

    格式:xml

    保存数据:

    //获取Shared Prefrences类型对象

    SharedPrefrences sp = getSharedPrefrences("xxx",0);

    或者

    SharedPrefrences sp = getPrefrences(0);

    //获取Edit类型的对象

    Edit edit = sp.edit();

    //写入数据

    edit.putString("name","小明");

    edit.putBoolean("isTrue","true");

    //提交数据(必须要有)

    edit.commit();



    提取数据

    //获取SharedPrefrences类型对象

    SharedPrefrences sp = getSharedPrefrences("xxx",0);

    或者

    SharedPrefrences sp = getPrefrences(0);

    //根据存入的key值取出相应的数据

    String name = sp.getString("name",小红);

    boolean b = sp.getBoolean("isTrue",false);

  3. Internal Storage 内部存储

    存储位置:data/data/包名/files/xxx.xxx

    格式:自定义

    保存数据:

    FileOutputStream fos = openFileOutput("aaa",0);

    String str = "数据存储";

    fos.write(str.getBytes());

     

    读取数据

    FileInputStream fis = openFileInput("aaa");

    ByteArrayBuffer arrayBuffer = new ByteArrayBuffer(100);

    byte[] b = new byte[1024];

    int len = 0;

    while(-1!=(len=fis.read(b))){

        arrayBuffer.append(b,0,len);

    }

    String str = new String(arrayBuffer.toByteArray());

  4. External Storage 外部存储

    存储位置:mnt/sdcard

    读取权限:

    (1)sdcard路径:

    Environment.getExternalStorageDirectory().getAbsolutePath();

    (2)判断sdcard是否可用:

    Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());

  5. SQLite DataBase 数据库存储

    Android平台集成小型数据库SQLite

    特点:跨平台、免费、轻量级、多线程

    SQL语句:

    与表相关:

    a. 建表:CREATE TABLE 表名 (id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))

    b. 删表:DROP TABLE 表名

    c. 改表:ALERT TABLE 表名 ADD age INTEGER

    与数据相关:增、删、改、查

    a. 增加数据:INSERT INTO 表名 (字段名) VALUES (值)

    b. 删除数据:DELETE FROM 表名 WHERE 条件

    c. 修改数据:UPDATE 表名 SET 字段名=值 WHERE 条件

    d. 查询数据:SELECT * FROM 表名 WHERE 条件 GROUP BY 分组 ORDER BY 排序

    创建SQLite数据库的步骤:

    a. 创建一个辅助类继承SQLiteOpenHelper

    b. 在辅助类的onCreate()方法中,添加创建表的语句,执行该语句

    String str = "CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),age INTEGER, phone VARCHAR(20))";

    db.execSQL(str);

    c. 在Activity中,先创建辅助类对象,再用辅助类对象调用getReadableDatabase()或者getWriteableDataBase()创建数据库对象

    备注:当数据库和表都已经存在时,onCreate()方法不会再调用

          当version发生变化时,会调用onUpgrade()方法

    SQL语句实例:

    (1)增

    String str = "INSERT INTO student (name,phone) VALUES (?,?)";

    mDB.execSQL(str,new String[]{"小明","1111"});

    (2)删

    String str = "DELETE FROM student WHERE name = ?";

    mDB.execSQL(str,new String[]{"小明"});

    (3)改

    String str = "UPDATE student SET name = ?,phone = ? WHERE id = ?";

    mDB.execSQL(str,new String[]{"小红","2222","1"});

    (4)查

    String str = "SELECT * FROM student";

    Cursor cursor = mDB.rawQuery(str,null);

    while(cursor.moveToNext()){

        //获取各字段值的索引

        int idIndex = cursor.getColumnIndex("id");

        int nameIndex = cursor.getColumnIndex("name");

        int phoneIndex = cursor.getColumnIndex("phone");

        //根据索引取出数据

        String id = cursor.getString(idIndex);

        String name = cursor.getString(nameIndex);

        String phone = cursor.getString(phoneIndex);

    }

    ORM 对象关系映射

    (1)增

    ContentValues values = new ContentsValues();

    values.put("name","小白");

    values.put("phone","12356");

    mDB.insert("student", //表名

                null;//规避插入错误

                values);//插入的值

    (2)删

    mDB.delete("student",//表名

                "name=?",条件语句

                new String[]{"小白"});占位符的填充

    (3)改

    ContentValues values = new ContentValues();

    values.put("phone","45621");

    mDB.update("student",//表名

                values,//将要修改的值

                "name=?",条件语句

                 new String[]{"小白"});//占位符填充

    (4)查

    Cursor cursor = mDB.query("student",//表名

                               null,//查询的字段

                               null,//查询条件

                               null,//条件语句占位符的填充

                               null,//分组语句

                               null,//分组语句占位符的填充

                               null);//排序语句

    while(cursor.moveToNext()){

        //获取字段索引

        int nameIndex = cursor.getColumnIndex("name");

        //根据索引取出数据

        String name = cursor.getString(nameIndex);

    }

  6. CursorAdapter游标适配器

    注意:必须含有_id

    // 将布局xml文件转换成布局对象

      @Override

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

       View inflate = getLayoutInflater().inflate(R.layout.list_item, null);

       return inflate;

      }

      // 设置数据显示

      @Override

      public void bindView(View view, Context context, Cursor cursor) {

       TextView textView1 = (TextView) view.findViewById(R.id.textView1);

       TextView textView2 = (TextView) view.findViewById(R.id.textView2);

       // 获取数据

       String name = cursor.getString(cursor.getColumnIndex("name"));

       String phone = cursor.getString(cursor.getColumnIndex("phone"));

       // 设置属性值

       textView1.setText(name);

       textView2.setText(phone);

      }

    更新数据

      // 重新查询,得到一个新的cursor对象

      Cursor cursor = mDB.query("student", null, null, null, null, null, null);

      // 将最新的cursor对象设置到适配器中

      mAdapter.changeCursor(cursor);

      // 刷新显示

      mAdapter.notifyDataSetChanged();

你可能感兴趣的:(数据库,android,数据存储)