c++ - MySQL/C++ 和准备好的语句 : setInt always 0

标签 c++ mysql prepared-statement

我正在使用 MySQL 连接器/C++ 库将值插入到数据库表中。我正在关注

中的示例

http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html

几乎完全正确。但是,我似乎无法获得准备好的语句来处理值占位符。

  sql::mysql::MySQL_Driver* driver = sql::mysql::MySQL_Driver::Instance();

  boost::shared_ptr<sql::Connection> conn(driver->connect("localhost", "", ""));
  conn->setSchema("TESTDB");

  boost::shared_ptr<sql::Statement> stmt(conn->createStatement());
  stmt->execute("DROP TABLE IF EXISTS TESTTBL");
  stmt->execute("CREATE TABLE TESTTBL (m_id INT)");

  boost::shared_ptr<sql::PreparedStatement> pstmt(conn->prepareStatement("INSERT INTO TESTTBL VALUES(?)"));
  for (int i = 0; i != 10; ++i) {
    pstmt->setInt(1, i);
    pstmt->executeUpdate();     // Always inserts 0.
  }

关于为什么我不能绑定(bind)到准备好的语句有什么想法吗?其他 set* 函数具有相同的结果(例如,如果我使用 setString,我在结果行中得到一个字符串“0”)。

最佳答案

我已经有一段时间没有使用 SQL 了,但我认为您忘记了将列名放在那里。语法应该是:

INSERT INTO TESTTBL (column_name) VALUES (?)

如果你想插入多列,你会使用逗号分隔符:

INSERT INTO TESTTBL (col1, col2, col3) VALUES (?,?,?)

关于c++ - MySQL/C++ 和准备好的语句 : setInt always 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709194/

相关文章:

java - 准备好的语句: Compare timestamp with granularity of minutes

c++ - 想要 ostringstream 修改传递的字符串

mysql - 我可以使用 Hibenrate hbm2ddl 在同一个数据库中创建 MyISAM 和 InnoDB 表吗

java - 预准备语句的 setBigDecimal 问题?

MySQL 在连接表上返回 Null = 0,并在一个表上进行过滤

mysql - 如何在sql server中使用from date和to date获取数据?

java - 在 db2 中使用准备好的语句准备的查询失败

c++ - 字符串插入 C++

c++ - 字符指针数组

C++ 我的表单应该位于各种窗口之上