我正在使用 sqlite 编写一个简单的导航视图 iphone 程序用于学习目的。我以前在数据库中有一个表,但现在已将其更新为两个,我的 INNER JOIN 语句崩溃了。SQL 语句似乎可以直接运行它。在下面的代码中,未注释的语句工作得很好,但是如果我将它们切换出来,注释的语句会出现错误。
static sqlite3_stmt *init_statement = nil;
static sqlite3_stmt *dehydrate_statment = nil;
@implementation ICD9
@synthesize primaryKey,text,priority,status,match;
- (id)initWithPrimaryKey:(NSInteger)pk database:(sqlite3 *)db {
if (self = [super init]) {
primaryKey = pk;
database = db;
if (init_statement == nil) {
const char *sql = "SELECT text,priority,complete FROM todo WHERE pk=?";
//const char *sql = "SELECT todo.*, match.code10 FROM todo INNER JOIN match ON match.text = todo.text WHERE pk=1;";
if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
return self;
}
这些表在同一个数据库中:
CREATE TABLE todo(pk INTEGER PRIMARY KEY, text VARCHAR(25), priority INTEGER, complete BOOLEAN);
CREATE TABLE match(matchid INTEGER PRIMARY KEY, text VARCHAR(25), name VARCHAR(25));
我对此很陌生,因此将不胜感激。