Objective c ios sqlite3_open在调用的第50次失败
我有一个奇怪的问题,我希望解决: 这是我的密码:Objective c ios sqlite3_open在调用的第50次失败,objective-c,ios,sqlite,database-connection,Objective C,Ios,Sqlite,Database Connection,我有一个奇怪的问题,我希望解决: 这是我的密码: -(Shot*) getShot:(int)shot { NSString *sqlStr = [NSString stringWithFormat:@"SELECT * FROM tbShots where nShot = %d ", shot]; NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomain
-(Shot*) getShot:(int)shot {
NSString *sqlStr = [NSString stringWithFormat:@"SELECT * FROM tbShots where nShot = %d ", shot];
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *documentFolderPath = [searchPaths objectAtIndex:0];
NSString *dbFilePath = [documentFolderPath stringByAppendingPathComponent:DATABASE_NAME_EXT];
if (dbFilePath == NULL) {
NSLog(@"dbFilePath is NULL");
}
sqlite3 *dbHandle;
if (sqlite3_open([dbFilePath UTF8String], &dbHandle)) {
NSLog(@"sqlite3_open: failed");
}
sqlite3_stmt *preparedStatement;
const char* queryStatement = [sqlStr UTF8String];
sqlite3_prepare_v2(dbHandle, queryStatement, -1, &preparedStatement, NULL);
Shot *s = nil;
NSString * note = @"";
while( sqlite3_step(preparedStatement) == SQLITE_ROW)
{
s = [[[Shot alloc] initWithShot:shot] autorelease];
}
sqlite3_finalize(preparedStatement);
sqlite3_close(dbHandle);
return s;
}
现在似乎很好,但我有个问题:
我多次调用这个函数,当我第50次调用它时,sqlite3\u open函数失败(我看到日志错误“sqlite3\u open:failed”
我犯了一些错误?
提前感谢嗨@ghiboz我以前也遇到过同样的问题试试这个,我解决了我的问题:)
我有同样的问题-要解决它,你必须在应用程序启动时打开数据库,在用户离开应用程序时关闭数据库。您不应该为每个查询打开和关闭数据库 能否发布错误代码NSLog(@“打开数据库失败,错误为%s”,sqlite3_errmsg(dbHandle));
- (NSMutableArray *) SELECT_LANES_IN_POSITIONS:(NSString *)lanes{
sqlite3 *db;
const char *path = [[self getDBPathiPhone] UTF8String];
int v_Open = sqlite3_open(path, &db);
if(v_Open == SQLITE_OK){
NSString *sqlS = [NSString stringWithFormat:@"THE SQL STATEMENT" , Some];
const char *sql = [sqlS cStringUsingEncoding:NSUTF8StringEncoding];
sqlite3_stmt *stmt;
int v_prepare = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if(v_prepare == SQLITE_OK){
while ((sqlite3_step(stmt)) == SQLITE_ROW) {
}
}else{
NSLog(@"FAIL :: SELECT :: %i", v_prepare);
}
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
}else{
NSLog(@"FAIL :: OPEN :: %i", v_Open);
}
sqlite3_close(db);
return nil;
}