钛未加工错误:没有这样的表

时间:2012-08-29 19:10:06

标签: android ios titanium

我正在使用钛并测试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引用了一个不存在的表 - 以及:

未捕获的错误:没有这样的表

交易是什么?

2 个答案:

答案 0 :(得分:1)

首次运行var db = Ti.Database.install('/db/wibbler.sql','wibbler');时,Resources/db/wibbler.sql处的数据库文件将安装在私人文档(iOS)或内部或外部存储(Android)中。 db的这个新副本是var db指向的位置。 Docs

第二次运行应用程序时,由于已经安装了数据库,因此只需打开该副本即可。因此,如果您运行应用程序,然后在References下的数据库文件中添加了一个表,那么新表将不会反映在数据库的副本中。

要解决此问题,您可以执行以下操作之一:

  • 从模拟器/模拟器中删除应用程序,以便在重新安装应用程序时复制更新的数据库文件
  • 将install命令中的数据库名称更改为'wibbler2'
  • 直接在simulatoremulator
  • 上访问和编辑数据库副本

答案 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文件。

万岁!