简体   繁体   English

无法在Android中使用PhoneGap / Cordova访问预填充的SQLite数据库

[英]Can't access pre populated SQLite database using PhoneGap/Cordova in Android

We are trying to create a mobile app using PhoneGap/Cordova. 我们正在尝试使用PhoneGap / Cordova创建一个移动应用程序。 We need to ship this app with a pre-populated SQLite db. 我们需要将此应用与预填充的SQLite数据库一起提供。 We are able to copy the DB using below code. 我们可以使用以下代码复制数据库。 But when we try to access tables from copied DB in our App we get 'No Such Table' error. 但是,当我们尝试从应用程序中复制的数据库访问表时,会出现“ No Such Table”错误。 Can anyone help us in identifying the cause ? 谁能帮助我们确定原因?

We copied the database using the below code to data/data/package_name/databases folder. 我们使用以下代码将数据库复制到data / data / package_name / databases文件夹。

   try
    {
        File dbFile = getDatabasePath("Bee_dict.db");
        if(!dbFile.exists()){
            this.copy("Bee_dict.db",dbFile.getAbsolutePath());
        }
     }
     catch (Exception e)
     {
     e.printStackTrace();
     }


//And our copy function:

   void copy(String file, String folder) throws IOException
    {
     File CheckDirectory;
     CheckDirectory = new File(folder);


     String parentPath = CheckDirectory.getParent();

     File filedir = new File(parentPath);
     if (!filedir.exists()) {
         if (!filedir.mkdirs()) {
             return;
         }
     }

        InputStream in = this.getApplicationContext().getAssets().open(file);
        File newfile = new File(folder);
        OutputStream out = new FileOutputStream(newfile);


        byte[] buf = new byte[1024];
        int len; while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
        in.close(); out.close();
    }

index.html The below code is used to open and access the DB index.html以下代码用于打开和访问数据库

 function onDeviceReady()
 {
  db = window.openDatabase("Bee_dict", "1.0", "Bee_dict", 20000);
  tx.executeSql('SELECT * FROM data WHERE word_id = ?', [1], querySuccess_definition, errorCB);
 }

Cordova version - 2.9 科尔多瓦版本-2.9

Thanks. 谢谢。

In first place, can trying with the next DB file name: 首先,可以尝试使用下一个数据库文件名:

0000000000000001.db

And for load file: 对于加载文件:

File dbFile = getDatabasePath(".0000000000000001db");

The DB file needs to be in the next route: 该数据库文件需要在下一条路径中:

yourProyect/assets/0000000000000001.db

I recommend use "SQLitePlugin": 我建议使用“ SQLitePlugin”:

SQLitePlugin GitHub SQLitePlugin GitHub

In the "onDeviceReady()" function i use: 在“ onDeviceReady()”函数中,我使用:

if(!dbCreated){
    db = window.sqlitePlugin.openDatabase("0000000000000001", "1.0", "My Database", -1);
}

I faced the same problem, but the answer above does not help me, so I am writing my experience, it may help. 我遇到了同样的问题,但是上面的答案对我没有帮助,所以我写我的经验可能会有所帮助。

I typically used a Cordova plugin named: me.rahul.plugins.sqlDB at https://github.com/an-rahulpandey/cordova-plugin-dbcopy 我通常使用https://github.com/an-rahulpandey/cordova-plugin-dbcopy上的名为me.rahul.plugins.sqlDB的Cordova插件

It is a plugin focused to copy files from Cordova www folder to the right folder on Android/iphone. 它是一个插件,旨在将文件从Cordova www文件夹复制到Android / iphone上的正确文件夹。

You have first to install the plugin, using: 您首先需要使用以下步骤安装插件:

$ cordova plugin add https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git

Then on Device Ready event: 然后在“设备就绪”事件上:

function onDeviceReady() {
    console.log(">device is ready");
    window.plugins.sqlDB.copy("mydb.sqlite", copySuccess, copyError);
}

To access pre-populated database you should first copy the database file in www directory. 要访问预先填充的数据库,您应该首先将数据库文件复制到www目录中。

Install this plugin DB-Copy plugin and copy the database from www directory into the device, using the copy plugin and then use Sqlite-storage plugin to access the database. 安装此插件DB-Copy插件 ,然后使用copy插件将www目录中的数据库复制到设备中,然后使用Sqlite-storage插件访问数据库。

PS. PS。 The copy of database from www directory is need it because each OS has different location to store databases... 需要从www目录复制数据库,因为每个操作系统都有不同的位置来存储数据库。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM