2012-02-02 68 views
1

我正在使用MySQL C++连接器版本1.1.0。 这是我的代码看起来像:MySQL C++连接器MySQL_Prepared_Statement :: getUpdateCount错误

PreparedStatement *pStatement; 
connection->setAutoCommit(false); 

pStatement = connection->prepareStatement("UPDATE records " 
      "SET is_processed = ? " 
      "WHERE id = ?"); 

    //LOOP BEGIN 
    pStatement->setInt(1, is_processed); 
    pStatement->setString(2, record_id); 

    pStatement->execute(); 
    //LOOP END 

int updated_records; 

try 
{ 
    updated_records = pStatement->getUpdateCount(); 
} 
catch(SQLException&e) 
{ 
    cout << "ERROR: " << e.what(); 
    cout << " (MySQL error code: " << e.getErrorCode(); 
    cout << ", SQLState: " << e.getSQLState() << ")" << endl; 
} 

connection->commit(); 
connection->setAutoCommit(true); 

异常与下面的输出抛出:

ERROR: MySQL_Prepared_Statement::getUpdateCount (MySQL error code: 0, SQLState:) 

所以说完全没有。 getUpdateCount()函数有什么问题?有什么方法可以获得更详细的错误报告级别?

编辑

是否有任何其他方式来获得更新的行计数用mysql C++接口?

回答

1

我终于找到工作的解决方案:受影响的行

int updated_records = 0; 

    //LOOP BEGIN 
    pStatement->setInt(1, is_processed); 
    pStatement->setString(2, record_id); 

    updated_records += pStatement->executeUpdate(); 
    //LOOP END 

cout << updated_records; 

executeUpdate()返回数量和它的作品没有任何错误,所以这对我来说足够。

1

为了澄清他人,因为我很困惑;像这样做:

pstmt = con->prepareStatement ("UPDATE localdata SET Val = ? WHERE ID = ?"); 
pstmt->setDouble (1, 7.77); // first "?" 
pstmt->setInt (2, 0); // second "?" 
pstmt->executeUpdate(); 

诀窍是根据它们的表类型和顺序在语句中设置值。

1

我也遇到了这个问题。我最终看了一下源代码。看起来源明确会抛出一个异常。

uint64_t 
MySQL_Prepared_Statement::getUpdateCount() 
{ 
    checkClosed(); 
    throw MethodNotImplementedException("MySQL_Prepared_Statement::getUpdateCount"); 
    return 0; // fool compilers 
}