我正在尝试'Offline Dictionary Android App
使用 Cordova 创建。我已经使用SQLite database browser
. 数据库文件是test.db
,它有一个表,其中test
包含两个字段“_id”INTEGER
PRIMARY KEY
和“值” TEXT
。还插入了一些记录。
我试过这些没有运气:
我已经能够收集到以下代码。我希望我的第三次尝试能够成功,所以我在这里寻求专家的帮助。
我做了什么
我将test.db
sqlite数据库文件放在assets
我的android项目的目录中。我有MainActivity.java
文件,其中包含以下代码:
MainActivity.java
package com.example.sqlite;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Bundle;
import android.util.Log;
import org.apache.cordova.*;
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
try{
System.out.println("----------Copying Database -----------");
copyDataBase("test.db");
} catch (IOException ioe){
System.out.println("----------Error Copying Database -----------");
ioe.printStackTrace();
}
}
private void copyDataBase(String dbname) throws IOException {
// Open your local db as the input stream
String pkg = this.getApplicationContext().getPackageName();
InputStream myInput = this.getAssets().open(dbname);
// Path to the just created empty db
String outFileName = "/data/data/"+ pkg + "/databases/" + dbname;
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
}
并script.js
使用以下脚本归档:
脚本.js
(function($, undefined){
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady(){
var db = window.openDatabase(
'test.db',
'1.0.0',
'Test Database',
64 * 1024
);
db.transaction(function(tx){
tx.executeSql(
'SELECT * FROM test', [], function(tx, result){
console.log("Query Success");
console.log('Total Rows :' + result.rows.length);
},function(tx, error) {
console.log('An Error Occured (Qry) : ' + error.message);
}
)
}, function(error){
console.log('An Error Occured : ' + error.message);
}, function(){
console.log("Transaction Success");
})
}
})(jQuery);
我已经在两者中启动了我的应用程序,emulator
并physical device
得到了相同的错误响应,即“没有这样的表:测试”。我找到了test.db
insdie data/data/MY_PACKAGE/databases/
。我pulled
使用eclipse打开了那个数据库文件,SQLite Database browser
并且有一个test
表格,里面有一些我已经填充的记录。
我正在使用 cordova 2.6.0 并在 android 4.2 上测试我的应用程序。我的设备没有植根(如果不影响则忽略)。
可视化场景的屏幕截图:
为什么即使有一张桌子我也会收到“没有这样的桌子”错误?
请帮忙。