【发布时间】:2011-06-01 04:00:44
【问题描述】:
我在我的 iphone 应用程序中使用 sqlite 数据库。 我有一个有 3 个整数列的表。 我正在使用以下代码写入该数据库表。
-(BOOL)insertTestResult {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* dataBasePath = [documentsDirectory stringByAppendingPathComponent:@"test21.sqlite3"];
BOOL success = NO;
sqlite3* database = 0;
if(sqlite3_open([dataBasePath UTF8String], &database) == SQLITE_OK)
{
BOOL res = (insertResultStatement == nil) ? createStatement(insertResult, &insertResultStatement, database) : YES;
if(res)
{
int i = 1;
sqlite3_bind_int(insertResultStatement, 0, i);
sqlite3_bind_int(insertResultStatement, 1, i);
sqlite3_bind_int(insertResultStatement, 2, i);
int err = sqlite3_step(insertResultStatement);
if(SQLITE_ERROR == err)
{
NSAssert1(0, @"Error while inserting Result. '%s'", sqlite3_errmsg(database));
success = NO;
}
else
{
success = YES;
}
sqlite3_finalize(insertResultStatement);
insertResultStatement = nil;
}
}
sqlite3_close(database);
return success;}
命令 sqlite3_step 总是给出 err 为 19。我无法理解问题出在哪里。
表是使用以下查询创建的:
CREATE TABLE [Patient](PID 整数 NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,PFirstName text NOT NULL,PLastName text,PSex text NOT NULL,PDOB text NOT NULL,PEducation text NOT NULL,PHandedness text,PType text)
CREATE TABLE PatientResult(PID INTEGER,PFreeScore INTEGER NOT NULL,PForcedScore INTEGER NOT NULL,FOREIGN KEY (PID) REFERENCES Patient(PID))
我在患者表中只有一个 PID = 1 的条目
BOOL createStatement(const char* query, sqlite3_stmt** stmt, sqlite3* database){
BOOL res = (sqlite3_prepare_v2(database, query, -1, stmt, NULL) == SQLITE_OK);
if(!res)
NSLog( @"Error while creating %s => '%s'", query, sqlite3_errmsg(database));
return res;}
【问题讨论】: