Android 内存数据库
在android中数据库通常以文件的形式存储在磁盘中,而内存数据库是将数据驻留在内存中,因此可以作为一种缓存技术方案。 那么在android如何使用sqlite的内存数据库呢?
看SQLiteDatabase的源码:
/*** Create a memory backed SQLite database. Its contents will be destroyed* when the database is closed.** <p>Sets the locale of the database to the the system's current locale.* Call {@link #setLocale} if you would like something else.</p>** @param factory an optional factory class that is called to instantiate a* cursor when query is called* @return a SQLiteDatabase object, or null if the database can't be created*/public static SQLiteDatabase create(CursorFactory factory) {// This is a magic string with special meaning for SQLite.return openDatabase(MEMORY_DB_PATH, factory, CREATE_IF_NECESSARY);}
CREATE_IF_NECESSARY 表示:当数据库不存在时将被创建。 通过方法注释可以知道此方法可以创建内存数据库,并当数据库关闭时数据将被清除。
另外一种方法,请看SQLiteOpenHelper源码:
public synchronized SQLiteDatabase getWritableDatabase() {boolean success = false;SQLiteDatabase db = null;if (mDatabase != null) mDatabase.lock();try {mIsInitializing = true;if (mName == null) {db = SQLiteDatabase.create(null);} else {db = mContext.openOrCreateDatabase(mName, 0, mFactory, mErrorHandler);}...onOpen(db);success = true;return db;} finally {mIsInitializing = false;if (success) {if (mDatabase != null) {try { mDatabase.close(); } catch (Exception e) { }mDatabase.unlock();}mDatabase = db;} else {if (mDatabase != null) mDatabase.unlock();if (db != null) db.close();}}}
从代码中可以知道,当mName(数据库名称)为null时,将创建内存数据库。
我写了一个demo请看代码:
package dw.test;import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.provider.BaseColumns;
import android.util.Log;public final class MemoryDbTester {private static final String LOG_TAG = MemoryDbTester.class.getSimpleName();private static final String TABLE_NAME = "t_user";private SQLiteDatabase mMemoryDb;private MemoryDbTester(){mMemoryDb = createMemoryDb();}private static MemoryDbTester sDefault = new MemoryDbTester();public static MemoryDbTester getDefault(){return sDefault;}public interface Columns extends BaseColumns {public static final String UNAME = "uname";}/*** 创建内存数据库*/private SQLiteDatabase createMemoryDb(){SQLiteDatabase database = SQLiteDatabase.create(null);String t_user_sql = "CREATE TABLE "+TABLE_NAME+"(_id integer primary key autoincrement,"+Columns.UNAME+" varchar(10))";database.execSQL(t_user_sql);return database;}/*** 向内存数据库中插入一条数据*/public void testInsert() {SQLiteDatabase db = mMemoryDb;check(db);ContentValues values = new ContentValues();values.put(Columns.UNAME, "dw");db.insert(TABLE_NAME, null, values);}/*** 查询内存数据库中的数据*/public void testQuery(){SQLiteDatabase db = mMemoryDb;check(db);Cursor c = db.rawQuery("select uname from t_user", null);while(c.moveToNext()){String name = c.getString(0);Log.i(LOG_TAG, "NAME:" + name);}}@Overrideprotected void finalize() throws Throwable {releaseMemory();super.finalize();}public void releaseMemory(){SQLiteDatabase db = mMemoryDb;if(db!=null){db.close();mMemoryDb = null;}}private void check(SQLiteDatabase db) {if(db==null || !db.isOpen()){throw new IllegalStateException("memory database already closed");}}}
转载于:https://blog.51cto.com/xwteacher/1584554
Android 内存数据库相关推荐
- android数据库降级_Android SQLite (二.数据库创建,升级及降级)
上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...
- Android开发权威指南(第2版)新书发布
<Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...
- Android 数据库 SQLite
首先关于SQLite的介绍百度上看看就大致了解的差不多了. Android 操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库. 废话不多说直接 ...
- android room 主线程,Android Jetpack之Room篇
Room系列专题 引用 12345678910 // Room componentsimplementation "androidx.room:room-runtime:2.2.0-rc01 ...
- 百度App Android启动性能优化-工具篇
一.前言 启动性能是APP的极为重要的一环,启动阶段出现卡顿.黑屏问题,会影响用户体验,导致用户流失.百度APP在一些比较低端的机器上也有类似启动性能问题,为保留存,需要对启动流程做深入优化.现有的性 ...
- Android——AndroidX
Android Jetpack具体介绍什么的参照官网.小白就不说了. 1.创新Android应用,选择Activity & Fragment + ViewModel模版 2.ViewModel ...
- Android 培训课程V1.0
各位同学,以下课程有想了解的,请联系我,本人录制了一下相关课程视频. 大概课程 Android APP架构设计...1 Android 领域驱动设计...1 Android 基于插件式设计...2 A ...
- Android开发权威指南(第2版)新书发布(免费下载随书光盘内容,包括Android源代码)
光盘内容下载 光盘内容下载(新浪微盘) Android4.2.2(CM ROM)源代码下载 如果需要虚拟环境的,这里提供了ubuntu10.04 LTS版本,不需要CPU支持虚拟化(VirtualBo ...
- Android adb 设置和获取系统属性
/system/build.prop 为系统属性默认值. 安卓系统属性由特殊的property_service管理, /system/build.prop是只读文件, 其中包含property_ser ...
- 个人中意的Github C/C++及Android App相关开源项目(★精品收藏★)
From:https://blog.csdn.net/libaineu2004/article/details/90737299?ops_request_misc=%257B%2522request% ...
最新文章
- 全网唯一秃头数据集:20 万张人像,网罗各类秃头
- 65% 的钱被头部玩家拿走,人工智能要进入下半场?
- linux主辅DNS的搭配
- (转)所有iOS设备的屏幕分辨率
- Scott用户的表结构
- 在此之前的软件系统做开发—需求的研究框架
- bootstrapV4.6.0内间距、外间距(官方hack类css代码)-解读篇
- android 自动截图分享,Android截图和分享
- 京东云无线宝AX6600新品发布 预售价799元
- “深圳疫情防控系统”服务10万人,背后有什么开发神器
- java面试排序都考哪几种排序_java算法面试题:排序都有哪几种方法?
- 中文字符集编码unicode,gb2312,cp936,GBK,GB18030介绍
- pandas入门(一):pandas的安装和创建
- 如何将Ubuntu中的chrome浏览器升级到最新版
- 简单OR复杂?机器学习专家为你解密企业风险量化模型
- QQ收藏支持HTML,手机qq收藏夹的内容怎么复制
- 【漏洞学习——SQL】华图教育某分站SQL注入漏洞
- 【评论,赢萌宠护眼小台灯】HMS Core Insights第四期,我们来聊聊:机器学习,推开AI应用的门
- 发现美团的一个新锅,可能程序员背不动了
- Java 多线程编程 实验题