博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLiteOpenHelper
阅读量:4636 次
发布时间:2019-06-09

本文共 4243 字,大约阅读时间需要 14 分钟。

SQLiteOpenHelper正如其名,是一个用来打开数据库的辅助类

主要有如下私有成员:

private final Context mContext;private final String mName;private final CursorFactory mFactory;private final int mNewVersion;private SQLiteDatabase mDatabase;private boolean mIsInitializing;private boolean mEnableWriteAheadLogging;private final DatabaseErrorHandler mErrorHandler;

构造函数:

public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version,        DatabaseErrorHandler errorHandler) {    if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);    mContext = context;    mName = name;    mFactory = factory;    mNewVersion = version;    mErrorHandler = errorHandler;}

由此可以看出version是不能<1的

其中有两个公有方法

public SQLiteDatabase getWritableDatabase()public SQLiteDatabase getReadableDatabase()

这两个方法一般情况下返回的结果是一样的,它们都是调用了

private SQLiteDatabase getDatabaseLocked(boolean writable)

其具体实现代码:

private SQLiteDatabase getDatabaseLocked(boolean writable) {        if (mDatabase != null) {            if (!mDatabase.isOpen()) {                // Darn!  The user closed the database by calling mDatabase.close().                mDatabase = null;            } else if (!writable || !mDatabase.isReadOnly()) {                // The database is already open for business.                return mDatabase;            }        }        if (mIsInitializing) {            throw new IllegalStateException("getDatabase called recursively");        }        SQLiteDatabase db = mDatabase;        try {            mIsInitializing = true;            if (db != null) {                if (writable && db.isReadOnly()) {                    db.reopenReadWrite();                }            } else if (mName == null) {                db = SQLiteDatabase.create(null);            } else {                try {                    if (DEBUG_STRICT_READONLY && !writable) {                        final String path = mContext.getDatabasePath(mName).getPath();                        db = SQLiteDatabase.openDatabase(path, mFactory,                                SQLiteDatabase.OPEN_READONLY, mErrorHandler);                    } else {                        db = mContext.openOrCreateDatabase(mName, mEnableWriteAheadLogging ?                                Context.MODE_ENABLE_WRITE_AHEAD_LOGGING : 0,                                mFactory, mErrorHandler);                    }                } catch (SQLiteException ex) {                    if (writable) {                        throw ex;                    }                    Log.e(TAG, "Couldn't open " + mName                            + " for writing (will try read-only):", ex);                    final String path = mContext.getDatabasePath(mName).getPath();                    db = SQLiteDatabase.openDatabase(path, mFactory,                            SQLiteDatabase.OPEN_READONLY, mErrorHandler);                }            }            onConfigure(db);            final int version = db.getVersion();            if (version != mNewVersion) {                if (db.isReadOnly()) {                    throw new SQLiteException("Can't upgrade read-only database from version " +                            db.getVersion() + " to " + mNewVersion + ": " + mName);                }                db.beginTransaction();                try {                    if (version == 0) {                        onCreate(db);                    } else {                        if (version > mNewVersion) {                            onDowngrade(db, version, mNewVersion);                        } else {                            onUpgrade(db, version, mNewVersion);                        }                    }                    db.setVersion(mNewVersion);                    db.setTransactionSuccessful();                } finally {                    db.endTransaction();                }            }            onOpen(db);            if (db.isReadOnly()) {                Log.w(TAG, "Opened " + mName + " in read-only mode");            }            mDatabase = db;            return db;        } finally {            mIsInitializing = false;            if (db != null && db != mDatabase) {                db.close();            }        }    }

 

转载于:https://www.cnblogs.com/keai4le/p/5413248.html

你可能感兴趣的文章
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
Excel的数据分析—排位与百分比
查看>>
讯飞语音识别Android-Demo
查看>>
引入css的四种方式
查看>>
Mysql蠕虫复制
查看>>
centos7+ansible自动化工具使用
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
正则替换
查看>>
jsp 环境配置记录
查看>>
本地视频播放黑屏,有声音
查看>>
Python3-Cookbook总结 - 第一章:数据结构和算法
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Android初学第36天
查看>>
Some configure
查看>>
.net core 中的[FromBody]
查看>>
json_encode时中文编码转正常状态
查看>>