onDevicereadyがDBを作成し、テーブルに情報を入力するPhonegap(2.1.0)アプリケーションがあります。
Chromeでこれをローカルで(Rippleエミュレーターを使用して)実行すると機能します。必要に応じて、テーブルが作成され、データが入力されます。
Androidデバイスにビルド.apkをインストールした後、Eclipseログキャットに次のように表示されます。
sqlite returned: error code = 14, msg = cannot open file at line 27712 of [8609a15dfa], db=/data/data/<project>/databases/webview.db
sqlite returned: error code = 14, msg = os_unix.c: open() at line 27712 - "" errno=2 path=/CachedGeoposition.db, db=/data/data/<project>/databases/webview.db
ここのこの投稿によると、私はこれを信じています-無視することができます。
ただし、logcatでこのエラーに気づきました。
sqlite returned: error code = 1, msg = no such table: latest_events, db=/data/data/<project>/databases/webview.db
また、adbシェルを介して、DBが作成されていないことを確認しました:ここ:/data/data/com.application/databases。またはここ:/data/data/com.application/app_databases
だから-私のコード:
if (!window.openDatabase) {
doMessage('Databases are not supported on this device. Sorry','error');
return;
}else{
consoleLog('all good for storage');
var db;
var shortName = 'MyDB';
var version = '1.0';
var displayName = 'MyDB';
var maxSize = 102400;
function errorHandler(transaction, error) {consoleLog('Error: ' + error.message + ' code: ' + error.code);}
function nullHandler(){};
db = window.openDatabase(shortName, version, displayName,maxSize);
consoleLog('starting table creation');
db.transaction(function(tx){
tx.executeSql( 'CREATE TABLE IF NOT EXISTS latest_events (id integer PRIMARY KEY AUTOINCREMENT,EventID integer,EventLocation text,EventName text,EventDateFrom varchar,EventTime timestamp,EventPresentedBy varchar,EventVenue varchar,EventScript text,RequireRSVP varchar)',[],nullHandler,errorHandler);
db.transaction(function(tx){
tx.executeSql('SELECT count(id) as RowCount FROM device_info ', [],
function(tx, result) {
if (result != null && result.rows != null) {
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
consoleLog('rowcount: '+row.RowCount);
if(row.RowCount==0){
tx.executeSql('INSERT INTO device_info (device_name, device_platform, device_uuid, device_os_ver, date_last_used) VALUES (?,?,?,?,?)',[device.name, device.platform, device.uuid, device.version, window.bowman_config.siteDate],nullHandler,errorHandler);
//doMessage('device info row added','notice');
}
}
}
},errorHandler);
},errorHandler,successCallBack('2'));
//doMessage('device info row added','notice');
},errorHandler,successCallBack('1'));
}
私の悩みに追加するために-私のlogcatには、「すべてストレージに適しています」というconsole.log出力と、「テーブル作成の開始」メッセージが表示されます。
errorHandler関数は何も返さず、successCallBack関数がトリガーされます...しかしDBは作成されません。
助けてくれてありがとう。