美文网首页
小知识点(二)android的数据存储与mysql

小知识点(二)android的数据存储与mysql

作者: 胖胖O蓝胖子 | 来源:发表于2018-10-11 16:16 被阅读0次

    Android存储分为三类:学习笔记| AS入门(七) 数据存储篇 - 简书

    一.文件存储

    在Android中写入和读取文件的方法,Context类中提供了openFileInput()和openFileOutput()方法来打开数据文件里的文件IO流。openFileOutput的文件操作模式,可以为五种之一。

    二.sp存储

    SharePreferences是一种轻型的数据存储方式,常用来存储一些简单的配置信息,如int、string、boolean、float和long。它的本质是基于XML文件存储key-value键值对数据

    使用步骤:

    (1)调用getSharedPreferences()方法获得SharedPreferences对象,提供两个参数,指定文件名和操作模式。

    (2)调用SharedPreference对象的edit()方法获得SharedPreferences.Editor引用对象

    (3)调用Edit接口的形如put某某某()方法以键值对形式保存某某某类型的数据

    (4)调用Edit接口的commit()方法提交键值对。

    三.sqlite数据可存储

    SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,在存储大量复杂的关系型数据的时可以使用。

    创建:第一步:自定义帮助类并继承SQLiteOpenHelper,并重写两个方法:onCreate()和 onUpgrade(),分别在这两个方法中去实现创建、升级数据库的逻辑。

    第二步:实例化帮助类.

    第三步:用帮助类对象的getReadableDatabase() 和getWritableDatabase()去创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库SQLiteDatabase

    第四步:进行增删改查操作:

    增加操作insert(),三个参数含义(被操作的表名,空值字段的名称,数据即ContentValues对象),第二个参数一般传入null。

    删除操作delete(),第一个参数还是表示表名,第二第三个参数用于约束删除某一行或几行的数据。

    更新操作update() 方法提供四个参数,(表名,ContentValues对象,约束,约束)。

    查询操作quary()需要至少七个参数(table, columns, selection, selectionArgs, groupBy, having, orderBy),含义是:(表名,要查询出的列名,查询条件子句,对应于selection语句中占位符的值,要分组的列名,分组后过滤条件,排序方式)。

    数据库升级操作:MyHelper里需要重写的第二个方法onUpdate()用于帮助数据库进行版本更新。比如此刻需要在数据库再添加一张表course,只要在update()写好创建course的操作,然后想办法让它被调用就好了。还记得在实例化帮助类是需要传入的第四个参数版本号吗?之前的传入的是1,只要传入一个比1大的数就可以让update()执行了。

    SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型、限定符等等。 

           改变表名 - ALTER TABLE 旧表名 RENAME TO 新表名 

           增加一列 - ALTER TABLE 表名 ADD COLUMN 列名 数据类型 

    保证sqlit的原子性,处理高并发问题

    使用Atomic Integer为android自带的自增长类和同步 synchronized来保证:

    public class DatabaseManager{

        private AtomicInteger mOpenCounter = new AtomicInteger();

        private static DatabaseManager instance;

        private static SQLiteOpenHelper mDatabaseHelper;

        private SQLiteDatabase mDatabase;

        public static synchronized void initializeInstance(SQLiteOpenHelper helper) {

            if (instance == null) {

                instance = new DatabaseManager();

                mDatabaseHelper = helper;

            }

        }

        public static synchronized DatabaseManager getInstance() {

            if (instance == null) {

                throw new IllegalStateException(DatabaseManager.class.getSimpleName() +

                        " is not initialized, call initializeInstance(..) method first.");

            }

            return instance;

        }

        public synchronized SQLiteDatabase openDatabase() {

            if(mOpenCounter.incrementAndGet() == 1) {

                // Opening new database

                mDatabase = mDatabaseHelper.getWritableDatabase();

            }

            return mDatabase;

        }

        public synchronized void closeDatabase() {

            if(mOpenCounter.decrementAndGet() == 0) {

                // Closing database

                mDatabase.close();

            }

        }

    }

    未完待续..............

    相关文章

      网友评论

          本文标题:小知识点(二)android的数据存储与mysql

          本文链接:https://www.haomeiwen.com/subject/borbaftx.html