2011-07-13 193 views
1

我是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()方法返回任何內容)。

如果我把想轉換爲字符串時,它異常賽格故障:

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

    return sbuffer_.str(); 
} 
+0

該問題似乎是二進制的斑點。是否有一個ssqls修飾符來對二進制數據進行十六進制編碼? – Jay

回答

1

有幾個問題。

庫不能正確地轉義二進制數據。

如果與連接關聯的用戶沒有更新權限,那麼庫將會崩潰而不是拋出異常。