我正在使用钛并测试Android模拟器 - 但是也欢迎任何与iOs相关的建议!
我正在尝试将钛与数据库一起使用。我正在使用firefox sql lite插件制作我的数据库 - 所以我做了,然后我去了
database > export database > to a location in my titanium app project that is under "Resources" folder
好的,整洁。
然后我有了这段代码:
var db = Ti.Database.install('/db/wibbler.sql','wibbler');
function getLanguages(){
var sql = 'select * from language order by name desc';
var results = [];
var resultSet = db.execute(sql);
while (resultSet.isValidRow()){
results.push({
name: resultSet.fieldByName('name'),
id: resultSet.fieldByName('id'),
desctiption: resultSet.fieldByName('description')
});
reultSet.next();
}
resultSet.close();
return results;
}
如您所见,文件的位置是
Resources/db
并且db文件名为“wibbler.sql”
问题是,当我运行我的应用程序时,它抱怨我正在使用的sql引用了一个不存在的表 - 以及:
未捕获的错误:没有这样的表
交易是什么?
答案 0 :(得分:1)
首次运行var db = Ti.Database.install('/db/wibbler.sql','wibbler');
时,Resources/db/wibbler.sql
处的数据库文件将安装在私人文档(iOS)或内部或外部存储(Android)中。 db的这个新副本是var db指向的位置。 Docs
第二次运行应用程序时,由于已经安装了数据库,因此只需打开该副本即可。因此,如果您运行应用程序,然后在References
下的数据库文件中添加了一个表,那么新表将不会反映在数据库的副本中。
要解决此问题,您可以执行以下操作之一:
答案 1 :(得分:0)
好的,所以答案有点混合 - 来自亚当建议的东西,以及其他一些我没有意识到的东西
首先:我的文件只是一个导出的sqllite数据库。这不对 - 文件应该是实际的数据库文件(所以,你知道,firefox创建的数据库的“位置”应该驻留在Resources文件夹中的某个位置,而钛应该指向那个)。
清除此内容的是本教程:http://blogs.usask.ca/the_bolt/archive/2010/12/titanium_tutorial_database.html
如教程中所述,它已过时 - 但我需要知道的是我在钛代码中使用了错误的文件。
接下来,正如亚当提到的,android将继续使用旧的数据库 - 你可以每次清理它,但这是一个麻烦。试试这个:
var db = Ti.Database.open('wibbler');
db.remove();
db = Ti.Database.install('/db/wibbler.sqlite','wibbler');
找到数据库,杀死它并重新安装它。另请注意,我现在指的是sqlite文件,而不是sql文件。
万岁!