2015-06-25 5 views
0

У меня есть БД, как:sqlite3_prepare_v2 (_database, [запрос UTF8String], -1, & утверждение, ноль) == SQLITE_OK не так

CREATE TABLE 'verbes_cat' (
'id' int(11) NOT NULL, 
    'cat_name' text NOT NULL, 
    'cat_real_name' text NOT NULL, 
    'name' text NOT NULL, 
    'real_name' text NOT NULL, 
    'short_name' text NOT NULL 
); 

INSERT INTO 'verbes_cat' ('id', 'cat_name', 'cat_real_name', 'name', 'real_name', 'short_name') VALUES 
(1, 'indicatif', 'Indicatif', 'indicatif_present', 'Indicatif Présent', 'Présent'), 
(2, 'indicatif', 'Indicatif', 'indicatif_passe_compose', 'Indicatif Passé Composé', 'Passé composé'), 
(3, 'indicatif', 'Indicatif', 'indicatif_imparfait', 'Indicatif Imparfait', 'Imparfait'), 
(4, 'indicatif', 'Indicatif', 'indicatif_plus_que_parfait', 'Indicatif Plus-que-parfait', 'Plus-que-parfait'), 
(5, 'indicatif', 'Indicatif', 'indicatif_passe_simple', 'Indicatif Passé simple', 'Passé simple'), 
(6, 'indicatif', 'Indicatif', 'indicatif_passe_anterieur', 'Indicatif Passé antérieur', 'Passé antérieur'), 
(7, 'indicatif', 'Indicatif', 'indicatif_futur_simple', 'Indicatif Futur simple', 'Futur simple'), 
(8, 'indicatif', 'Indicatif', 'indicatif_furtur_anterieur', 'Indicatif Futur Antérieur', 'Futur Antérieur'), 
(9, 'subjonctif', 'Subjonctif', 'subjonctif_present', 'Subjonctif Présent', 'Présent'), 
(10, 'subjonctif', 'Subjonctif', 'subjonctif_passe', 'Subjonctif Passé', 'Passé'), 
(11, 'subjonctif', 'Subjonctif', 'subjonctif_imparfait', 'Subjonctif Imparfait', 'Imparfait'), 
(12, 'subjonctif', 'Subjonctif', 'subjonctif_plus_que_parfait', 'Subjonctif Plus-que-parfait', 'Plus-que-parfait'), 
(13, 'conditionnel', 'Conditionnel', 'conditionnel_present', 'Conditionnel Présent', 'Présent'), 
(14, 'conditionnel', 'Conditionnel', 'conditionnel_passe_1', 'Conditionnel Passé 1', 'Passé 1'), 
(15, 'conditionnel', 'Conditionnel', 'conditionnel_passe_2', 'Conditionnel Passé 2', 'Passé 2'), 
(16, 'imperatif', 'Impératif', 'imperatif_present', 'Impératif Présent', 'Présent'), 
(17, 'imperatif', 'Impératif', 'imperatif_passe', 'Impératif Passé', 'Passé'), 
(18, 'infinitif', 'Infinitif', 'infinitif_present', 'Infinitif Présent', 'Présent'), 
(19, 'infinitif', 'Infinitif', 'infinitif_passe', 'Infinitif Passé', 'Passé'), 
(20, 'participe', 'Participe', 'participe_present', 'Participe Présent', 'Présent'), 
(21, 'participe', 'Participe', 'participe_passe', 'Participe Passé', 'Passé'), 
(22, 'gerondif', 'Gérondif', 'gerondif_present', 'Gérondif Présent', 'Présent'), 
(23, 'gerondif', 'Gérondif', 'gerondif_passe', 'Gérondif Passé', 'Passé'); 

ALTER TABLE 'verbes_cat' 
ADD PRIMARY KEY ('id'); 

ALTER TABLE 'verbes_cat' 
MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=24; 

и я использую это:

+ (FailedBankDatabase*)database { 
    if (_database == nil) { 
     _database = [[FailedBankDatabase alloc] init]; 
    } 
    return _database; 
} 

где FailedBankDetabase:

@class FailedBankDetails; 

@interface FailedBankDatabase : NSObject { 
    sqlite3 *_database; 
} 

+ (FailedBankDatabase*)database; 
- (NSArray *)failedBankInfos; 
- (FailedBankDetails *)failedBankDetails:(int)uniqueId; 

@end 

     - (id)init { 
      if ((self = [super init])) { 
       NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"verbes_conj(1)" ofType:@"sql"]; 

       if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) { 
        NSLog(@"Failed to open database!"); 
       } 
      } 
      return self; 
     } 
     - (NSArray *)failedBankInfos { 

      NSMutableArray *retval = [[[NSMutableArray alloc] init] autorelease]; 
      NSString *query = @"SELECT verbe_id, auxiliaire, pronominal, verbe_name FROM verbes_conj_1"; 
      sqlite3_stmt *statement; 
      if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { 
       while (sqlite3_step(statement) == SQLITE_ROW) { 
        int uniqueId = sqlite3_column_int(statement, 0); 
        char *nameChars = (char *) sqlite3_column_text(statement, 1); 
        char *cityChars = (char *) sqlite3_column_text(statement, 2); 
        char *stateChars = (char *) sqlite3_column_text(statement, 3); 
        NSString *name = [[NSString alloc] initWithUTF8String:nameChars]; 
        NSString *city = [[NSString alloc] initWithUTF8String:cityChars]; 
        NSString *state = [[NSString alloc] initWithUTF8String:stateChars]; 
        FailedBankInfo *info = [[FailedBankInfo alloc] initWithUniqueId:uniqueId name:name city:city state:state];       
        [retval addObject:info]; 
        [name release]; 
        [city release]; 
        [state release]; 
        [info release]; 
       } 
       sqlite3_finalize(statement); 
      } 
      return retval; 

     } 

, но моя проблема в том, что условие if не соответствует действительности. Может кто-нибудь объяснить мне, пожалуйста, где я ошибаюсь? Это первый раз, когда я работаю с db, и весь проект от here.

Любая помощь будет оценена!

+0

Вы инициализируете _database? –

+0

, пожалуйста, проверьте, какой код точно вернул sqlite3_prepare_v2 – Doro

+0

@SandeepAgrawal обновляю свой вопрос. Пожалуйста, посмотрите –

ответ

0

Есть несколько причин для такой ошибки

  1. базы данных не существует
  2. Вы прошли неправильный путь, чтобы открыть функцию
  3. соврет к исполнению.

учебник говорит

NSArray *failedBankInfos = [FailedBankDatabase database].failedBankInfos; 
for (FailedBankInfo *info in failedBankInfos) { 
    NSLog(@"%d: %@, %@, %@", info.uniqueId, info.name, info.city, info.state); 
} 

Проверьте, если метод инициализации требует FailedBankDatabase

Надеется, что это помогает

+0

Он вызывает FailedBankDatabase, но в failedBankInfos, если условие не соответствует действительности. Detabase существует. –

+0

Я понял, отлаживаю эту строку и скажи, какой код был возвращен – Doro

+0

failedBankInfos имеет 0 объект. –

Смежные вопросы