2019独角兽企业重金招聘Python工程师标准>>>

Android基础_数据存储

  1. Android数据存储的几种形式

    1. 继承SQLiteOpenHelper

      public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {private static final String TAG = "NoteSQLiteOpenHelper";/**     * context 上下文 name 数据库的名称 cursorfactory
    2.  游标工厂 一般设置null 默认游标工厂 version 数据库的版本     * 版本号从1开始的     *      * @param context     */public NoteSQLiteOpenHelper(Context context) {super(context, "note.db", null, 1);}/**     * oncreate 方法 会在数据库第一创建的时候的是被调用 适合做数据库表结构的初始化     */@Overridepublic void onCreate(SQLiteDatabase db) {Log.i(TAG, "oncreate 方法被调用了...");db.execSQL("create table account (id integer primary key autoincrement , name  varchar(20), money varchar(20) )");}@Overridepublic void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {Log.i(TAG,"onupdate 方法被调用了 ,在这个方法里面做更新数据库表结构的操作");db.execSQL("DROP TABLE IF EXISTS " + account);this.onCreate(db);}}
      public class NoteDao {// 因为 任何一个操作都是需要 得到 NoteSQLiteOpenHelper helper// 把他放在构造方法里面初始化private NoteSQLiteOpenHelper helper;public NoteDao(Context context) {helper = new NoteSQLiteOpenHelper(context);}/**     * 添加一条账目信息 到数据库     *      * @param name     *            花销的名称     * @param money     *            金额     */public void add(String name, float money) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("insert into account (name,money) values (?,?)",new Object[] { name, money });// 记住 关闭.db.close();}public void delete(int id) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("delete from account where id=?", new Object[] { id });db.close();}public void update(int id, float newmoney) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("update account set money =? where id=?", new Object[] {newmoney, id });db.close();}/**     * 返回数据库所有的条目     *      * @return     */public List<NoteBean> findAll() {// 得到可读的数据库SQLiteDatabase db = helper.getReadableDatabase();List<NoteBean> noteBeans = new ArrayList<NoteBean>();// 获取到数据库查询的结果游标Cursor cursor = db.rawQuery("select id,money,name from account ", null);while (cursor.moveToNext()) {int id = cursor.getInt(cursor.getColumnIndex("id"));String name = cursor.getString(cursor.getColumnIndex("name"));float money = cursor.getFloat(cursor.getColumnIndex("money"));NoteBean bean = new NoteBean(id, money, name);noteBeans.add(bean);bean = null;}db.close();return noteBeans;}/**     * 模拟一个转账的操作. 使用数据库的事务     *      * @throws Exception     */public void testTransaction() throws Exception {// 得到可写的数据库SQLiteDatabase db = helper.getWritableDatabase();db.beginTransaction(); // 开始事务try {db.execSQL("update account set money = money - 5 where id=? ",new String[] { "2" });db.execSQL("update account set money = money + 5 where id=? ",new String[] { "3" });db.setTransactionSuccessful();} catch (Exception e) {// TODO: handle exception} finally {db.endTransaction();//关闭事务.db.close();}}}
      public class NoteDao2 {private NoteSQLiteOpenHelper helper;public NoteDao2(Context context) {helper = new NoteSQLiteOpenHelper(context);}/**     * 添加一条账目信息 到数据库     *      * @param name     *            花销的名称     * @param money     *            金额     *      * @return true 插入成功 false 失败     */public boolean add(String name, float money) {SQLiteDatabase db = helper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name", name);values.put("money", money);long rawid = db.insert("account", null, values);db.close();if (rawid > 0) {return true;} else {return false;}}public boolean delete(int id) {SQLiteDatabase db = helper.getWritableDatabase();int result = db.delete("account", "id=?", new String[] { id + "" });db.close();if (result > 0) {return true;} else {return false;}}public boolean update(int id, float newmoney) {SQLiteDatabase db = helper.getWritableDatabase();ContentValues values = new ContentValues();values.put("id", id);values.put("money", newmoney);int result = db.update("account", values, "id=?", new String[] { id+ "" });db.close();if (result > 0) {return true;} else {return false;}}/**     * 返回数据库所有的条目     *      * @return     */public List<NoteBean> findAll() {// 得到可读的数据库SQLiteDatabase db = helper.getReadableDatabase();List<NoteBean> noteBeans = new ArrayList<NoteBean>();Cursor cursor = db.query("account", new String[] { "id", "name","money" }, null, null, null, null, null);while (cursor.moveToNext()) {int id = cursor.getInt(cursor.getColumnIndex("id"));String name = cursor.getString(cursor.getColumnIndex("name"));float money = cursor.getFloat(cursor.getColumnIndex("money"));NoteBean bean = new NoteBean(id, money, name);noteBeans.add(bean);bean = null;}db.close();return noteBeans;}}
    3. 获取

      Internal Storage, Store private data on the device memory.(内部存储卡)
      通过

      mContext.getFilesDir()

来得到data/data/包名/File目录

  1. External Storage,Store public data on the shared external storage.(外部存储卡)

    1. TextView tv = (TextView) findViewById(R.id.tv_sdsize);
      File path = Environment.getExternalStorageDirectory();
      StatFs stat = new StatFs(path.getPath());
      long blockSize = stat.getBlockSize();
      long availableBlocks = stat.getAvailableBlocks();
      long sizeAvailSize = blockSize * availableBlocks;
      String str = Formatter.formatFileSize(this, sizeAvailSize);
      tv.setText(str);

SharedPreferences

Store private primitive data in key-value pairs.
会在data/data/包名/shared_prefes里面去创建相应的xml文件,根节点是Map,其实内部就是将数据保存到Map集合中,然后将该集合中的数据写到xml文件中进行保存。

  1. //获取系统的一个sharedpreference文件

    名字叫 sp

    1. SharedPreferences sp = context.getSharedPreferences("sp", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
      //创建一个编辑器 可以编辑 sp
      Editor editor = sp.edit();
      editor.putString("name", name);
      editor.putString("password", password);
      editor.putBoolean("boolean", false);
      editor.putInt("int", 8888);
      editor.putFloat("float",3.14159f);
      //注意:调用 commit 提交 数据到文件.
      editor.commit();
      //editor.clear();

SQLiteDatabase

Store structured data in a private database. Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型,例如一个字段声明为Integer类 型,我们也可以将一个字符串存入,一个字段声明为布尔型,我们也可以存入浮点数。除非是主键被定义为Integer,这时只能存储64位整数创建数据库的 表时可以不指定数据类型,例如:

CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))
CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name)

SQLite支持大部分标准SQL语句,增删改查语句都是通用的,分页查询语句和MySQL相同
SELECT * FROM person LIMIT 20 OFFSET 10
SELECT * FROM person LIMIT 10,20
select * from reading_history order by _id desc limit 3, 4;
delete from test where _id in (select _id from test ORDER BY _id DESC limit 3, 20)

Network
Store data on the web with your own network server.

清除缓存&清除数据
清除数据会清除/data/data/包名中的所有文件

getCacheDir()  /data/data/<当前应用程序包名>/cache/,清除缓存的时候会清除该目录中的内容

转载于:https://my.oschina.net/wangxnn/blog/348097

Android基础_数据存储相关推荐

  1. Android基础之数据存储(SharedPreference)

    Android数据持久化是说在断电后数据不会丢失,而根据存储位置和实现方式一般有3种方式,这里说sharedpreferences: 一,sharedpreferences存储 该种方式是在应用独有目 ...

  2. android(9)_数据存储和访问3_scard基本介绍

    使用Activity的openFileOutput()保存文件的方法,文件存储在手机空间,通常情况下,手机的存储空间不是很大,存储小文件确定.假设你要存储大文件,如视频,是不可行. 对于这样大的文件, ...

  3. android界面数据存储,Android应用开发基础之数据存储和界面展现(二)

    Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...

  4. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  5. Android基础——JSON数据的全方位解析

    Android基础--JSON数据的全方位解析 本篇文章包括以下内容: JSON是什么 JSONObject的解析和存储 JSONObject的解析和存储(抽象) JSONArray的解析和存储 模拟 ...

  6. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  7. 我的全栈之路-C语言基础之数据存储

    我的全栈之路-C语言基础之数据存储 我的全栈之路 2.1 计算机的计算单位 2.1.1 容量单位 2.1.2 速度单位 2.2 计算机底层为什么只能识别二进制 2.3 进制 2.3.1 进制概述 2. ...

  8. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  9. Android中的数据存储

    Android中的数据存储 1.SharedPreference存储(共享参数) 1.1.使用SharedPreferences存储和读取数据的步骤 存储数据 保存数据一般分为四个步骤: 使用Acti ...

最新文章

  1. 当定时任务遇上随机数
  2. 删库跑路大神的一生:曾在家造炸弹被捕,现卖房押宝NFT,原是开源创业之星...
  3. 深入理解CPU的调度原理
  4. linux的安装组和管理组的区别吗,Linux用户和组管理
  5. PYTHON__关于Socket中的Select使用理解
  6. BZOJ3064 CPU监控
  7. 数据分析/数据挖掘/机器学习---- 必读书目
  8. Java反编译工具JAD安装与基本使用
  9. 爬取豆瓣电影分类排行榜
  10. jsp+css实现图片自动轮换
  11. 论初唐诗人的历史地位-上官仪、王勃、杨炯、陈子昂、杜审言
  12. 【泰国留学那些事】水灯节--泰国人极致浪漫的艺术画像
  13. jeecgboot 查询_124.JSuperQuery高级查询组件 - JeecgBoot 开发文档
  14. 阿里云弹性云桌面安装失败问题解决记录(.net framework 4.6.2 or later:Error Code: 12029)
  15. SQLAlchemy中的Django风格的数据库路由器
  16. 教你解决问题:mac电脑卸载双系统中Boot camp助理出现“启动磁盘不能被分区或恢复成单个分区”
  17. msr和esp分区有什么用
  18. 通达信板块监控指标_通达信板块监测指标公式
  19. SAP MM 物料主数据-物料版次-基础应用
  20. c++ vector 一部分_巴博斯制定奔驰C级(W204)全套改装方案,运动范er十足

热门文章

  1. Kubernetes网络方案Flannel的学习笔记
  2. MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
  3. Codeforces Round #484 (Div. 2) A. Row
  4. django时差8个小时问题
  5. httprunner框架学习总结
  6. CMPP3.0 长短信实现方案
  7. 大道至简第7,8章读后感
  8. mysql触发器的简单写法
  9. JspWriter与PrintWriter的关系
  10. hbase-site.xml 和 hbase-default.xml