浅谈Android的三种数据持久化技术之数据库存储

来源:互联网 发布:婚庆电子相册制作软件 编辑:程序博客网 时间:2024/06/05 00:40

/我挥舞着键盘和本子,发誓要把世界写个明明白白/

安卓提供了三种数据持久化技术,分别为:文件存储、SharedPreference、数据库存储。

三、数据库存储

前面所学的文件存储和SharedPreferences存储只适用于去保持一些简单的数据和键值对,当需要存储大量复杂的关系型数据时,二者就显得力不从心了。这时,该是数据库存储上马表现的时候了。

1)Android系统内置了一款轻量级的数据库SQLite,为了方便管理,专门提供了一个SQLiteOpenHelper帮助类,这个类是一个抽象类,意味着我们如果想要使用它,就需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。
2)SQLiteOpenHelper中还有两个非常重要的实例方法,getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。
3)SQLiteOpenHelper中有两个构造方法可供重写,选择参数少点的那个。这个方法接收四个参数,分别为Context、数据库名、Cursor、版本号。构建出SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了,数据库文件放在/data/data//databases/目录下。

新建MyDatabaseHelper类继承自SQLiteOpenHelper,代码如下:

package com.example.databasetest;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.widget.Toast;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK="create table Book ("  //建表语句定义成了一个字符串常量        +",in integer primary key autoincrement,"        +"author text,"        +"price real,"        +"pages integer,"        +"name text)";        private Context mContext;        public MyDatabaseHelper(Context context,String name,CursorFactory factory,int version){            super(context,name,factory,version);            mContext=context;        }        @Override        public void onCreate(SQLiteDatabase db) {            db.execSQL(CREATE_BOOK);     //调用SQLiteDatabase的execSQL()方法执行建表            Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show(); //弹出一个Toast提示Book表创建成功        }        @Override        public void onUpgrade(SQLiteDatabase db ,int oldVersion,int newVersion){} //onUpgrade()方法是用于对数据库进行升级的}

接下来修改布局文件activity_main.xml中的代码,代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button        android:id="@+id/create_database"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Create database" /></LinearLayout>

布局文件很简单,只是添加了一个按钮,用于创建数据库。

最后修改主活动MainActivity ,代码如下:

package com.example.databasetest;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);  //加载布局文件    dbHelper=new MyDatabaseHelper (this,"BookStore.db",null,1); //构建了一个MyDatabaseHelper对象,数据库名称指定为BookStore.db,版本号指定为1    Button createDatabase=(Button) findViewById(R.id.create_database);    createDatabase.setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){            dbHelper.getWritableDatabase(); //当第一次点击Create database按钮时,就会检测到当前程序中并没有BookStore.db这个数据库,于是会创建该数据库并调用MyDatabaseHelper中的onCreate()方法,这样Book表也就得到了创建。        }    });}}
0 0
原创粉丝点击