2012-04-24 7 views
-1

SqlManagerを使用してsqliteで単純なデータベースを作成した後、単純なxcodeプロジェクトのリソースにファイル(Person.sqlite)をコピーし、このコードを使用してデータベースにアクセスしました。データベースが読み込まれないようです。 initの関数sqlite3_openは0(すべてOK)を返しますが、getAllPersonsのsqlite3_prepareはデータベースにある "Persona"テーブルを見つけることができません。したがって、私は実際のデータベースに到達できません。データベースを見つけられずに開いている可能性もありますが、新しい空のファイルを作成します...なぜこれが起こりますか? dbのパスを与える私の方法は正しくありませんか? ( "[NSBundle mainBundle] pathForResource:@" Persone "ofType:@" sqlite "];)本当に、パスを定義する変数のnslog(sqLiteDb)はnullを返しますが、このパスを呼び出すためにいくつかの方法を試しましたが、間違った...xcodeにsqliteデータベースをロードできません

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     NSString *sqlLiteDb = [[NSBundle mainBundle] pathForResource:@"Persone" ofType:@"sqlite"]; 
     NSLog(@"Path db: %@",sqlLiteDb); 
     if(sqlite3_open([sqlLiteDb UTF8String], &database) != SQLITE_OK){ 
      NSLog(@"Failed to open database"); 
     }else { 
      NSLog(@"Database opened"); 
     } 
    } 

    return self; 
} 

- (NSArray *) getAllPersons{ 
    NSMutableArray *returnArray=[[NSMutableArray alloc] init]; 
    NSString *query= @"SELECT Nome FROM Persona";  
    sqlite3_stmt *statement; 
    NSLog(@"%d", sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL)); 
    printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); 


    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK){ 
     NSLog(@"kndvnspò"); 
     while (sqlite3_step(statement)==SQLITE_ROW) { 
      int uniqueId = sqlite3_column_int(statement, 0); 
      char *nomeChar =(char *) sqlite3_column_text(statement, 1); 
      char *cognomeChar =(char *) sqlite3_column_text(statement, 2); 
      NSString *nome= [[NSString alloc] initWithUTF8String:nomeChar]; 
      NSString *cognome= [[NSString alloc] initWithUTF8String:cognomeChar]; 

      PersonInfo *info= [[PersonInfo alloc] initWithUniqueId:uniqueId nome:nome cognome:cognome]; 
      [returnArray addObject:info]; 
     } 
     sqlite3_finalize(statement); 
    } 
    return returnArray; 

} 

申し訳ありませんが、私は解決策は、それが簡単だと信じて、私はまだありがとう^^ Xcodeでそれほど好きではないんですよ!

更新:いいえ、常に「Persone」でした。 2時間の失敗とこの質問のオープニングの後、私はついに「だから、きれいにするのはなぜですか?それは今まで働かないでしょうが、チャンスを与えてください」と考えました。 。-_- ' 何らかの理由で、プロジェクトにはきれいなものしか必要なかった...とにかく助けてくれてありがとう!


私は唯一のクリーンな...

は確かに準備2時間を呼び出す必要なプロジェクトは良いアイデアではありません何らかの理由で更新に言ったように。申し訳ありませんが、私が投稿したコードは、テストの目的でのみ使用されたコードの汚れでした。 オープンにアクセス権に問題がある可能性があることを知っておいて、これをチェックします! ありがとうございました!

+0

。中に置かれていますが、あなたのコード内で「Persone」を使用しています。あなたの名前は一貫していますか?また、これは何が実行されているのですか(Mac、iOSデバイス、iOSシミュレータ)? –

+0

あなたは準備を2回呼びます(1回はあなたのログに、もう一度は* real *)。それは良いアイデアだと思いますか?また、XcodeはIDEです。おそらく、コードの記述に使用したツールではなく、オペレーティングシステムにタグを付けることをお勧めします。 – trojanfoe

答えて

0

sqliteのは、多くの場合、DBファイルと全体directoriファイルへのアクセス権のオープンbecaiseで失敗した「(Person.sqlite)」あなたが言う1点で

関連する問題