日期:2014-05-16  浏览次数:20403 次

Android数据库的操作之存储和获取(转)

Android 数据库的操作
android平台中可以用来存储数据的方式很多,平时常用的有sharedpreference、file存储、sqlite数据库存储以用网络存储几种基本的存储方法。
下面比较详细的介绍如何实现数据的存储和获取:
轻量级的SharedPreferences存储,它是Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,使得我们可以很方便的读取和存入。这个界面有点类似J2EE平台中的简单的
登陆界面。例如手机平台中游戏或者应用程序登陆之前要输入个人的用户名和密码的数据,我们就可以用SharedPreferences来存储数据。
在我们的上海电信项目中的登录界面就用到sharedPreferences来保存数据。SharedPreferences是通过Context 类的 getSharedPreferences方法操作的。preferences储存在文件中,而文件名用来指向preferences。
getSharedPreferences(String,int)。在一个类里面实例化,就可以在其它地方共享这些数据。目前这个类不支持多进程使用。
下面的代码是怎么从prefecences中读取数据:
public static final String PREF_FILE_NAME = “PrefFile”;

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); int storedPreference = preferences.getInt(”storedInt”, 0); // use the values

其中MODE_PRIVATE 是 preferences 的操作模式,这是默认的模式,代表只有创建这个 preferences 的程序才能访问这个preferences。其他两个模式是MODE_WORLD_READABL和 MODE_WORLD_WRITEABLE: 1、MODE_WORLD_READABLE 表示其他程序对这个SharedPreferences只有只读权限。
2、MODE_WORLD_WRITEABLE则是其他程序同时拥有读写权限。
Activity Preferences:
shared preferences 可以被其他程序的组件使用。但是如果你不需要和其他组件共享 preferences,而是希望一个在activities内设一个私有的 preferences。可以用 activity 类的 getPreferences() 方法来实现。getPreference 方法用 activity 类的名字作为参数调用 getSharedPreference()。
上海电信项目中就提供了一个可以供其它程序的组件使用的SharedPreferences,以下是怎么获得SharedPreferences对象的代码:
SharedPreferences sp = this.getPreferences(Context.MODE_PRIVATE);
用 SharedPreference.Editor 往 preference 文件中保存数据。Editor 是 SharedPreference 的内部接口。
API中提供了
abstract SharedPreferences.Editor edit () 通过这个方法返回一个SharedPrefenences.Editor实例化对象
abstract SharedPreferences.Editor putBoolean (String key, boolean value)----设置boolean值存储
abstract SharedPreferences.Editor putFloat (String key, float value)----设置浮点型数据存储
abstract SharedPreferences.Editor putInt (String key, int value)----设置整形数据存储
abstract SharedPreferences.Editor putLong (String key, long value)----设置长整型 abstract SharedPreferences.Editor putString (String key, String value)---设置字符串数据存储
上海电信项目中我们是通过以下代码来保存用户登录的数据:(在LoginActivity类中)
Editor editor = sp.edit();
editor.putBoolean("ischecked", checked);// value to store
editor.putString("username", checked ? username : "");
editor.putString("password", checked ? password : "");
editor.commit();

当然我们也可以用SharedPreference.Editor 来remove和clear来删除数据。
那我们用SharedPreference保存的在android平台的哪个位置呢?SharedPreference是以xml格式自动保存的,在 DDMS中的File Explorer中展开到/data/data/<package name>/<project name>下可以找到一个XXX.xml的文件,在xml文档中保存了设置进去的值。整体效率来看不是特别的高,对于常规的轻量级而言比 SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
文件存储和传统的java文件操作一样,在android Api中提供了openFileInput和openFileOutput方法来读取设备上的文件。但是在默认状态下,文件是不能在不同的程序之间共享的,以上两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出 FileNotFoundException异常。创建的文件存放在/data/data/<package name>/files目录下。关于文件流的操作是属于J2se的基本知识,这里就不再重复了,不了解的可以看看anroid的API。特别注意一点使用openFileOutput方法创建的文件只能被其调用的应用使用,其他应用无法读取这个文件,如果需要在不同的应用中共享数据,可以使用 Content Provider实现,关于Content Provider我们将在稍后的内容中介绍。如果我们要用到的一些额外的资源文件,我们可以把这些文件放在应用程序的/raw/raw下,那么就可以在你的应用中使用getResources获取资源后,以openRawResource方法(不带后缀的资源文件名)打开这个文件。
Resources myResources = getResources();
InputStream myFile = myResources.openRawResource(R.raw.myfilename);
除了前面介绍的读写文件外,Android还提供了诸如deleteFile、fileList 等方法来操作文件,不再赘述。
Sqlite数据库存储和ContentProvider对象介绍。
Android应用的另外一个方面:数据存储。用户可以将自己的数据存储到文件系统或者数据库当中,当然最经常的是,用户将自己的数据存储到SQLite 数据库当中。SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。在我们上海电信和joyque电子书项目中sqlite数据库存储和ContentProvider对