我正在使用sqlite数据库,尝试插入数据库但是它给出错误“插入时出错”数据库被锁定。 我搜索了一些帖子并写了reset和finalize语句,但是它给出了同样的错误。
这是我的代码
if(addStmt == nil)
{
//const char *sql = "insert into Limittabel (limitAmt) Values(?)";
//const char *sql="INSERT INTO Limittabel (limitAmt, Profileid) VALUES(?, ?)";
const char *sql="insert into Limittabel (limitAmt,Profileid) Values (?,?)";
// Insert into Limittabel (limitAmt,Profileid) Values ($500,1)
if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}
sqlite3_bind_text(addStmt, 1, [limitAmt UTF8String], -1, SQLITE_TRANSIENT);
// NSString *str_id_poi = [[NSString alloc] initWithFormat:@"%d", [Profileid integerValue]];
// sqlite3_bind_text(addStmt, 2, [str_id_poi UTF8String], -1, SQLITE_TRANSIENT);
//sqlite3_bind_text(addStmt, 2, [ UTF8String], -1, SQLITE_TRANSIENT);
NSLog(@"***Storing END on Database ***");
if(SQLITE_DONE != sqlite3_step(addStmt))
{
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
} // sqlite3_finalize(addStmt);
else{
//sqlite3_last_insert_rowid;
limitid = sqlite3_last_insert_rowid(database);
NSLog(@"YES THE DATA HAS BEEN WRITTEN SUCCESSFULLY");
}
sqlite3_finalize(addStmt);
}
sqlite3_reset(addStmt);
//sqlite3_finalize(addStmt);
}
如果我没有打开数据库,则会给出数据库锁定错误,如果打开数据库,则会显示“No such Table”错误 请帮我。 感谢
答案 0 :(得分:1)
我不明白“如果我不打开数据库它会给出数据库锁定错误”注释,因为你根本无法在不打开它的情况下使用数据库。没有首先打开数据库就调用SQLite函数是没有意义的。也许我不理解这个评论。
但忽略了一下,你后来说,“如果打开数据库,它会给'没有这样的表'错误”:你确定你正确地找到了数据库吗?问题是,如果你打开数据库并且找不到它,那么就会创建一个空白数据库。你确定这没有发生在你身上吗?如果这可能发生在你身上,你可能想要
重置模拟器(如果您使用的是模拟器)或删除并重新安装应用程序,以确保删除sqlite3_open
可能为您创建的任何空白数据库;和
检查以确保数据库在打开之前存在,或者将sqlite3_open
的出现位置替换为sqlite3_open_v2
,其中第三个参数为SQLITE_OPEN_READWRITE
,第四个参数为{{1 }}。请参阅SQLite will not prepare query when accessing database in Xcode
顺便说一句,你没有提到你是从捆绑包还是NULL
打开这个,但我通常会建议programmatically copy从捆绑到Documents
和然后从那里打开它。
如果您在模拟器上执行此操作,我有时会发现从Mac上检查模拟器使用的数据库会很有帮助。因此,我转到“〜/ Library / Application Support / iPhone Simulator / 5.1 / Applications /”(用您正在使用的任何版本的模拟器替换5.1 ...如果Documents
被隐藏,则取消隐藏它Library
Terminal
,然后我进入特定应用程序的目录,进入它的chflags nohidden ~/Library
文件夹,然后在Mac命令行Documents
程序中打开数据库。您可以使用它来检查数据库并确保数据库符合您的预期。
对于“没有这样的表”错误只是一些想法。
答案 1 :(得分:0)
以下是从SQLite数据库创建,打开,插入和检索数据的链接。它会对你有所帮助。
SQLite Datase Create,Insert and Retrieve from the database Click here
答案 2 :(得分:0)
答案 3 :(得分:0)
试试这段代码,
if(sqlite3_open([YourDatabasePath UTF8String],&db) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat: @"insert into Limittabel (limitAmt,Profileid) Values (?,?)"];
char *errmsg=nil;
if(sqlite3_exec(db, [querySQL UTF8String], NULL, NULL, &errmsg)==SQLITE_OK)
{
NSLog(@"YES THE DATA HAS BEEN WRITTEN SUCCESSFULLY");
}
}
sqlite3_close(db);
如果此代码不起作用,则查询中存在问题,请再次检查您的查询。这段代码在我这边工作。