2013-11-27 75 views
0

我正在從一個viewcontroller到另一個sqlite數據庫的通信,但一些如何我沒有得到第二個視圖控制器上的數據庫。貝婁是我使用it.:-數據庫通信

在第一個視圖控制器

//Creating a table of MOtivational Thoughts 
    dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPath objectAtIndex:0]; 
    Second.databasePath = [[NSString alloc]initWithString:[docsDir stringByAppendingPathComponent:@"S.H.E.D_DB"]]; 
    NSFileManager *filemgr = [NSFileManager defaultManager]; 
    if ([ filemgr fileExistsAtPath: Second.databasePath] == NO) { 
     const char *dbpath = [Second.databasePath UTF8String]; 
     if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
     { 
      char *errMsg; 
      const char *sql_stmt = 
      "CREATE TABLE IF NOT EXISTS THOUGHTS (ID integer ,Motivation_Thaought TEXT)"; 

      if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
      { 
       NSLog(@"Failed to create table"); 
      } 
      else 
      { 
       NSLog(@" created table"); 
      } 
      sqlite3_close(contactDB); 
     } else { 


     } 
    } 

    // Fetching Data from table of MOtivational Thoughts 
    if(sqlite3_open([Second.databasePath UTF8String], &contactDB) == SQLITE_OK) { 
    // Setup the SQL Statement and compile it for faster access 

     int randomNumber = [self getRandomNumberBetween:0 to:6]; 

     NSString *queryString = [NSString stringWithFormat:@"Select * FROM THOUGHTS where ID= '%d'",randomNumber]; 
     const char* sql = [queryString UTF8String]; 
     NSLog(@"path value : %@", Second.databasePath); 
     sqlite3_stmt *compiledStatement; 

     if (sqlite3_prepare_v2(contactDB, sql, -1, &compiledStatement, nil)==SQLITE_OK)  { 
      // Loop through the results and add them to the feeds array 
      NSLog(@"Ready to enter while loop"); 

      while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
       // Read the data from the result row 
       NSLog(@"reading"); 
       NSString *aid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
       motivationView.text = aid; 
       NSLog(@"Thought of the day %@", aid); 

      } 
     } 
     // Release the compiled statement from memory 
     sqlite3_finalize(compiledStatement); 

    } 
    sqlite3_close(contactDB); 
     // Do any additional setup after loading the view from its nib. 
    } 

代碼在第二個視圖控制器

NSLog(@"path value : %@", databasePath); 
    if(sqlite3_open([databasePath UTF8String], &contactDB) == SQLITE_OK){ 
     char *errMsg; 
     const char *sql_stmt = 
     "CREATE TABLE IF NOT EXISTS SHEDSLIST (SHED_ID integer ,SHED_Name TEXT ,SHED_Description TEXT, SHED_TIME DATETIME)"; 

     if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
     { 
      NSLog(@"Failed to create table"); 
     } 
     else 
     { 
      NSLog(@" created table"); 
     } 
     sqlite3_close(contactDB); 
    } else { 


    } 

請找到我的錯誤,給我sutable解決方案。

+0

您收到了哪些錯誤? sqlite3_open是否失敗?您最好只打開一次數據庫,並在您的屏幕之間共享連接('contactDB'變量)。 –

+0

m沒有發現任何錯誤,但是當我在第二個視圖上應用日誌以獲取數據庫路徑時,它返回給我「null」 –

+0

您的意思是:NSLog(@「path value:%@ 「,databasePath);'?如果是這樣,你發佈的所有數據庫代碼都與問題無關,你應該將代碼發佈到如何切換到「Second」視圖控制器。 –

回答

0

可能你應該訪問SecondViewController中的數據庫路徑self.databasePath,因爲我相信你已經爲此創建了一個屬性。而不是你試圖訪問一些實例變量databasePath。在FirstViewController中查看以下代碼:

Second.databasePath = [[NSString alloc]initWithString:[docsDir stringByAppendingPathComponent:@"S.H.E.D_DB"]]; 
+0

另外,我會建議你創建一個單獨的類來處理數據庫,它可以打開數據庫,獲取記錄,處理記錄,然後關閉數據庫。 –