【问题标题】:sqlite3_column_text returns NULL when there is data in the databasesqlite3_column_text 在数据库中有数据时返回 NULL
【发布时间】:2011-02-08 13:56:10
【问题描述】:

我的数据库定义如下

CREATE TABLE [problems] (
[p_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
[problem_name] VARCHAR(255) NOT NULL, 
[mixed_t1] INT NOT NULL, 
[mixed_t2] INT NOT NULL, 
[mixed_flair] INT, 
[mixed_gre] INT, 
[mixed_diffusion] INT, 
[mixed_adc] INT, 
[fat_sat_post_t1] INT)

在我的代码中,我试图运行一个看起来像这样的 SQL 查询

SELECT problem_name from problems WHERE mixed_t1=0

然后在代码中,我尝试将问题名称分配给 NSString,然后将 NSString 添加到 NUSMutableArray

if(sqlite3_step(statement) == SQLITE_ROW)
{

    NSString *problemName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];

    [dataSet addObject:problemName];

    [problemName release];
}

问题是我在 NSString *problemName 崩溃了

我收到以下崩溃消息

Current language:  auto; currently objective-c
2011-02-08 08:54:29.035 RadAppz[1332:207] *** Terminating app due to uncaught exception    'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'

* 首次抛出时调用堆栈:

我知道我正在获取数据,因为在终端中执行 RAW SQL 会返回 2 行。有人可以告诉我为什么数据返回为 NULL 吗?

【问题讨论】:

    标签: iphone-sdk-3.0 ios4 sqlite


    【解决方案1】:

    我相信您的问题是您正在检查第二列,而不是第一列。请注意,sqlite3_column_text 的定义表明最左边的列是第 0 列。

    http://www.sqlite.org/capi3ref.html#sqlite3_column_blob

    【讨论】:

    • 你是绝对正确的。有没有办法查看已编译的 SQL 查询(数据库会看到它的方式)?
    猜你喜欢
    • 2019-06-04
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 2021-07-03
    • 2019-05-15
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多