【问题标题】:How does it work SQLiteOpenHelper Context它是如何工作的 SQLiteOpenHelper 上下文
【发布时间】:2012-11-09 12:34:38
【问题描述】:

我有一个包含两个活动的应用程序。

其中一个列出多个值,而另一个向数据库添加新值。

我有一个从 SQLiteOpenHelper 扩展而来的类,它管理数据库连接、查询等。

现在,我知道在 SQLiteOpenHelper 的构造函数中,您必须传递一个上下文,用于确定它是否必须创建新数据库或打开现有数据库。

但是如果我在每个活动中都有一个 SQLiteOpenHelper 类的实例,那么上下文就会不同。

有没有办法避免这种情况?

谢谢。

【问题讨论】:

    标签: android sqlite sqliteopenhelper android-context


    【解决方案1】:

    传入应用程序上下文,(.getApplication()) 而不是 Activity。这样,两个实例都将使用相同的上下文访问数据库。

    【讨论】:

      【解决方案2】:

      Context 可以不同,但​​不能创建不同的数据库。 SQLiteOpenHelper constructor 有一个 name 参数,即 DB 文件名。如果存在则无论Context 是否通过都不会创建。

      【讨论】:

      • Context是访问系统资源的接口。正如 sabadow 所说,哪个数据库是由名称决定的。
      【解决方案3】:

      实际上,创建的数据库与上下文的应用程序包相关联。所以不管你传递的是Application上下文还是Activity上下文。

      Context.java

      /**
       * Open a new private SQLiteDatabase associated with this Context's
       * application package.  Create the database file if it doesn't exist.
       ...
       ...
       */
      public abstract SQLiteDatabase openOrCreateDatabase(String name,
              int mode, CursorFactory factory);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多