Android 附加数据库“提供”;“数据库已在使用中”;安卓上

Android 附加数据库“提供”;“数据库已在使用中”;安卓上,android,database,sqlite,Android,Database,Sqlite,在iOS和android上的本机应用程序项目中,我们在android上遇到了sqlite3的问题。我们希望打开两个数据库,并通过(sql命令)将一个数据库连接到第二个数据库 我们的工作: 打开sqlite3数据库“user.db”(android上的最终本机文件路径 设备是“/data/user/0/com.company.app/databases/user.db”,我们使用的是安卓.database.sqlite.SQLiteDatabase) 打开sqlite3数据库“system.db”

在iOS和android上的本机应用程序项目中,我们在android上遇到了sqlite3的问题。我们希望打开两个数据库,并通过(sql命令)将一个数据库连接到第二个数据库

我们的工作:
  • 打开sqlite3数据库“user.db”(android上的最终本机文件路径 设备是“/data/user/0/com.company.app/databases/user.db”,我们使用的是安卓.database.sqlite.SQLiteDatabase

  • 打开sqlite3数据库“system.db”

  • 将用户数据库连接到系统数据库:

  • 在system.db-database的SQLiteDatabase实例上,我们执行

    ATTACH DATABASE '/data/user/0/com.company.app/databases/user.db' AS dbUser
    
    结果: 这会产生以下错误:

    数据库dbUser已在使用中(代码1)

    sqlite3 for iOS上的同一sql语句工作正常,没有任何错误

    为了完整起见。使用以下语句打开数据库:

    import android.database.sqlite.SQLiteDatabase;
    
    SQLiteDatabase mydb = SQLiteDatabase.openDatabase(dbfile.getAbsolutePath(), null, openFlags);
    
    向谷歌询问此类错误消息会让很多网站声明,不允许使用临时数据库作为数据库别名。因为我们使用“dbUser”而不是TEMP,所以应该还有另一个原因。我们现在还不知道


    有人能帮忙吗?

    没有太多参与,不是吗“附加在打开数据库之前执行的操作。我一直在使用常规的SQLExpress版本,我相信我无法在打开时附加或分离。iOS和android上的连接处理方式可能会有所不同,这可能会导致一个问题

    您不需要打开要连接的数据库;ATTACH语句已将其打开

    无论如何,“数据库xxx已在使用”错误表示某些数据库已附加该特定名称


    代码的问题是执行了两次。

    当attach命令执行多次时,这种情况经常发生, 可以使用“分离”命令

    DETACH DATABASE 'database_name';
    
    然后再次附加数据库或使用新名称附加,如:

    ATTACH DATABASE file_name AS new_database_name;
    

    请记住,当使用新名称附加时,与数据库的其他连接仍处于打开状态。

    事实上,文档中没有提到有关此主题的任何内容。几个月前,我们在android上实现了这一功能。这个错误现在对我们来说是全新的。后来的一些小版本。,。。。