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();

时间: 2024-07-31 14:31:17

Android学习笔记—第八章 数据存储的相关文章

iOS 学习笔记——0005(数据存储)

先发一个练手的小demo,自己写的简略通讯录,已上传至github https://github.com/liaoshaolim/addressBook 1.NSKeyedArchiver:(归档) 这里用一个添加联系人的例子来说明: 注意:归档形式保存数据,需要该对象遵守NSCoding协议,而且对应的必须提供encodeWithCoder和initWithCoder方法 因为归档是一次性的,解压也是一次性的,所以小量的ok,如果量大的话,改一个小地方就要归档或解压全部,效率会比较低 //用一

Android学习之简单的数据存储

在Android中,数据存储是开发人员不可以避免的.Android为开发者提供了很多的存储方法,在前面的博客中,已经讲述了sqlite存储数据.今天将介绍用SharedPreferences来存储数据,它可以将数据保存在应用软件的私有存储区,存储区的数据只能被写入这些数据的软件读取.SharedPreference通过键值对的方法存储数据. 1.SharedPreference存储简单数据 SharedPreference可以存放简单的String.Boolean.Int等对象. 1 <Rela

IOS学习笔记 -- Segue、数据存储、UITabBarController

一. Segue1.Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)每一个Segue对象,都有3个属性1>.唯一标识: @property (nonatomic, readonly) NSString *identifier;2>.来源控制器: @property (nonatomic, readonly) id sourceViewController;3>.目标控制器: @property (nonatomic, read

IOS 学习笔记 2015-04-09 0C-SQLite 数据存储

1 项目导入 libsqlite3.0.dylib 框架 2 在使用数据sqlite的头文件(.h)上导入 #Impourt <sqlite3.h> 3 推荐自己本地电脑下个sqlite Manager 管理软件类似的 下面上代码 // // ViewController.m // SQLiteDemo // // Created by wangtouwang on 15/4/9. // Copyright (c) 2015年 wangtouwang. All rights reserved.

Android学习笔记(6)——用SharePreference存储数据

搬运自本人技术博客:xge技术博客 原文链接:http://www.xgezhang.com/android_sharepreference.html Sharepreference是Android程序中常用的数据存储方式.其本质就是一个xml文件,用于存储少量的,一般是配置文件一类的数据,其特点是简单方便.这里简单介绍一下使用方法,还是以一个示例程序为例,这里直接上界面和代码: 界面xml文件如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Android学习笔记(十二)——使用意图传递数据的几种方式

使用意图传递数据的几种方式 点此获取完整代码 我们除了要从活动返回数据,也常常要传递数据给活动.对此我们可以使用Intent对象将这些数据传递给目标活动. 1.创建一个名为PassingData的项目,在activity_main.xml文件中添加一个Button: <Button android:id="@+id/btn_SecondActivity" android:layout_width="fill_parent" android:layout_hei

Android学习笔记(四九):通过Content Provider访问数据

在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过Content Provider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子.在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问. 读取信息 读取信息方式,在笔记(四七)中已经介绍,代码如下 private voidread(){     /* 通过managedQuery读取,第1参数表示URI, 第2参数表示所需读取的信息,第3个参数是限制条件,类似SQL

Pro Android学习笔记(十二):了解Intent(下)

解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键就是component 名字,在<intent-fliter>中声明的其他属性被忽略.对于implicit intent,则根据action,category和data来进行匹配.然而一个intent fliter中可以声明多个actions,多个categories,多个data属性,因此可以满

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri