Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在IOS的sqlite中插入数据时数据库被锁定?_Ios_Database_Sqlite - Fatal编程技术网

为什么在IOS的sqlite中插入数据时数据库被锁定?

为什么在IOS的sqlite中插入数据时数据库被锁定?,ios,database,sqlite,Ios,Database,Sqlite,为什么在sqlite中插入数据时数据库被锁定?我已经打开和关闭了我所有的数据库代码?我有以下代码: -(void)insertDataIn_tbl_selectItem_data: (NSString *)empID ProdId: (NSString *)prodId ProdName: (NSString *)prodName GenName: (NSString *)genName ComputeType: (NSString *)computeType UOM: (NSString *

为什么在sqlite中插入数据时数据库被锁定?我已经打开和关闭了我所有的数据库代码?我有以下代码:

-(void)insertDataIn_tbl_selectItem_data: (NSString *)empID ProdId: (NSString *)prodId ProdName: (NSString *)prodName  GenName: (NSString *)genName ComputeType: (NSString *)computeType UOM: (NSString *)uom ListPrice: (NSString *)listPrice UOMQty: (NSString *)uomqty{

    const char *query = "insert into tbl_selectItem_data (femployeeid,fproductid,fname,fgeneric_name,fcompute_type,fuom,flist_price,fuomqty) values (?,?, ?, ?, ?, ?, ?, ?)";
    sqlite3_stmt *stmt;

    if (sqlite3_open([sqLiteDb UTF8String], &(_database)) == SQLITE_OK) {
        if (sqlite3_prepare_v2(_database, query, -1, &stmt, nil) == SQLITE_OK) {

            sqlite3_bind_text(stmt, 1, [empID UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 2, [prodId UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 3, [prodName UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 4, [genName UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 5, [computeType UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 6, [uom UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 7, [listPrice UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 8, [uomqty UTF8String], -1, SQLITE_TRANSIENT);

            if(sqlite3_step(stmt) == SQLITE_DONE){
                NSLog(@"Insert Successful");
                sqlite3_finalize(stmt);
            }else{
                NSLog(@"insertDataIn_tbl_selectItem_data error: %s", sqlite3_errmsg(_database));
            }
        }
    }

    sqlite3_close(_database);
}

首先。。。即使有错误,也尝试“完成”您的语句…因此您的方法:

if(sqlite3_step(stmt) == SQLITE_DONE){
            NSLog(@"Insert Successful");
            sqlite3_finalize(stmt);
        }else{
            NSLog(@"insertDataIn_tbl_selectItem_data error: %s", sqlite3_errmsg(_database));
        }
    }
}
sqlite3_close(_database);
最好是:

if(sqlite3_step(stmt) == SQLITE_DONE){
            NSLog(@"Insert Successful");
        }else{
            NSLog(@"insertDataIn_tbl_selectItem_data error: %s", sqlite3_errmsg(_database));
        }
    }
 sqlite3_finalize(stmt);
}

sqlite3_close(_database);
第二

您可以尝试使用
sqlite3\u open\u v2
来代替
sqlite3\u open
更多信息:

因此……取而代之的是:

if (sqlite3_open([sqLiteDb UTF8String], &(_database)) == SQLITE_OK) {...}

将是:
if(sqlite3\u open\u v2([sqLiteDb UTF8String],&(\u database),SQLITE\u open\u READWRITE,NULL)==SQLITE\u OK){……}

您是否在循环中调用此方法?不,我只调用了一次该方法。当我单击“添加”按钮时,您可以打印
sqlite3\u errmsg
,并在其中调用此方法。'我已经打印了该slite3\u errmsg,它返回我一个数据库值已锁定检查是否打开数据库进行其他操作?是否读取了其他操作?