数据存储及持久化技术

1. Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储、SharedPrefer…

1. Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储、SharedPreference存储以及数据库存储。当然,除了这三种方式之外,你还可以将数据保存在手机的SD卡中。

2. 文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。实所用到的核心技术就是Context类中提供的openFileInput()和openFileOutput()方法,之后就是利用Java的各种流来进行读写操作就可以了。TextUtils.isEmpty()方法,这是一个非常好用的方法,它可以一次性进行两种空值的判断。当传入的字符串等于null或者等于空字符串的时候,这个方法都会返回true。

3. SharedPreferences是使用键值对的方式来存储数据的。。Android中主要提供了三种方法用于得到SharedPreferences对象:

1) Context类中的getSharedPreferences()方法 :此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data/<packagename>/shared_prefs/目录下的。第二个参数用于指定操作模式,主要有两种模式可以选择,MODE_PRIVATE和MODE_MULTI_PROCESS。

2) Activity类中的getPreferences()方法:只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名。

3) PreferenceManager类中的getDefaultSharedPreferences()方法:这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

4. 向SharedPreferences文件中存储数据主要可以分为三步实现:

1) 调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。

2) 向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean方法,添加一个字符串则使用putString()方法,以此类推。

3) 调用commit()方法将添加的数据提交,从而完成数据存储操作。

5. 从SharedPreferences中读取数据:SharedPreferences对象中提供了一系列的get方法用于对存储的数据进行读取,每种get方法都对应了SharedPreferences.Editor中的一种put方法。第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值。

6. SQLite数据库存储:android提供了SQLiteOpenHelper管理数据库,是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法。getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库。execSQL方法用于执行sql语句。

1) adb是Android SDK中自带的一个调试工具,使用这个工具可以直接对连接在电脑上的手机或模拟器进行调试操作。它存放在sdk的platform-tools目录下,输入adbshell,就会进入到设备的控制台,然后使用cd命令进行到/data/data/com.example.databasetest/databases/目录下。

2) sqlite命令来打开数据库了,只需要键入sqlite3,后面加上数据库名即可。

3) 键入.table命令查看数据库中所有的表。

4) 通过.schema命令来查看它们的建表语句。

5) 键入.exit或.quit命令可以退出数据库的编辑,再键入exit命令就可以退出设备控制台。

7. onUpgrade()方法是用于对数据库进行升级的,我们在onUpgrade()方法中执行了两条DROP语句,如果发现数据库中已经存在Book表或Category表了,就将这两张表删除掉,然后再调用onCreate()方法去重新创建。这里先将已经存在的表删除掉,是因为如果在创建表时发现这张表已经存在了,就会直接报错。SQLiteOpenHelper的构造方法里接收的第四个参数,它表示当前数据库的版本号,之前我们传入的是1,现在只要传入一个比1大的数,就可以让onUpgrade()方法得到执行了。

8. 升级数据库的最佳写法:在onUpgrade()方法中添加了一个switch判断,如果用户当前数据库的版本号是1,想要升级就只会创建一张Category表;这样当用户是直接安装的第二版的程序时,就会将两张表一起创建。请注意一个非常重要的细节,switch中每一个case的最后都是没有使用break的,为什么要这么做呢?这是为了保证在跨版本升级的时候,每一次的数据库修改都能被全部执行到

9. 插入数据:SQLiteDatabase中提供了一个insert()方法,这个方法就是专门用于添加数据的。它接收三个参数,第一个参数是表名,我们希望向哪张表里添加数据,这里就传入该表的名字。第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般我们用不到这个功能,直接传入null即可。第三个参数是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据,只需要将表中的每个列名以及相应的待添加数据传入即可。

10. 更新数据:SQLiteDatabase的update()方法去执行具体的更新操作,第一个参数和insert()方法一样,也是表名,在这里指定去更新哪张表里的数据。第二个参数是ContentValues对象,要把更新数据在这里组装进去。这里使用了第三、第四个参数来指定具体更新哪几行。第三个参数对应的是SQL语句的where部分,表示去更新所有name等于?的行,而?是一个占位符,可以通过第四个参数提供的一个字符串数组为第三个参数中的每个占位符指定相应的内容。

11. 删除数据:SQLiteDatabase中提供了一个delete()方法专门用于删除数据,这个方法接收三个参数,第一个参数仍然是表名,这个已经没什么好说的了,第二、第三个参数又是用于去约束删除某一行或某几行的数据,不指定的话默认就是删除所有行。

12. 查询数据:,SQLiteDatabase中还提供了一个query()方法用于对数据进行查询。

13. 事务:Android中事务的标准用法,首先调用SQLiteDatabase的beginTransaction()方法来开启一个事务,然后在一个异常捕获的代码块中去执行具体的数据库操作,当所有的操作都完成之后,调用setTransactionSuccessful()表示事务已经执行成功了,最后在finally代码块中调用endTransaction()来结束事务。注意:事务可以嵌套,通过setTransactionSuccessful标记, 当所有操作都成功时,事务才提交,否则回滚。在此方法和endTransaction之间尽力不要有关于数据库的调用,否则,这期间出错,事务仍会提交。

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/8492.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部