我们正在尝试使用PhoneGap / Cordova创建移动应用。我们需要使用预先填充的SQLite数据库发送此应用程序。我们可以使用以下代码复制数据库。但是当我们尝试在我们的应用程序中从复制的DB访问表时,我们得到“No Such Table”错误。任何人都可以帮助我们找出原因吗?
我们使用以下代码将数据库复制到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 以下代码用于打开和访问DB
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版本 - 2.9
感谢。
答案 0 :(得分:1)
首先,可以尝试使用下一个DB文件名:
0000000000000001.db
对于加载文件:
File dbFile = getDatabasePath(".0000000000000001db");
DB文件需要位于下一个路径中:
yourProyect/assets/0000000000000001.db
我建议使用“SQLitePlugin”:
在“onDeviceReady()”函数中,我使用:
if(!dbCreated){
db = window.sqlitePlugin.openDatabase("0000000000000001", "1.0", "My Database", -1);
}
答案 1 :(得分:0)
我遇到了同样的问题,但上面的答案对我没有帮助,所以我写的是我的经验,这可能会有所帮助。
我通常在https://github.com/an-rahulpandey/cordova-plugin-dbcopy使用名为:me.rahul.plugins.sqlDB的Cordova插件
这是一个专注于将文件从Cordova www文件夹复制到Android / iphone上的右侧文件夹的插件。
首先要安装插件,使用:
$ cordova plugin add https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git
然后在设备就绪事件:
function onDeviceReady() {
console.log(">device is ready");
window.plugins.sqlDB.copy("mydb.sqlite", copySuccess, copyError);
}
答案 2 :(得分:0)
要访问预先填充的数据库,首先应将数据库文件复制到www目录中。
安装此插件DB-Copy plugin并使用复制插件将数据库从 www 目录复制到设备中,然后使用Sqlite-storage plugin访问数据库。
PS。需要使用 www 目录中的数据库副本,因为每个操作系统都有不同的位置来存储数据库......