sqlite3_prepare_v2(_database,[query UTF8String],-1,& statement,nil)== SQLITE_OK not true

时间:2015-06-25 09:34:59

标签: ios sql objective-c database

我有一个像db这样的数据库:

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

任何帮助都会受到欢迎!

1 个答案:

答案 0 :(得分:0)

出现此类错误有几个原因

  
      
  1. 数据库不存在
  2.   
  3. 您通过错误的路径开启功能
  4.   
  5. 执行错误的陈述。
  6.   

正如教程所说

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

检查init方法是否调用FailedBankDatabase

希望这有帮助