J'utilise la bibliothèque MySQL Connector/C++ pour insérer des valeurs dans une table de base de données. Je suis les exemples àInstructions MySQL/C++ et Prepared: setInt always 0
http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html
presque exactement. Cependant, je ne peux pas sembler obtenir des déclarations préparées pour travailler avec des espaces réservés de valeur.
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.
}
Des idées sur les raisons pour lesquelles je ne peux pas me lier à l'instruction préparée? Les autres fonctions set * ont le même résultat (par exemple, si j'utilise setString, j'obtiens une chaîne '0' dans la ligne résultante).
Lorsque vous dites "insère toujours 0", voulez-vous dire que vous avez dix lignes de zéro dans la base de données? –
Oui, je reçois 10 lignes de zéro, peu importe ce que je passe à setInt(). Si je code en dur un nombre au lieu de '?' tout est bon. – Ryan