【问题标题】:How do I insert some data into an Sqlite 3 database如何将一些数据插入 Sqlite 3 数据库
【发布时间】:2011-09-20 14:11:15
【问题描述】:

通过以下代码,我正在从 Db 检索数据,但是我需要在 select 语句之前使用此代码将一些数据插入 Sqlite3 数据库。谁能告诉我需要将插入查询放在哪里以及如何执行它。

我正在通过以下代码选择数据:

sqlite3* database;

- (void)initializeDatabase 
{   
    list=[[NSMutableArray alloc] init];
    BOOL success;
    NSFileManager *filemanager=[NSFileManager defaultManager];
    NSError *error;
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory= [paths objectAtIndex:0];
    NSString *writablePath=[documentsDirectory stringByAppendingPathComponent:@"SymbolTalk.sqlite"];
    success=[filemanager fileExistsAtPath:writablePath];
    if(!success)
    {
        NSString *defaultDBPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"SymbolTalk.sqlite"];
        success=[filemanager copyItemAtPath:defaultDBPath toPath:writablePath error:&error];
        if(!success)
        {
            NSAssert1(0,@"Failed to create writable databasefile withw message %@.",[error localizedDescription]);
        }
    }

    //Specify where to get the database from
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory= [paths objectAtIndex:0];
    NSString *path=[documentsDirectory stringByAppendingPathComponent:@"SymbolTalk.sqlite"];

    //Open the database
    //might have to make database as property
    if(sqlite3_open([path UTF8String], &dataBase) ==SQLITE_OK)
    {
        const char *sql="select filename from scenes";
        sqlite3_stmt *statement;

        if(sqlite3_prepare(dataBase, sql, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW) 
            {
                //NSLog(@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]);
                [list addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]];
            }
        }
    }
}

【问题讨论】:

  • 你遇到了什么错误?
  • 此代码用于检索数据。我需要插入代码

标签: objective-c xcode ipad insert sqlite


【解决方案1】:
sqlite3_stmt *insert_statement = nil;

const char *sql = "INSERT INTO scenes (filename) VALUES(?)";
if (sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL) != SQLITE_OK) {
    NSAssert1(NO, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}

sqlite3_bind_text(insert_statement, 1, [newFilename UTF8String], -1, SQLITE_TRANSIENT);

if (sqlite3_step(insert_statement) == SQLITE_DONE) {
    // code if all ok
} else {
    NSAssert1(NO, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(database));
}

sqlite3_reset(insert_statement);
sqlite3_finalize(insert_statement);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多