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

if(result == NULL) is returning false always even when the query returns zero rows

本文关键字:返回 零行 查询 false NULL result if      更新时间:2023-10-16

我在应用程序中使用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的实例,当返回零行时,它不是null引用。