如何在SQLite表中插入值

时间:2014-01-20 08:15:05

标签: ios sqlite

这是我用于将数据插入表格的代码,

sqlite3 *database;

NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"mobdb.sqlite"];
        if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK)
        {   
            const char *sqlstatement = "INSERT INTO mobDetails (nMonId, nScore) VALUES (?,?)";
            sqlite3_stmt *compiledstatement;

            if(sqlite3_prepare_v2(database,sqlstatement , -1, &compiledstatement, NULL)==SQLITE_OK)
            {
                NSString * str1 =@"1";
                NSString * str2 =@"12";

                sqlite3_bind_int(compiledstatement, 1, [str1 integerValue]);
                sqlite3_bind_int(compiledstatement, 2, [str2 integerValue]);

                if(sqlite3_step(compiledstatement)==SQLITE_DONE)
                {
                    NSLog(@"done");
                }
                else
                {
                    NSLog(@"ERROR");
                }
                sqlite3_reset(compiledstatement);
            }
            else
            {
                NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(database));
            }
            sqlite3_close(database);
        }

它显示“完成”消息,但未插入表中的数据可以帮助我。

还如何在表格中插入字符串?

2 个答案:

答案 0 :(得分:1)

问题是应用程序包是只读的(正如您在谷歌搜索5分钟后可能发现的那样)。因此,您无法插入应用程序包中的数据库。

使用SQLite API的一个问题是您正在调用sqlite3_reset(),而sqlite3_finalize()应该被调用。 (谢谢@trojanfoe。)

(哦,这根本没有绝对没有与Xcode有关。)

答案 1 :(得分:0)

- (void) saveData
{
     sqlite3_stmt    *statement;
     const char *dbpath = [databasePath UTF8String];

     if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
     {
           NSString *insertSQL = [NSString stringWithFormat: 
             @"INSERT INTO CONTACTS 
             (name, address, phone) VALUES (\"%@\", \"%@\", \"%@\")", 
             name.text, address.text, phone.text];
           const char *insert_stmt = [insertSQL UTF8String];
           sqlite3_prepare_v2(contactDB, insert_stmt, 
             -1, &statement, NULL);
            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                 status.text = @"Contact added";
                 name.text = @"";
                 address.text = @"";
                 phone.text = @"";
            } else {
                  status.text = @"Failed to add contact";
            }
            sqlite3_finalize(statement);
            sqlite3_close(contactDB);
    }
}