0

Titanium API を使用して、データベース ファイルを/Library/Private DocumentsフォルダーではなくDocuments ディレクトリに保存したいと考えています。

var database = Titanium.Database.install('/db/Database.sqlite',DatabaseHandler.DB_NAME);

そして、それはに保存されています

iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Library/Private Documents/Database.sql

一方、私たちはそれを必要としています

iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/dbDir/Database.sql

また

iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/Database.sql

基本的な要件は、新しいアプリの更新でユーザーのデータが失われたくないということです。App Store からの新しいアプリの更新では、ドキュメント ディレクトリ データのみが保存され、残りのすべてのデータは削除されます。

そして、手動でdbファイルを移動している場合:

if(Ti.Platform.osname === 'iphone'){
  var dbFile = database.file;
  var filePath = String.format('%s/%s.sql',dbDir.resolve(),DatabaseHandler.DB_NAME);
  Ti.API.info(filePath);
  var result = dbFile.move(filePath);
  Ti.API.info(result);   
}

次に、アプリケーションを実行すると、メッセージの問題が発生します:

message = "無効な SQL ステートメントです。エラー Domain=com.plausiblelabs.pldatabase Code=3 \"提供された SQL ステートメントの解析中にエラーが発生しました。\" UserInfo=0x9c14ed0 {com.plausiblelabs.pldatabase.error.vendor.code=1, NSLocalizedDescription =提供された SQL ステートメントの解析中にエラーが発生しました。, com.plausiblelabs.pldatabase.error.query.string=SELECT * FROM UserProfile, com.plausiblelabs.pldatabase.error.vendor.string=そのようなテーブルはありません: UserProfile} in -[TiDatabaseProxy実行:] (TiDatabaseProxy.m:186)"

4

1 に答える 1

2

データベースをどのように開いていますか?

Ti.Database.open('MyDatabase') を別の場所に移動してから使用している場合、デフォルトの場所に「MyDatabase」という空のデータベースが作成されます。データベースの最初のインストールが行われた場所。私が理解していることから、これは Ti.Database.open のデフォルトの機能です。データベースが存在しない場合は、作成します。このデータベースは新しく、テーブルがないため、テーブル UserProfile は存在しないと言えます。

Ti.Database.open 呼び出しでデータベースの場所を修飾する方法があるかどうかはわかりません。たとえば、

Ti.Database.open('/iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/dbDir/MyDatabase')

動作するかどうか。open 呼び出しにデータベースの場所を伝える必要があります。これは、データベースを見つけられるはずの場所から移動したためです。おそらくそうではないかもしれませんが、サンプルコードはデータベースの使用法を示しているのではなく、ファイルの移動をどのように管理したかを示しています。

于 2012-10-10T20:27:24.697 に答える