我有一个像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。
任何帮助都会受到欢迎!
答案 0 :(得分:0)
出现此类错误有几个原因
- 数据库不存在
- 您通过错误的路径开启功能
- 执行错误的陈述。
醇>
正如教程所说
NSArray *failedBankInfos = [FailedBankDatabase database].failedBankInfos;
for (FailedBankInfo *info in failedBankInfos) {
NSLog(@"%d: %@, %@, %@", info.uniqueId, info.name, info.city, info.state);
}
检查init方法是否调用FailedBankDatabase
希望这有帮助