【问题标题】:C++ MySQL prepareStatementC++ MySQL 准备语句
【发布时间】:2014-02-04 05:18:40
【问题描述】:
    sql::Connection *con;
    sql::PreparedStatement *pstmt;
    //connect

    pstmt = con->prepareStatement("UPDATE table_people SET name=?, age=?");

    pstmt->setString(1, s);

    pstmt->setInt(2, age());
    pstmt->execute();

std::string s是输入字符串,name列是VARCHARageINT

代码按预期更新所有行。 age 是正确的,但 name 没有正确更新,并且保存了奇怪的符号。请问为什么?

【问题讨论】:

  • “s”的确切类型是什么?是std::string?
  • std::string,是的
  • setString 的第二个参数期望什么类型?您的 s 变量是在调用 execute() 之前一直存在还是在此之前被销毁?
  • setString expects sql::SQLString 类型。我的变量在调用执行后仍然存在。
  • 您尝试pstmt->setString(1, s.c_str()); 是否只是为了看看传递一个 C 字符串是否会产生相同的结果?

标签: c++ mysql


【解决方案1】:

由于我的评论似乎是正确的,我将其作为答案发布:)

使用

pstmt->setString(1, s.c_str());

(即,传递一个实际的 C 风格字符串,而不是 std::string)。

认为我知道为什么这可以解决问题的解释,但由于我不能 100% 确定该解释,请查看我在问题下方的评论,了解我对它为何有效的想法.

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2011-09-16
    • 2011-12-13
    • 1970-01-01
    • 2012-12-18
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多