在Android中使用PrePopulated SQlite数据库

时间:2019-05-20 15:35:35

标签: android sqlite react-native

我尝试使用android应用程序的react-native打开Sqlite数据库,但无法使用存储在项目资产目录中的预填充数据库打开。

我从openDataBase代码中删除了位置,并从源数据库中创建了createfromLocation databae,它是在android设备中创建的,没有模式和数据将为空。我可以从代码中填充数据,但这没有任何意义。那么我可能犯的错误是什么?我在这里错过了什么吗?

代码(App.js文件):

 const db = SQLite.openDatabase(
      {
        name: 'Recipe.db',
        location: 'default',
        createFromLocation: '~Recipe.db',
      }

日志

 OPEN database: Recipe.db
05-20 09:22:23.620  5975  6009 I ReactNativeJS: new transaction is waiting for open operation
05-20 09:22:23.629  5975  6009 I ReactNativeJS: OPEN database: Recipe.db failed, aborting any pending transactions
05-20 09:22:23.632  5975  6009 I ReactNativeJS: { [Error: Could not open database]
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   code: 0,
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   line: 100047,
05-20 09:22:23.632  5975  6009 I ReactNativeJS:   column: 27,

1 个答案:

答案 0 :(得分:1)

如果SQLite数据库存储在Assets文件夹中,则无法打开该数据库进行写入。通常,在启动时,应用程序将检查其自己的/ data / data / database文件夹中是否具有SQLite数据库。如果没有,它将数据库从Assets文件夹复制到/ data / data / database文件夹,然后打开该副本进行写入。

即使更新了应用程序,在/ data / data / database文件夹中对数据库所做的更改仍将保留。但是,如果用户删除该应用程序,它将被删除。然后该应用将不得不再次进行数据库复制。