即使查询返回零行,if(result == NULL)也总是返回false

时间:2015-06-26 20:51:11

标签: c++ cassandra

我在我的应用程序中使用Cassandra C ++驱动程序。我正在观察很多崩溃事件。在调试之后,我发现即使查询输出为零行,if (result == NULL)也是false,当我遍历结果时,一个地方或其他地方崩溃。下面是代码示例。请为我建议任何解决方案。

const char* query = "SELECT variable_id, variable_name FROM aqm_wfvariables WHERE template_id = ?;";
    CassError rc = CASS_OK;
    CassSession* session = NULL;

    if((session=CassandraDbConnect::getInstance()->getSessionForCassandra())==NULL){
            return false;
    }

    CassStatement* statement = cass_statement_new(query, 1);
    cass_statement_bind_int32(statement, 0, wf_template_id );
    CassFuture* query_future = cass_session_execute(session, statement);
    cass_future_wait(query_future);

    rc = cass_future_error_code(query_future);
    if (rc != CASS_OK) {
            logMsg(DEBUG, 7, "cass_session_execute failed for query #%d:%s:%s", 1, __FILE__, query);
            cass_statement_free(statement);
            return false;
    }
    cass_statement_free(statement);
    const CassResult* result = cass_future_get_result(query_future);

    if (result == NULL) {
            cass_future_free(query_future);
            logMsg(DEBUG, 7, "No values are returned for  query #%d:%s:%s", 1, __FILE__, query);
            return false;
            }
    cass_future_free(query_future);

    CassIterator* row_iterator = cass_iterator_from_result(result);

    while (cass_iterator_next(row_iterator)) {

            const CassRow* row = cass_iterator_get_row(row_iterator);

            /* Copy data from the row */

1 个答案:

答案 0 :(得分:2)

你应该使用

 (result.cass_result_row_count>0)

而不是

   (result == NULL) 

验证查询是否返回零行。在您的代码中,result始终是CassResult的实例,并且在返回零行时不是空引用。

相关问题