2011-07-19 9 views
0

私はiPhoneとiPadの両方に普遍的なアプリケーションを作っていますが、私はsqliteデータベースを置く必要がある特定の場所があるのだろうかと思っていましたか?一同に彼はそれを見つけられず、データベースを開くことができないという結果を与えることができないからです! = app not working:/ユニバーサルアプリケーションDBの質問

現在、私は自分のデータベースを "Other Sources"フォルダに持っています。

//Maakt een lijst van path strings voor de specifieke directories voor de specifieke domains. 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
//Eerste object van paths wordt in de string gezet! 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
//er wordt gezocht naar todo.sqlite in het opgegeven path! 
NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"todo.sqlite"]; 
pad = databasePath; 

if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
    status = TRUE; //DEBUG PURPOSES ONLY! 
    const char *sql = "SELECT pk FROM todo"; 
    sqlite3_stmt *statement; 

    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) { 
     while (sqlite3_step(statement) == SQLITE_ROW) { 
      int primaryKey = sqlite3_column_int(statement, 0); 
      Taak *taak = [[Taak alloc] initWithPrimaryKey:primaryKey database:database]; 
      [taken addObject:taak]; 
      [taak release]; 
     } 
    } 

    sqlite3_finalize(statement); 
}else { 
    status = FALSE; //DEBUG PURPOSES ONLY! 
    sqlite3_close(database); 
    NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database)); 
} 

これは私の接続コードです。多くのフォーラムやチュートリアルを検索してみんながそうしています!

+3

データベースが本当にクロスプラットフォーム(Mac/iOSと「その他」の間)でない限り、コアデータを使用します。生のSQLは時間の無駄です。 – bbum

+0

それでは、どういうエラーメッセージが表示されますか? – omz

+1

コピーリソースのビルドフェーズに追加する必要があります。これはアプリのバンドルに配置されます。その後、ドキュメントフォルダにないことを検出するコードを追加し、それを開く前にそこにコピーする必要があります。 – ughoavgfhw

答えて

0
if(sqlite3_open([databasepath UTF8String], &database) == SQLITE_OK) { 
     const char* sqlStatement; 
     sqlStatement="select fld_carromdescription from tbl_carrom where fld_carromdetails like?"; 

     sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL); 
     printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, & compiledStatement, NULL) == SQLITE_OK) { 
      sqlite3_bind_text(compiledStatement,1,[[usdflt objectForKey:@"phone"] UTF8String] , -1,SQLITE_STATIC); 
      NSLog(@"Database check111"); 
      // [tablearray removeAllObjects]; 
      while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
       printf("in loop"); 

       @try { 
        NSLog(@"Database check"); 
        txtview.text=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement,0)]; 
        toplbl.text=[usdflt valueForKey:@"phone"]; 
        [txtview scrollRangeToVisible:NSMakeRange(0, 0)]; 
       } 

       @catch (NSException * e) { 

       } 
       @finally { 

       } 

      } 
     } 
     sqlite3_finalize(compiledStatement); 

    } 

    sqlite3_close(database); 
} 

これを試してください。

other sources onlyにはsqliteDBも使用しています。私は3つの普遍的なアプリケーションを行った。私はアクセスするのに苦労しない。

関連する問題