我正在使用 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/