select - sqlite3 在数据库中插入和读取BLOB数据

标签 select insert sqlite blob

我需要读取 BLOB 数据并将其写入数据库。这是我的结构表

    #define CREATE_TABLE_USERS_SQL "CREATE TABLE IF NOT EXISTS %@ ( \
UserID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \
Name VARCHAR(50), \
Image BLOB);"

如何将它插入数据库,然后从中检索?

环境:iPhone SDK 4.1 SQLite3 数据库。

此代码失败:

        NSData * buf2 = [[NSData alloc] init];
        sqlite3_column_blob(statement, 5);
        buf2 = sqlite3_column_bytes(statement, 5);
        user.image = [UIImage imageWithData: buf2];

最佳答案

谢谢大家!!在您的帮助下,我已经解决了问题,并希望与像我一样的 future 初学者分享结果。)

-(void) addToDB
{
    NSLog(@"\nCreating db");
    NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
    int res = SQLITE_ERROR;


    res = sqlite3_open([@"aa.sql" UTF8String], &database);
    res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);

    sqlite3_stmt *updStmt =nil; 

    const char *sql = "INSERT INTO Images (image1) VALUES (?);";
    res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);

    if(res!= SQLITE_OK)
    {
        NSLog(@"Error while creating update statement:%s", sqlite3_errmsg(database));
    }

    UIImage *img = [UIImage imageNamed: @"flower.png"];
    NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];

    res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , SQLITE_TRANSIENT);

    if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
    {
        NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
        sqlite3_reset(updStmt);
    } 

    res = sqlite3_reset(updStmt);
    res = sqlite3_close(database);
}

-(void) readFromDB
{
    NSLog(@"\nReading from db");

    NSString *query = @"SELECT image1 from Images";
    int res = SQLITE_ERROR;
    int len = 0;

    res = sqlite3_open([@"aa.sql" UTF8String], &database);

    sqlite3_stmt *statement;
    res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);

    if (res == SQLITE_OK)
    {
        if (sqlite3_step(statement) == SQLITE_ROW)
        {
            len = sqlite3_column_bytes(statement, 0);
            NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];           


            UIImage *img = [[UIImage alloc] initWithData:imgData];

            self.view1.image = img;

        }
    }
    sqlite3_finalize(statement);

    res = sqlite3_close(database);
}

关于select - sqlite3 在数据库中插入和读取BLOB数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215505/

相关文章:

sql - 使用CTE在SQL中生成测试数据

javascript - 如何检查并请求 secret 表单是否打开下一页

mysql - 强制hibernate在MySQL中以单次插入的方式插入批处理数据

sql-server - SQL Server 2008 Express 到 SQLite

MySQL SELECT 输出同一行中每个 id 的下一个日期

mysql - 有没有办法自动在表中的所有选定字段前面添加字符串?

mysql - 将数据填充到具有 m :m Relationships 的表中

java - MongoDB Java驱动程序: Insert document if it does not exist else do nothing

database - SQLite 是用于研究的大型只读数据库的不错选择吗?

android - 我想在 SQLite 中添加数据后更新我的 ListView