上一讲我们讲解了 Android 中SD卡的存储方式[数据存储之File文件存储 [即SD卡的写入与读取]],共享参数的存储方式[SharedPreference 共享参数],这一讲我们来讲解一下数据库的存储方式 ,SQLite数据库属于文本型的数据库,它是以文本的形式来保存的。

1. SQLite 数据库介绍

查看 Android API文档中 SQLite 的介绍
Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。
建议创建一个新的数据库的方式就是创建一个子类继承 SQLiteOpenHelper 然后重写它的 onCreate() 方法,这样你就可以在数据库中执行 SQLite的语法命令来创建表了
查看API文档中 SQLiteOpenHelper 类的介绍
这是一个帮助类,作用是管理数据库的创建和版本的管理,你可以创建一个子类来实现 onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) 方法, onOpen(SQLiteDatabase)可以选择是否要实现。这个类负责在数据库存在的情况下,打开数据库,如果它不存在则会创建数据库,并且在必要的时候更新它。事务也会被使用到,这样才能确保数据库总是在合理的状态。
查看它的方法列表: getReadableDatabase() 可以通过这个方法进行数据库的创建和打开

2. 程序实现

1) DBOpenHelper.java 用来更新或者创建数据库使用

package com.android.sqlitedemo.db;import android.content.Context;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;public class DBOpenHelper extends SQLiteOpenHelper {    /**     * 查看SQLiteOpenHelper api文档的,它的构造方法     * public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)     * 创建一个帮助类的对象来创建,打开,或者管理一个数据库,这个方法总是会快速的返回,     * 这个数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开     * 参数:     *   context : 上下文对象,用来打开或者创建数据库     *   name : 数据库文件的名称,如果是创建内存中则位null ,     *   factory : 用来创建游标对象,默认的是为null     *   version : 数据库的版本号(以版本数字号1开始),如果数据库比较旧,就会用 onUpgrade(SQLiteDatabase, int, int) 方法来更新数据库,     *             如果数据库比较新,就使用 onDowngrade(SQLiteDatabase, int, int)  方法来 回退数据库     * 【注意】 : 我们声明完这个构造方法之后,包括初始化它的名称 和 版本之后,实际上它还是没有马上被创建起来的。     */    private static String name = "mydb.db"; //表示数据库的名称    //private static int version = 1; //表示数据库的版本号    private static int version = 2; //更新数据库的版本号,此时会执行 onUpgrade()方法    public DBOpenHelper(Context context) {        super(context, name, null, version);        // TODO Auto-generated constructor stub    }    //当数据库创建的时候,是第一次被执行,完成对数据库的表的创建    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        //SQLite 数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型        //数据库这边有一个特点,就是SQLite数据库中文本类型没有过多的约束,也就是可以把布尔类型的数据存储到文本类型中,这样也是可以的        String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";        db.execSQL(sql); //完成数据库的创建     }    /**     * onUpgrade() 方法是在什么时候被执行呢?     * 查看API文档中 onUpgrade()介绍     *   当数据库需要升级时调用这个方法[在开发过程中涉及到数据库的设计存在缺陷的时候进行升级,不会损坏原来的数据],这种实现方式会使用方法来减少表,或者增加表,或者做版本更新的需求。     * 在这里就可以执行 SQLite Alter语句了,你可以使用 ALTER TABLE 来增加新的列插入到一张表中,你可以使用 ALTER TABLE 语句来重命名列或者移除列,或者重命名旧的表。     * 你也可以创建新的表然后将旧表的内容填充到新表中。     *   此方法会将事务之内的事件一起执行,如果有异常抛出,任何改变都会自动回滚操作。     *   参数:     *     db : 数据库     *     oldVersion : 旧版本数据库     *     newVersion : 新版本数据库     * 【注意】:这里的删除等操作必须要保证新的版本必须要比旧版本的版本号要大才行。[即 Version 2.0 > Version 1.0 ] 所以这边我们不需要对其进行操作。     */    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub        String sql = "alter table person add sex varchar(8)";        db.execSQL(sql);    }}
2) MainActivity.java 主程序的实现

package com.android.sqlitedemo;import com.android.sqlitedemo.db.DBOpenHelper;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initComponent();        button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                DBOpenHelper helper = new DBOpenHelper(MainActivity.this);                // 调用 getWritableDatabase()或者 getReadableDatabase()其中一个方法将数据库建立                helper.getWritableDatabase();            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    private void initComponent() {        button = (Button) findViewById(R.id.button1);    }}

3. 执行结果

1). 当数据库版本为 1 (version = 1)的时候数据库内容如下图所示

【Android 开发】:数据存储之 SQLite 数据库操作(一)_第1张图片

2). 当数据库版本为 2 (version = 2)的时候数据库进行了更新操作,执行了 onUpgrade() 方法,更新后的内容增加了一列,如下图所示

【Android 开发】:数据存储之 SQLite 数据库操作(一)_第2张图片



下一讲我们来详细讲解一些 SQLite 数据库中增删改查的操作。尽情关注


更多相关文章

  1. Android创建和使用数据库详…
  2. Android 虚化图片的方法
  3. Android数据库编程教程
  4. android完全退出程序的方法
  5. android常用方法汇总-更新中
  6. Android结束进程的方法
  7. Android 通过OKhttp3进行下载实现版本更新
  8. windows上 android 21.1版本ADT环境搭建

随机推荐

  1. Android(安卓)ViewHolder 优化 ListView
  2. Android倒计时器——CountDownTimer
  3. 关于LinearLayout布局中,子控件平分宽度
  4. Android开发遇到的问题
  5. Android(安卓)TabLayout导航条属性的设置
  6. Android(安卓)检测键盘是否显示及隐藏键
  7. Android(安卓)Studio 的 gradle 插件升级
  8. Android(安卓)调用第三方浏览器打开
  9. android-仿QQtab
  10. Android(安卓)之经典源码