0

私はチタンを使用しており、Androidエミュレーターに対してテストしていますが、iOSに関連するアドバイスも歓迎します。

データベースでチタンを使おうとしています。私はFirefoxsqlliteプラグインを使用してデータベースを作成しています-だから私はそれを作成し、それから私は行きます

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が存在しないテーブルを参照していると文句を言うことです。

キャッチされないエラー:そのようなテーブルはありません

契約は何ですか?

4

2 に答える 2

1

を最初に実行するvar db = Ti.Database.install('/db/wibbler.sql','wibbler');と、データベースファイルResources/db/wibbler.sqlはプライベートドキュメント(iOS)または内部ストレージまたは外部ストレージ(Android)のいずれかにインストールされます。このdbの新しいコピーは、vardbが指す場所です。 ドキュメント

アプリを2回実行すると、データベースが既にインストールされているため、そのコピーが開きます。したがって、アプリを実行してから、データベースファイルにテーブルを追加した場合References、その新しいテーブルはデータベースのコピーに反映されません。

これを回避するには、次のいずれかを実行できます。

  • エミュレーター/シミュレーターからアプリを削除して、アプリの再インストール時に更新されたデータベースファイルがコピーされるようにします
  • installコマンドのデータベース名を次のように変更します'wibbler2'
  • シミュレーターまたはエミュレーターで直接データベースコピーにアクセスして編集する
于 2012-08-29T21:01:58.167 に答える
0

わかりました、それで答えは少しミックスです-アダムが提案したものからの何か、そして私が気づかなかった他のいくつかのもの

最初に:私のファイルはエクスポートされたsqlliteデータベースでした。そうではありません。ファイルは実際のデータベースファイルである必要があります(つまり、Firefoxが作成するデータベースの「場所」はResourcesフォルダーのどこかにあり、titaniumはそれを指している必要があります)。

これをクリアしたのはこのチュートリアルでした:http://blogs.usask.ca/the_bolt/archive/2010/12/titanium_tutorial_database.html

チュートリアルで述べたように、それは時代遅れです-しかし、私が知る必要があるのは、チタンコードで間違ったファイルを使用していたことだけでした。

次に、Adamが言及しているように、androidは古いdbを使い続けます。毎回クリーンアップできますが、それは面倒です。代わりにこれを試してください:

var db = Ti.Database.open('wibbler');
db.remove();
db = Ti.Database.install('/db/wibbler.sqlite','wibbler');

データベースを見つけて強制終了し、再インストールします。また、SQLファイルではなくsqliteファイルを指していることにも注意してください。

やったー!

于 2012-08-30T14:03:51.587 に答える