我有一个Phonegap(2.1.0)应用程序,在onDeviceready时创建一个数据库,并使用信息填充表格。
在Chrome上本地运行此应用程序(使用Ripple模拟器)可以正常工作。需要时会创建和填充表格。
在将构建的.apk安装到我的Android设备后,我的Eclipse logcat显示:
根据这篇文章,我认为可以忽略错误。
但是,我在logcat中也注意到了这个错误:
为了加深我的苦恼 - 在我的日志记录中,我确实看到了“存储完好无损”的console.log输出和“开始创建表格”的消息。
我的errorHandler函数没有返回任何内容,而我的successCallBack函数已经触发……但是数据库没有被创建。
感谢您的帮助。
在Chrome上本地运行此应用程序(使用Ripple模拟器)可以正常工作。需要时会创建和填充表格。
在将构建的.apk安装到我的Android设备后,我的Eclipse logcat显示:
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 shell确认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'));
}
为了加深我的苦恼 - 在我的日志记录中,我确实看到了“存储完好无损”的console.log输出和“开始创建表格”的消息。
我的errorHandler函数没有返回任何内容,而我的successCallBack函数已经触发……但是数据库没有被创建。
感谢您的帮助。