1

私はiOS開発者であり、2つのSQLiteデータベースの接続に問題があります。実行中にこのエラーが発生します:

Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR
2012-06-19 11:10:19.658 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB
2012-06-19 11:10:19.672 °°°°°°°[453:707] Err 1: no such table: Meal
2012-06-19 11:10:19.680 °°°°°°°[453:707] Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR
2012-06-19 11:10:19.684 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB
2012-06-19 11:10:19.693 °°°°°°°[453:707] Err 1: no such table: MealItem
2012-06-19 11:10:19.698 °°°°°°°[453:707] ERREUR

添付後、データ収集を試みています。彼は私たちが検索しているテーブルを見つけていません:Err 1:そのようなテーブルはありません:MealItemまたはErr 1:そのようなテーブルはありません:食事。

それはさらに奇妙になります!iOS 5.0を使用してSimで同じコードをテストすると、機能します。リクエストからデータが返ってきました!それでもこのエラーが数回発生します:

Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR
2012-06-19 11:10:19.684 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB

sqlight managerで2つのデータベースを接続してみましたが、成功しました。この結果データベースは、アプリケーションでも機能しました。iOSでデータベースの接続に問題があるようです。または、どこかでエラーが発生しました。

私たちは今のところ運のない解決策を探しています。

ここにいくつかのコードがあります:(FMDatabaseapiを使用して)

- (FMDatabase *) attachMealDatabase:(FMDatabase *) db {


    if (![db open]) {
        NSLog(@"Could not open db.");
        return nil;
    }else {

    }

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [paths objectAtIndex:0];
    //const char * mainDBPath = [[documentDirectory stringByAppendingPathComponent:@"Main.db"] UTF8String];
    const char * mealDBPath = [[documentDirectory stringByAppendingPathComponent:@"Meals.db"] UTF8String];



    NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS mealDB", mealDBPath];


    [db beginTransaction];

    [db executeUpdate:attachSQL];
    [db commit];
    //[db close];

    return db;

}
4

1 に答える 1

4

FMDatabaseビューコントローラではなく、レイヤにデータベースを接続してみてください。次の関数を呼び出すことにより、Dbopen関数でこれを実行しました。

-(void)attachDb{

  NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString documentDirectory = [paths objectAtIndex:0];
  const char  secondDBPath = [[documentDirectory    stringByAppendingPathComponent:@"Second.db"] UTF8String];

  if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK)
  {
    NSString *strSQLAttach = [NSString stringWithFormat:@"ATTACH DATABASE \'%s\' AS SECOND", secondDBPath ];
    char *errorMessage;

    if (sqlite3_exec(db, [strSQLAttach UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK)
    {
        DLog(@"Great Success!");
    }
  }    
}

これがあなたのために働くことを願っています!

于 2012-06-19T13:09:00.920 に答える