私はmysql ++の新しいユーザーで、いくつかのポインタ(punが意図している)を探しています。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回す場合:
BLOB
データ(Password
:
std::string Query::str(SQLQueryParms& p)
{
if (!parse_elems_.empty()) {
proc(p);
}
return sbuffer_.str();
}
問題はバイナリBLOBのようです。バイナリデータを16進数でエンコードするためのssqls修飾子はありますか? – Jay