Objective c Sqlite数据库已锁定
使用上面的代码试图启动insert查询,但有时它可以工作,而且大多数时候我会收到DB locked错误Objective c Sqlite数据库已锁定,objective-c,iphone,sqlite,Objective C,Iphone,Sqlite,使用上面的代码试图启动insert查询,但有时它可以工作,而且大多数时候我会收到DB locked错误 感谢您的帮助。您没有正确关闭连接 -(void)insertQuery:(NSString *)query{ sqlite3_stmt *selectstmt; // Create a sqlite object. sqlite3 *database; // Set the database file path. NSString *databasePa
感谢您的帮助。您没有正确关闭连接
-(void)insertQuery:(NSString *)query{
sqlite3_stmt *selectstmt;
// Create a sqlite object.
sqlite3 *database;
// Set the database file path.
NSString *databasePath = [self.documentsDirectory stringByAppendingPathComponent:self.databaseFilename];
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = [query UTF8String];
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully");
}
else
{
NSLog(@"insert not successfully");
NSLog(@"DB Error: %s", sqlite3_errmsg(database));
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
}
您没有正确关闭连接
-(void)insertQuery:(NSString *)query{
sqlite3_stmt *selectstmt;
// Create a sqlite object.
sqlite3 *database;
// Set the database file path.
NSString *databasePath = [self.documentsDirectory stringByAppendingPathComponent:self.databaseFilename];
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = [query UTF8String];
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully");
}
else
{
NSLog(@"insert not successfully");
NSLog(@"DB Error: %s", sqlite3_errmsg(database));
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
}
数据库锁定通常发生在您正在向数据库写入某些内容或您保持其他连接打开时。检查其他代码是否丢失连接 尝试检查sqlite3\U prepare\U v2的SQLITE\U OK,因为数据库可能正忙,并且可能会为step语句返回SQLITE\U busy。进一步解释。请尝试以下代码:
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = [query UTF8String];
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully");
}
else
{
NSLog(@"insert not successfully");
NSLog(@"DB Error: %s", sqlite3_errmsg(database));
}
sqlite3_finalize(selectstmt);
sqlite3_close(database);
}
数据库锁定通常发生在您正在向数据库写入某些内容或您保持其他连接打开时。检查其他代码是否丢失连接 尝试检查sqlite3\U prepare\U v2的SQLITE\U OK,因为数据库可能正忙,并且可能会为step语句返回SQLITE\U busy。进一步解释。请尝试以下代码:
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = [query UTF8String];
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully");
}
else
{
NSLog(@"insert not successfully");
NSLog(@"DB Error: %s", sqlite3_errmsg(database));
}
sqlite3_finalize(selectstmt);
sqlite3_close(database);
}