当前位置:   article > 正文

【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式_sqlite数据库用什么打开

sqlite数据库用什么打开

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53234396
本文出自【DylanAndroid的博客】


【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式

在上一篇 【玩转SQLite系列】(一)初识SQLite,重拾sql语句 中已经简单了解了下SQLite,不了解的可以去看一下。
我们发现,在Android中使用SQLite数据库的时候,创建和打开数据库的时候不止继承SQLiteOpenHelper
这一种方式。目前我至少发现了三种方式:

1.自定义一个类继承SQLiteOpenHelper;

2.使用Context.openOrCreateDatabase();

3.SQLiteDatabase.openOrCreateDatabase();

那么这三种方式到底有什么不同?

第一种方式:继承SQLiteOpenHelper打开或创建数据库

特点:可以在升级数据库版本的时候在回调函数里面做相应的操作

  • 1.创建MySQLiteOpenHelper类
package cn.bluemobi.dylan.sqlite;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.util.logging.Logger;

/**
 * Android操作使用SQLite的帮助类
 * Created by dylan on 2016-11-19.
 */

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    private final String TAG = "MySQLiteOpenHelper";

    /**
     * 构造函数
     * 一般用于在这里创建数据库,指定表名和版本号等
     *
     * @param context 上下文对象
     * @param name    数据库名称
     * @param factory 游标工程
     * @param version 数据版本号 >=1
     */
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        Log.d(TAG, "MySQLiteOpenHelper");
    }

    /**
     * 创建数据库时调用
     * <p>
     * 一般用于在创建数据表
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "onCreate");
    }

    /**
     * 数据库升级更新时调用
     *
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "onUpgrade");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 2.创建数据库
   /**
     * 第一种方式:继承SQLiteOpenHelper打开或创建数据库
     * 特点:可以在升级数据库版本的时候在回调函数里面做相应的操作
     *
     * @param v
     */
    public void sQLiteOpenHelper(View v) {
        /**指定数据库的表名为info.db,版本号为1**/
        MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(this, Contacts.DATABASE_NAME, null, Contacts.DATABASE_VERSION);
        /**得到一个可写的数据库SQLiteDatabase对象**/
        SQLiteDatabase sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();
        /**查看改对象做添加的数据库**/
        showDataBase(sqLiteDatabase);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 3.查看数据库文件是否创建成功

由于我用的是真机测试,而且没有Root,所以暂时采用这种方式去查看数据库文件是否创建成功

       /**
        * 查看手机中由SQLiteDatabase创建的的数据库文件
        */
       public void showDataBase(SQLiteDatabase sqLiteDatabase) {
           List<Pair<String, String>> ll = sqLiteDatabase.getAttachedDbs();
           for (int i = 0; i < ll.size(); i++) {
               Pair<String, String> p = ll.get(i);
               Log.d(Contacts.TAG, p.first + "=" + p.second);
           }
       }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 4.打印结果

    11-19 20:58:51.845 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info.db

可以看出info.db数据库文件已经成功创建。

第二种方式:Context.openOrCreateDatabase打开或创建数据库

特点:可以指定数据库文件的操作模式

  • 实现代码
    /**
     * 第二种方式:Context.openOrCreateDatabase打开或创建数据库
     * 特点:可以指定数据库文件的操作模式
     *
     * @param v
     */
    public void context(View v) {
        /**指定数据库的名称为info2.db,并指定数据文件的操作模式为MODE_PRIVATE**/
        SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase(Contacts.DATABASE_NAME2, MODE_PRIVATE, null);
        /**查看改对象所创建的数据库**/
        showDataBase(sqLiteDatabase);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 查看数据库文件是否创建成功

    11-19 21:08:30.732 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info2.db

第三种方式:SQLiteDatabase.openOrCreateDatabase打开或创建数据库

特点:可以指定数据库文件的路径

  • 实现代码
    /**
     * 第三种方式:SQLiteDatabase.openOrCreateDatabase打开或创建数据库
     * 特点:可以指定数据库文件的路径
     *
     * @param v
     */
    public void sQLiteDatabase(View v) {
        File dataBaseFile = new File(Environment.getExternalStorageDirectory() + "/sqlite", Contacts.DATABASE_NAME3);
        if (!dataBaseFile.getParentFile().exists()) {
            dataBaseFile.mkdirs();
        }
        SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);
        showDataBase(sqLiteDatabase);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 查看数据库文件是否创建成功

    11-19 21:09:32.767 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/storage/emulated/0/sqlite/info3.db

最后我们通过查阅源码发现,其实继承SQLiteOpenHelper和Context.openOrCreateDatabase最后都是会调用SQLiteDatabase.openOrCreateDatabase去实现对数据库的操作。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号