-(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);
}
使用上面的代码尝试触发插入查询,但有时它可以正常工作,大部分时间我都会遇到数据库锁定错误。
提前帮助提前谢谢。
答案 0 :(得分:4)
使用此链接并使用FMDB管理您的数据库。 5个月后我也遇到了这个问题并使用了这个问题,我的问题解决了100%。
答案 1 :(得分:0)
您没有正确关闭连接。
Options
答案 2 :(得分:0)
数据库锁通常发生在向数据库写入内容或者打开其他连接时。检查其他丢失连接的代码。
尝试检查sqlite3_prepare_v2的SQLITE_OK,因为数据库可能正忙,可能会返回SQLITE_BUSY以获取步骤语句。进一步解释here。请尝试以下代码:
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//*************** insert value in database******************************\\
const char *sql = [query UTF8String];
if(sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL)==SQLITE_OK)
{
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);
}