Android 这是导入预制数据库并打开和关闭的正确方法吗?

Android 这是导入预制数据库并打开和关闭的正确方法吗?,android,android-sqlite,Android,Android Sqlite,好的,我在这里使用本教程创建了一个预制数据库。我一直收到关于“数据库未关闭异常”的错误。还有一些错误转到我的openDatabase。我的数据库类有什么问题吗 public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDatabase = SQLiteDataba

好的,我在这里使用本教程创建了一个预制数据库。我一直收到关于“数据库未关闭异常”的错误。还有一些错误转到我的openDatabase。我的数据库类有什么问题吗

     public void openDataBase() throws SQLException{

            //Open the database
            String myPath = DB_PATH + DB_NAME;
            myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        }

     //*Kalikot Delete pag may problema*//
        public DbHerbs openWritable()throws SQLException{
        //  ourHelper = new DbHelper(ourContext);
            myDatabase = this.getWritableDatabase();
            return this;
        }

        public DbHerbs openReadOnly()throws SQLException{
            myDatabase = this.getReadableDatabase();
            return this;
        }



     public void close() {
         if (myDatabase != null) {
          myDatabase.close();


         }
        // super.close();
        }
下面是我如何在不同片段上打开类

    private void openDb() {

    myDb = new DbHerbs(this.getActivity());
    try {

       myDb.createDataBase();

       } catch (IOException ioe) {

        throw new Error("Unable to create database");
       }

        try {

           myDb.openReadOnly();

        }catch(SQLException sqle){

         throw sqle;

         }

     private void closeDb()
      {
        myDb = new DbHerbs(this.getActivity());
        myDb.close();
       }
这就是我在日志上看到的错误。

此处不关闭数据库:

private void closeDb()
{
    myDb = new DbHerbs(this.getActivity());
    myDb.close();
}
您正在用新实例替换现有数据库实例并关闭该新实例。旧的将在其处于打开状态时被垃圾收集。所以实际上closeDb()什么都不做

为什么每次需要对数据库进行读取访问时都要尝试创建数据库实例

private void openDb() {

   myDb = new DbHerbs(this.getActivity());
   try {

      myDb.createDataBase();

   } catch (IOException ioe) {

      throw new Error("Unable to create database");
   }

   try {

       myDb.openReadOnly();

   }catch(SQLException sqle){

       throw sqle;

   }
如果您试图跨放置在“资产”文件夹中的预制数据库进行复制,建议的方法是


当您需要读取或写入数据库时,应该在SQLiteOpenHelper上调用和getWritableDatabase()。您将在android示例中找到完整的工作代码。

您忘记了创建表。它是预先制作的,表已经创建,数据库导入到资产文件夹中。这是大量代码,而且组织得不是很好。。。我在遵循简单用例的程序流程时遇到了问题。编辑:虽然现在是星期一上午9点,但我还是把它全部写了下来,只是为了确定。xD问题是我打开数据库的部分。xD不确定这是否正确。如果您要查找的是代码审阅,请在代码审阅堆栈上发布。谢谢。:)帮助很多,所以在我的主要活动开始创建时,我只需要使用open一次?并且只使用我在oncreate上创建的实例调用getReadableDatabase()和getWriteableDatabase()?