'Offline Dictionary Android App
Cordova を使用して作成しようとしています。を使用してsqliteデータベースを作成しましSQLite database browser
た。データベース ファイルはで、2 つのフィールド '_id'と 'value' をtest.db
持つ 1 つのテーブルがあります。いくつかのレコードも挿入されます。test
INTEGER
PRIMARY KEY
TEXT
私は運がないこれらを試しました:
以下のコードを集めることができました。3 回目の試みを成功させたいので、専門家に助けを求めるためにここにいます。
私がやった事
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
次のスクリプトでファイルします。
script.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
、「no such table : test」という同じエラー応答が返されました。test.db
インディーを見つけましたdata/data/MY_PACKAGE/databases/
。私pulled
はEclipseを使用してそのデータベースファイルを開き、入力したいくつかのレコードを含むテーブルSQLite Database browser
があります。test
私は cordova 2.6.0 を使用しており、Android 4.2 でアプリをテストしています。私のデバイスはルート化されていません (影響がない場合は無視してください)。
シナリオを視覚化するスクリーン ショット:
テーブルがあっても「そのようなテーブルはありません」というエラーが表示されるのはなぜですか?
助けてください。