Сбой SQLITE при отсутствии данных в таблице - PullRequest
0 голосов
/ 14 марта 2010

У меня проблема с моим приложением, которое вызывает его сбой, когда в таблице нет данных при использовании табличного представления. Я проверил свой код, и он работает нормально, пока есть данные, но мне нужно, чтобы он работал, когда данных нет.

-(void)initialiseTableData
{
NSMutableArray *array = [[NSMutableArray alloc]init];

sqlite3 *db = [iCaddyAppDelegate getNewDBConnection];
sqlite3_stmt  *statement;
const char *sql = "select courseId, courseName, totalPar, totalyardage, holePars,        holeYardages, holeStrokeIndexs from Course";
if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL)!= SQLITE_OK) 
{
  NSAssert1(0,@"Error preparing statement",sqlite3_errmsg(db));
  sqlite3_close(db);
}

else
{

while (sqlite3_step(statement) == SQLITE_ROW) 
{

  Course *temp = [[Course alloc]init];

  temp.courseId = sqlite3_column_int(statement,0);
  temp.courseName = [NSString     stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,1)];
  temp.totalPar =sqlite3_column_int(statement,2);
  temp.totalYardage =sqlite3_column_int(statement,3);

  NSString *tempHolePars = [NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,4)]; 
  NSString *tempHoleYardages = [NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,5)];
  NSString *tempHoleStrokeIndexes = [NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,6)];

  NSArray *temp1 = [tempHolePars componentsSeparatedByString:@":"];
  NSArray *temp2 = [tempHoleYardages componentsSeparatedByString:@":"];
  NSArray *temp3 = [tempHoleStrokeIndexes componentsSeparatedByString:@":"];

  for(int i = 0; i<=17; i++)
  {
    NSString *temp1String = [temp1 objectAtIndex:i];
    [temp.holePars insertObject:temp1String atIndex:i];

    NSString *temp2String = [temp2 objectAtIndex:i];
    [temp.holeYardages insertObject:temp2String atIndex:i];

    NSString *temp3String = [temp3 objectAtIndex:i];
    [temp.holeStrokeIndexes insertObject:temp3String atIndex:i];
  }

  [array addObject:temp];
} 

  self.list = array;
  [self.table reloadData];

}



}

1 Ответ

0 голосов
/ 14 марта 2010

Скорее всего, ваша БД не открыта должным образом.

sqlite3 *db = [iCaddyAppDelegate getNewDBConnection];

Переписать getNewDBConnection

<code>
-(NSInteger)getNewDBConnection:(sqlite3 *db)database {
    return sqlite3_open([self charPathToDB], &database);
}

Тогда вы можете проверить, что база данных была открыта правильно

<code>
sqlite3 *db;
NSInteger rc;</p>

<p>rc = [iCaddyAppDelegate getNewDBConnection:&db];</p>

<p>if (rc) { NSAssert1(0,@"Error opening database: %s",sqlite3_errmsg(db));
  sqlite3_close(db);
  return;
}
Вам также следует проверить FMDB , если вам нужна хорошая обертка для базы данных sqlite.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...