从SQL查询返回的结果始终为0

时间:2016-04-07 08:03:26

标签: c sqlite

以下函数用于检查表中是否存在特定条目。如果条目存在,则返回1.如果不存在,则返回0.但是,它只返回0.

使用的表:SAML_ATTRIBUTE_MAPPING = { 'uid': ('username', ), 'mail': ('email', ), 'cn': ('first_name', ), 'sn': ('last_name', ), } replace above with SAML_ATTRIBUTE_MAPPING = { 'uid': ('username', ), 'mail': ('email', ), 'first_name': ('first_name', ), 'last_name': ('last_name', ), } ,都是非NULL。 以下结果中显示的所有查询都在数据库中。

Database( ID int Primary Key, char(100) Place, char(100) Room )

结果:

//database is already open at this point
int searchForRoom(sqlite3 *db, char *place, char *room){
    int result = 1;
    sqlite3_stmt *stmt;

    //Create SQL statement
    char * sql = sqlite3_mprintf(
            "Select EXISTS(Select * From Database "
            "Where Place = '%q' and Room = '%q');"
                , place, room);

    sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);

    if (sqlite3_step(stmt) != SQLITE_ROW) {
        printf("ERROR 1 reading data: %s\n", sqlite3_errmsg(db));
    }
    //only this line of code does not output the correct result
    result = sqlite3_column_int(stmt, 0);

    if (sqlite3_step(stmt) != SQLITE_DONE) {
        printf("ERROR 2 reading data: %s\n", sqlite3_errmsg(db));
    }

    printf("%s, %s evals to %d\n", place, room, result);

    sqlite3_finalize(stmt);

    return result;
}

2 个答案:

答案 0 :(得分:0)

        "Select EXISTS(Select * From Database "

EXISTS查询返回0(当没有这样的行存在时)或1(当它们存在时)。它返回0,因此不存在这样的行。

答案 1 :(得分:0)

我不知道为什么或如何,但似乎重启我的电脑实际上解决了这个问题。该功能现在完美无缺。很抱歉浪费每个人的时间。