我在我的应用程序中使用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 */

最佳答案

你应该用

 (result.cass_result_row_count>0)

代替
   (result == NULL)

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

09-06 11:09