我一直在尝试使用文档中的代码在我的钛项目中安装一个简单的简单数据库,并根据各种来源的建议尝试不同的调整。但我不能让它工作,我得到像“没有这样的表”或结果集为空的错误。我的代码看起来像这样:
var db = Ti.Database.install('../assets/exercises.db', 'exercisesDB');
Ti.API.info('installed '+ db.getName() );
db.close();
Ti.API.info('closed db' );
db = Ti.Database.open('exercisesDB');
Ti.API.info('reopened db' );
//Ti.API.info(db.getName() );
var exercisesDBRS = db.execute('SELECT id,name FROM exercise');
我已经尝试将数据库文件exercise.db放在assets文件夹和Resources文件夹中但是我没有在哪里。我在OSX Sierra上使用“DB Browser for SQLite”ver 3.9.1创建了db文件 - 它是否与appcelerator合金项目兼容?我当前的代码在执行调用中产生错误“no such table”。我向你保证db文件有一个练习表。
PS,新项目中的完整代码index.js文件如下:
var db = Ti.Database.install('exercises.sqlite', 'exercisesDB');
Ti.API.debug('installed '+ db.getName() );
db.close();
Ti.API.debug('closed db' );
db = Ti.Database.open('exercisesDB');
Ti.API.debug('reopened db' );
var exercisesDBRS = db.execute('SELECT id, name FROM exercise');
Ti.API.debug('executed select');
Ti.API.debug(' rowcount== '+ exercisesDBRS.rowCount);
while (exercisesDBRS.isValidRow()) {
var exId = exercisesDBRS.fieldByName('id');
var exName = exercisesDBRS.fieldByName('name');
Ti.API.debug("Exercise: "+exId + ' ' + exName );
exercisesDBRS.next();
}
exercisesDBRS.close();
db.close();
function doClick(e) {
alert($.label.text);
}
$.index.open();
新项目,但相同的代码和app / lib文件夹中相同数据库文件的副本。相同的错误 - 在android中测试时,执行行上没有这样的表,在iOS sim中工作正常。
答案 0 :(得分:3)
根据文档,您的外部数据库应位于运行以下代码的相同位置:
var db = Ti.Database.install('../assets/exercises.db', 'exercisesDB');
无需使用 ../ assets / 。你可以简单地在没有它的情况下引用数据库,因为你放在assets文件夹中的所有内容都被移动到相应的 Resources-> iphone / android 文件夹。
您始终可以对外部数据库使用 Ti.Database.install 方法,因为在安装数据库一次后,它的行为类似于 Ti.Database.open(' exerciseDB')方法。
您主要担心的是,您可以随时将数据库文件安全地放入 app - > lib 文件夹(创建 lib 文件夹,如果它不存在,然后将db文件放在那里)。
将db文件放在那里后,您始终可以使用以下代码:
var db = Ti.Database.install('exercises.db', 'exercisesDB');
虽然,我从未使用 .db扩展名,而是我一直使用 .sqlite格式(因为文档也说SQLite数据库)并且它已经100%正确使用了每一次。
因此,您可以通过将数据库格式更改为 .sqlite 来尝试此过程,并将其放在 app-> lib 文件夹中。它肯定会有效,在验证后你可以使用相同的代码来使用 .db 文件,看看它是否支持。
在Android上:按照以下步骤操作:
1 - 在您的PC中,转到项目的根目录,删除构建和资源文件夹。
2 - 在设备上,清除“设置”中的应用数据,然后删除该应用。
3 - 现在再次安装应用程序,其代码和流程与我在此处提到的相同。
如果它适用于iOS sim,那么它也适用于Android(只有一些清洁问题或者你以前的数据库仍然存在)。