开发者

MySQL/C++ and Prepared Statements: setInt always 0

I'm using the MySQL Connector/C++ library to insert values into a database table. I'm following the examples at

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

almost exactly. However, I can't seem to get prepared statements to work with value placeholders.

  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()开发者_如何学C);
  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.
  }

Any ideas on why I can't bind to the prepared statement? The other set* functions have the same result (e.g. if I use setString I get a string '0' in the resulting row).


I haven't done SQL in a while, but I think you're forgetting to put the column name there. The syntax should be:

INSERT INTO TESTTBL (column_name) VALUES (?)

If you wanted to insert into multiple columns, you'd use comma delimiters:

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


Recompiling the C++ connector from source fixed this problem.

Probably a compiler setting in their pre-built binary that didn't agree with my project. I will talk to MySQL about this.

Thanks for the assistance.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜