mysql ++查询失败

时间:2011-07-13 20:23:50

标签: c++ mysql++

我是mysql ++的新用户,正在寻找一些指针(双关语)。

问题:我的更新语句失败。

连接已打开。以前使用连接的语句有效。

我确定我正在尝试更新的记录存在。我可以用mysql查询工具看到它。 我确定CustomerId是正确的。

     // declaration of the customer id
     uint32_t CustomerId;

为什么无法更新?

   mysqlpp::Connection conn( true );
   try
   {
      if ( conn.connect( db_rw.Name, db_rw.Host, db_rw.User, db_rw.Password ) )
      {

         // *snip*  insert code here works fine.

         // this query fails
         mysqlpp::Query query = conn.query( "UPDATE customer SET AccountName=%2q, Active=%3, Password=%1 WHERE CustomerId=%0" );
         query.parse();
         mysqlpp::SQLQueryParms parms;
         parms.push_back( mysqlpp::sql_int( CustomerId ) );
         parms.push_back( mysqlpp::sql_blob( data, sizeof(data) ) ); //<- 16 byte binary blob
         parms.push_back( mysqlpp::sql_varchar( widget.AccountName->text().toAscii().data() ) );  // string
         parms.push_back( mysqlpp::sql_bool( widget.ActiveCheckBox->checkState() == Qt::Checked ? 1 : 0 ) );  // 
         mysqlpp::SimpleResult res = query.execute( parms );
      }
   }

如果我关闭连接的异常,它会无声地失败(result.info()方法什么也不返回)。

如果我在尝试转换为字符串时将异常转换为seg错误:

std::string Query::str(SQLQueryParms& p)
{
    if (!parse_elems_.empty()) {
        proc(p);
    }

    return sbuffer_.str();
}

2 个答案:

答案 0 :(得分:1)

Warren在邮件列表上打败了我的答案,但后人:

BLOB数据(Password)需要引用和转发。

使用SSQLS而不是模板化查询会自动处理此问题。

http://tangentsoft.net/mysql++/doc/html/userman/tutorial.html#id2776204

答案 1 :(得分:1)

有几个问题。

库无法正确转义二进制数据。

如果与该连接关联的用户没有更新权限,那么该库将崩溃而不是抛出异常。