簡體   English   中英

即使查詢返回零行,if(result == NULL)總是返回false

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

我在我的應用程序中使用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引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM