尝试使用select语句查询应用程序的数据库时出现Unknown Error SQLite错误。我已经查了十几次代码,但它对我来说看起来很好(显然在某些地方出现了问题)。
以下是我发现问题的代码:
- (Boolean)loginAttempt
{
// Do any additional setup after loading the view.
//Startup Checks on Database
//Get Docs Directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
docDir = [dirPaths objectAtIndex:0];
//Build path to DB file
dbPath = [[NSString alloc] initWithString: [docDir stringByAppendingPathComponent: @"AGDB.sqlite"]];
//NSC
fManager = [NSFileManager defaultManager];
if ([fManager fileExistsAtPath: dbPath] == NO)
{
[self callAlert:@"Database Not Found!" :@"For some reason we could not find your Angles and Gridz Database. Let us know about this error right away!" :@"Ok"];
}
else
{
dbpath = [dbPath UTF8String];
}
if (sqlite3_open(dbpath,&dbCon) == SQLITE_OK)
{
const char *insertSQL = "select Password from Login where Username=?";
if (sqlite3_prepare_v2(dbCon,insertSQL,-1,&stmt,NULL) == SQLITE_OK)
{
if (sqlite3_bind_text(stmt,1,[user_Text.text UTF8String],-1,NULL) != SQLITE_OK)
{
sqlErr = [NSString stringWithUTF8String:sqlite3_errmsg(dbCon)];
return FALSE;
}
if (sqlite3_step(stmt) == SQLITE_ROW)
{
int cols = sqlite3_column_count(stmt);
if (cols > 0)
{
for (int i1 = 0; i1 < cols; i1++)
{
switch(i1)
{
case 2:
rPass = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(stmt,i1)];
break;
default:
break;
}
}
}
sqlite3_clear_bindings(stmt);
sqlite3_finalize(stmt);
sqlite3_close(dbCon);
//Check against supplied password
if (![rPass isEqualToString:pass_Text.text])
{
return FALSE;
}
else
{
return TRUE;
}
}
else
{
sqlErr = [NSString stringWithUTF8String:sqlite3_errmsg(dbCon)];
return FALSE;
}
}
else
{
sqlErr = [NSString stringWithUTF8String:sqlite3_errmsg(dbCon)];
return FALSE;
}
}
else
{
sqlErr = [NSString stringWithUTF8String:sqlite3_errmsg(dbCon)];
return FALSE;
}
}
这对我来说都是正确的。这是打开数据库的.m文件中唯一的位置,以及打开数据库的应用程序中的其他位置。一旦完成数据库上的操作,我将完成任何语句并关闭数据库连接。< / p>
它能够找到数据库和表,因为我之前有一个不同的错误,说明Username列不存在(它实际上是Usename,在我编写select语句时拼写错误)。
如果有人发现代码有任何问题或知道可能导致此问题的原因,请告诉我们!感谢。
答案 0 :(得分:0)
我弄清楚发生了什么事。起初我错过了一级SQL错误检查。相反,错误检查发生在step语句块内部,该语句块不应该返回sql错误消息,但如果col计数返回为0,则返回“数据库空”消息。
修正了另一个问题,我应该为0而不是2进行套管,并解决了这个问题。由于没有要返回的sql错误消息,因此返回了未知错误。