如何从Sqlite文本字段中获取JSON?

时间:2011-12-20 21:27:40

标签: objective-c ios cocoa-touch sqlite

我已经设法将一些JSON存储到我的sqlite数据库中的一个字段,TEXT的长度(在sqlite文档中对文本字段大小没有限制)字段为1337.

我甚至尝试过varchar,但我的应用程序再次与SGABRT崩溃。我没有得到任何其他错误细节。

查看sqlite实用程序中的记录,数据完整且正常,我的查询显示如下。

我甚至替换了为什么查询和代码与另一个表中的记录一起使用。

我知道我应该使用Core Data,但这是一个现有应用,我目前无法转换它。

不确定如何继续?

NSString *ret = @"";
const char *sql = "select value from MyTable where item = 'json'";

sqlite3 *database;
int result = sqlite3_open(... db path function ...], &database);
... snip in not db and error code ...
sqlite3_stmt *statementTMP;

sqlite3_prepare_v2(database, sql, -1, &statementTMP, NULL);
    if (sqlite3_step(statementTMP) == SQLITE_ROW) {
        ret = [[NSString alloc] initWithUTF8String:
             (char *)sqlite3_column_text(statementTMP, 1)]; << Fails here
    }
sqlite3_finalize(statementTMP);
sqlite3_close(database);

修改

启动我的JSON数据

{"lowestday":"31","pfAppAdvAcSel":-1,"styleselec

进一步编辑

        char *test = (char *)sqlite3_column_text(statementTMP, 1);
        NSLog(@"value = %s", test); << (NULL)

1 个答案:

答案 0 :(得分:0)

问题是您错误地调用了sqlite3_column_text()。由于您只选择一个列(值),因此只有一列可以从中提取文本。在SQLite3中,列号从0开始,而不是1.因此,您应该将调用的第二个参数更改为sqlite3_column_text,而不是1。