当我刚开始使用Android时,这对我来说是一个问题,因为网上没有很多教程描述如何正确地允许在整个应用程序中访问您的数据库(不要问我原因).这里有一些展示三种可能方法的示例代码.

方法#1:继承`Application`

如果您知道您的应用程序不会非常复杂(例如,如果您知道您最终只有一个Application类的子类),那么您可以创建Application的子类并让您的主Activity扩展它.这可确保数据库的一个实例在整个应用程序的整个生命周期中运行.

public class MainApplication extends Application {

/**

* see NotePad tutorial for an example implementation of DataDbAdapter

*/

private static DataDbAdapter mDbHelper;

/**

* create the database helper when the application is launched

*/

@Override

public void onCreate() {

mDbHelper = new DataDbAdapter(this);

mDbHelper.open();

}

/**

* close the database helper when the application terminates.

*/

@Override

public void onTerminate() {

mDbHelper.close();

mDbHelper = null;

}

public static DataDbAdapter getDatabaseHelper() {

return mDbHelper;

}

}

方法#2:让`SQLiteOpenHelper`成为静态数据成员

这不是完整的实现,但它应该让您对如何正确设计DatabaseHelper类有所了解.静态工厂方法确保任何时候只存在一个DatabaseHelper实例.

/**

* create custom DatabaseHelper class that extends SQLiteOpenHelper

*/

public class DatabaseHelper extends SQLiteOpenHelper {

private static DatabaseHelper mInstance = null;

private static final String DATABASE_NAME = "databaseName";

private static final String DATABASE_TABLE = "tableName";

private static final int DATABASE_VERSION = 1;

private Context mCxt;

public static DatabaseHelper getInstance(Context ctx) {

/**

* use the application context as suggested by CommonsWare.

* this will ensure that you dont accidentally leak an Activitys

* context (see this article for more information:

* http://developer.android.com/resources/articles/avoiding-memory-leaks.html)

*/

if (mInstance == null) {

mInstance = new DatabaseHelper(ctx.getApplicationContext());

}

return mInstance;

}

/**

* constructor should be private to prevent direct instantiation.

* make call to static factory method "getInstance()" instead.

*/

private DatabaseHelper(Context ctx) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

this.mCtx = ctx;

}

}

方法#3:使用`ContentProvider`抽象SQLite数据库

这是我建议的方法.首先,新的LoaderManager类在很大程度上依赖于ContentProviders,因此如果您希望Activity或Fragment实现LoaderManager.LoaderCallbacks< Cursor> (我建议你利用它,这很神奇!),你需要为你的应用程序实现一个ContentProvider.此外,您不必担心使用ContentProviders创建Singleton数据库帮助程序.只需从Activity中调用getContentResolver(),系统就会为您处理所有事情(换句话说,不需要设计Singleton模式来防止创建多个实例).

希望有所帮助!

android 数据库实例,android – 数据库全局实例相关推荐

  1. Android 完整地操作数据库--日记本实例

    在上一个例子中,我们对Android系统自带的SQLite数据库进行了初步的学习,了解了一些增.删.改.查的基本工作.在这一节的例子当中,我们做了一个非常简便的日记本程序,虽然没有完善,但是已经是基本 ...

  2. 数据库名、数据库实例、全局数据库名、服务名、SID等的区别

    [转载] http://www.cnblogs.com/rootq/articles/1235647.html 数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概 ...

  3. oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...

    菜鸟雷区 在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来 数据库域名 数据库名 全局数据库名 SID 数据库实例名 ...

  4. Android客户端开发—开源数据库框架LitePal

    LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置.(它将 ...

  5. Android中关于SQLite数据库的一些知识

    使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本 ...

  6. android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法

    SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大 ...

  7. android开发中的数据库SQLite的使用

    其实学习android很久了,关于数据存储,之前学习的时候也一同学习过,编程这些东西很久没用都忘得差不多了,最近做个项目要用到,所以又学习了一遍. android中关于数据的存储有好几种,这次主要是S ...

  8. Android数据存储——SQLite数据库(模板)

    本篇整合Android使用数据库,要保存一个实体类的样本. 首先看一下数据库语句: ORM:关系对象映射 添加数据: ContentValues values = new ContentValues( ...

  9. xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作

    一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...

  10. 基于sqlite的android数据库编程,Android编程之SQLite数据库操作方法详解

    Android编程之SQLite数据库操作方法详解 发布时间:2020-09-07 12:33:04 来源:脚本之家 阅读:85 作者:低调小一 本文实例讲述了Android SQLite数据库操作方 ...

最新文章

  1. 以太网帧最小字节数以及以太网碰撞
  2. 浅谈ASP.NET的内部机制(一)
  3. 使用 flex 实现 5 种常用布局
  4. MyBatis 源码解读-会话创建过程
  5. Java 基于 TCP/IP 实现 Socket中的多客户端通信
  6. laravel graphql php,结合 Laravel 初步学习 GraphQL
  7. 音频光端机简单故障处理
  8. mysql qcow2_qcow2文件格式分析
  9. vue-touch不能上下滑动的问题【解决】
  10. SQL Server 2012 完全安装
  11. 【转】图的割点、桥与双连通分支
  12. 纯js制作的XML在线编辑器(支持修改本地文件)
  13. 里氏替换原则-正方形是长方形
  14. log4j2的异步使用及添加自定义参数
  15. 公有云、私有云、私有化_私有云与公共云的评估
  16. 四级词汇pdf_这或许是史上最全“雅思阅读高频词汇”,赶快拿走吧~~
  17. Read timed out executing GET (读取执行GET超时)
  18. 深入学习理论:VC维(VC dimensions)
  19. linux tar exclude 多个目录,tar 过滤多个文件目录 打包
  20. 如何通过golang 连接阿里云的redis实例(golang带账号密码访问redis)

热门文章

  1. Android开发之EditText自动获取焦点自动弹出软键盘的解决办法
  2. listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法
  3. C语言家谱管理程序,课内资源 - 基于C语言实现的家谱管理系统
  4. eclipse adt for linux,Eclipse IDE,ADT对于Android SDk错误
  5. oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
  6. Java数组参考_Java数组
  7. iphone中怎么强制view重绘
  8. abap代码获取采购订单po中的抬头文本
  9. JS 中对数组按照数组中某个对象的属性值进行排序
  10. 海康存储携手英特尔发布AI企业私有云