select方法正在调整但插入方法无法正常工作

时间:2012-08-06 08:23:58

标签: iphone objective-c ipad ios5

我正在使用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”错误 请帮我。 感谢

4 个答案:

答案 0 :(得分:1)

我不明白“如果我不打开数据库它会给出数据库锁定错误”注释,因为你根本无法在不打开它的情况下使用数据库。没有首先打开数据库就调用SQLite函数是没有意义的。也许我不理解这个评论。

但忽略了一下,你后来说,“如果打开数据库,它会给'没有这样的表'错误”:你确定你正确地找到了数据库吗?问题是,如果你打开数据库并且找不到它,那么就会创建一个空白数据库。你确定这没有发生在你身上吗?如果这可能发生在你身上,你可能想要

  1. 重置模拟器(如果您使用的是模拟器)或删除并重新安装应用程序,以确保删除sqlite3_open可能为您创建的任何空白数据库;和

  2. 检查以确保数据库在打开之前存在,或者将sqlite3_open的出现位置替换为sqlite3_open_v2,其中第三个参数为SQLITE_OPEN_READWRITE,第四个参数为{{1 }}。请参阅SQLite will not prepare query when accessing database in Xcode

  3. 顺便说一句,你没有提到你是从捆绑包还是NULL打开这个,但我通常会建议programmatically copy从捆绑到Documents和然后从那里打开它。

  4. 如果您在模拟器上执行此操作,我有时会发现从Mac上检查模拟器使用的数据库会很有帮助。因此,我转到“〜/ Library / Application Support / iPhone Simulator / 5.1 / Applications /”(用您正在使用的任何版本的模拟器替换5.1 ...如果Documents被隐藏,则取消隐藏它Library Terminal,然后我进入特定应用程序的目录,进入它的chflags nohidden ~/Library文件夹,然后在Mac命令行Documents程序中打开数据库。您可以使用它来检查数据库并确保数据库符合您的预期。

  5. 对于“没有这样的表”错误只是一些想法。

答案 1 :(得分:0)

以下是从SQLite数据库创建,打开,插入和检索数据的链接。它会对你有所帮助。

SQLite Datase Create,Insert and Retrieve from the database Click here

答案 2 :(得分:0)

jonty处理数据库是必须的,首先我们打开数据库,然后我们在数据库中进行更改 如果它给出错误没有这样的表,那么我建议你检查数据库中是否存在表,即是否创建了这样的表。

答案 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);

如果此代码不起作用,则查询中存在问题,请再次检查您的查询。这段代码在我这边工作。