gpt4 book ai didi

iPhone - 使用 sql 数据库 - 插入语句失败

转载 作者:行者123 更新时间:2023-12-03 20:56:44 25 4
gpt4 key购买 nike

我在我的 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 总是给出错误 19。我无法理解问题出在哪里。

表是使用以下查询创建的:

创建表 [患者](PID 整数不为空主键自动增量唯一、PFirstName 文本不为空、PLastName 文本、PSex 文本不为空、PDOB 文本不为空、PEeducation 文本不为空、PHandedness 文本、PType 文本)

CREATE TABLE PatientResult(PID INTEGER,PFreeScore INTEGER NOT NULL,PForcedScore INTEGER NOT NULL,FOREIGN KEY (PID) REFERENCES Patient(PID))

我在 Patient 表中只有一个 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;}

最佳答案

我已经更新了您的代码。这样做:

-(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, 1, i); //updated
sqlite3_bind_int(insertResultStatement, 2, i); //updated
sqlite3_bind_int(insertResultStatement, 3, i); //updated

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;
}

原因是你的索引是从0开始的,这是错误的。当您向数据库表中插入数据时,需要从索引1开始插入。当您尝试从数据库中获取数据时,从索引0开始插入。

关于iPhone - 使用 sql 数据库 - 插入语句失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com