在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 内存数据库相关推荐

  1. android数据库降级_Android SQLite (二.数据库创建,升级及降级)

    上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...

  2. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  3. Android 数据库 SQLite

    首先关于SQLite的介绍百度上看看就大致了解的差不多了. Android 操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库. 废话不多说直接 ...

  4. android room 主线程,Android Jetpack之Room篇

    Room系列专题 引用 12345678910 // Room componentsimplementation "androidx.room:room-runtime:2.2.0-rc01 ...

  5. 百度App Android启动性能优化-工具篇

    一.前言 启动性能是APP的极为重要的一环,启动阶段出现卡顿.黑屏问题,会影响用户体验,导致用户流失.百度APP在一些比较低端的机器上也有类似启动性能问题,为保留存,需要对启动流程做深入优化.现有的性 ...

  6. Android——AndroidX

    Android Jetpack具体介绍什么的参照官网.小白就不说了. 1.创新Android应用,选择Activity & Fragment + ViewModel模版 2.ViewModel ...

  7. Android 培训课程V1.0

    各位同学,以下课程有想了解的,请联系我,本人录制了一下相关课程视频. 大概课程 Android APP架构设计...1 Android 领域驱动设计...1 Android 基于插件式设计...2 A ...

  8. Android开发权威指南(第2版)新书发布(免费下载随书光盘内容,包括Android源代码)

    光盘内容下载 光盘内容下载(新浪微盘) Android4.2.2(CM ROM)源代码下载 如果需要虚拟环境的,这里提供了ubuntu10.04 LTS版本,不需要CPU支持虚拟化(VirtualBo ...

  9. Android adb 设置和获取系统属性

    /system/build.prop 为系统属性默认值. 安卓系统属性由特殊的property_service管理, /system/build.prop是只读文件, 其中包含property_ser ...

  10. 个人中意的Github C/C++及Android App相关开源项目(★精品收藏★)

    From:https://blog.csdn.net/libaineu2004/article/details/90737299?ops_request_misc=%257B%2522request% ...

最新文章

  1. 全网唯一秃头数据集:20 万张人像,网罗各类秃头
  2. 65% 的钱被头部玩家拿走,人工智能要进入下半场?
  3. linux主辅DNS的搭配
  4. (转)所有iOS设备的屏幕分辨率
  5. Scott用户的表结构
  6. 在此之前的软件系统做开发—需求的研究框架
  7. bootstrapV4.6.0内间距、外间距(官方hack类css代码)-解读篇
  8. android 自动截图分享,Android截图和分享
  9. 京东云无线宝AX6600新品发布 预售价799元
  10. “深圳疫情防控系统”服务10万人,背后有什么开发神器
  11. java面试排序都考哪几种排序_java算法面试题:排序都有哪几种方法?
  12. 中文字符集编码unicode,gb2312,cp936,GBK,GB18030介绍
  13. pandas入门(一):pandas的安装和创建
  14. 如何将Ubuntu中的chrome浏览器升级到最新版
  15. 简单OR复杂?机器学习专家为你解密企业风险量化模型
  16. QQ收藏支持HTML,手机qq收藏夹的内容怎么复制
  17. 【漏洞学习——SQL】华图教育某分站SQL注入漏洞
  18. 【评论,赢萌宠护眼小台灯】HMS Core Insights第四期,我们来聊聊:机器学习,推开AI应用的门
  19. 发现美团的一个新锅,可能程序员背不动了
  20. Java 多线程编程 实验题

热门文章

  1. 【LeetCode】【字符串】题号:*539. 最小时间差
  2. C#中如何跨窗体传值
  3. 《深度学习Python实践》第17章——算法调参
  4. 页面置换算法(FIFO、LRU、LFU)c++实现
  5. 【数据、软件共享】年鉴,夜间灯光,土地数据(永久更新)
  6. PHP推流地址获取图片
  7. 对于 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针 的简单理解
  8. Java 线程池 ThreadPoolExecutor源码简析
  9. python强行终止程序,如何终止Python脚本
  10. Android组件化项目详细实施方案