2010-05-11 27 views
0

我已經向我的表添加了一條記錄,該記錄自動遞增主鍵。我沒有運氣檢索這個新的價值。 MySQL文檔聲稱在查詢中使用SELECT LAST_INSERT_ID();。我已經這樣做了,但無法檢索結果。檢索LAST_INSERT_ID時獲取UInt64的無效參數()

根據結果集的元數據,數據類型爲BIGINT,列名爲LAST_INSERT_ID()。 C++連接器對結果集有getUInt64(),我認爲這是使用的正確方法。

ResultSet類聲明包含以下內容:

virtual uint64_t getUInt64(uint32_t columnIndex) const = 0; 
virtual uint64_t getUInt64(const std::string& columnLabel) const = 0; 

文檔沒有註明columnIndex是基於零個或一個基礎。我嘗試了兩種情況,並獲得sql::InvalidArgumentException

使用結果集元數據,我檢索列名並將其直接傳遞給getUInt64方法,但仍然收到sql::InvalidArgumentException。這不是一個好的指示(當提取數據時返回的列名不起作用)。

這裏是我的代碼片段:

std::string query_text; 
query_text = "SELECT LAST_INSERT_ID();"; 
boost::shared_ptr<sql::Statement> query(m_db_connection->createStatement()); 
boost::shared_ptr<sql::ResultSet> query_results(query->executeQuery(query_text)); 
long id_value = 0; 
if (query_results) 
{ 
    ResultSetMetaData p_metadata = NULL; 
    p_metadata = query_results->getMetaData(); 
    unsigned int columns = 0; 
    columns = p_metadata->getColumnCount(); 
    std::string column_label; 
    std::string column_name; 
    std::string column_type; 
    for (i = 0; i < columns; ++i) 
    { 
     column_label = p_metadata->getColumnLabel(i); 
     column_name = p_metadata->getColumnName(i); 
     column_type = p_metadata->getColumnTypeName(i); 
     wxLogDebug("Column label: \"%s\"\nColumn name: \"%s\"\nColumn type: \"%s\"\n", 
        column_label.c_str(), 
        column_name.c_str(), 
        column_type.c_str()); 
    } 
    unsigned int column_index = 0; 
    column_index = query_results->findColumn(column_name); 
    // The value of column_index is 1 (one). 

    // All of the following will generate sql::InvalidArgumentException 
    id_value = query_results->getUInt64(column_index); 
    id_value = query_results->getUInt64(column_name); 
    id_value = query_results->getUInt64(0); 
    id_value = query_results->getUInt64(1); 
    id_record.set_record_id(id_value); 
} 

這裏是調試輸出(從wxLogDebug):

10:50:58: Column label: "LAST_INSERT_ID()" 
Column name: "LAST_INSERT_ID()" 
Column type: "BIGINT" 

我的問題:如何檢索LAST_INSERT_ID()使用MySQL C++連接器?

我需要使用準備好的語句嗎?

我在使用Visual Studio 9(2008)的Windows Vista和Windows XP上使用MySQL Connector C++ 1.0.5。

回答

0

已解決。

我在檢索數據並插入數據之前插入了一個query_results->next()