2009-11-10 58 views
2

我正在使用MySQL連接器/ C++庫將值插入到數據庫表中。我在MySQL/C++和準備好的語句:setInt始終爲0

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. 
    } 

關於爲什麼我無法綁定到準備好的語句的任何想法?其他set *函數具有相同的結果(例如,如果我使用setString,則在結果行中得到一個字符串'0')。

+0

當你說它「總是插入0」,你的意思是你在數據庫中得到10行零? – 2009-11-10 20:13:08

+0

是的,無論我傳給setInt(),我得到10行零。如果我硬編碼一個數字而不是'?'一切皆好。 – Ryan 2009-11-10 22:00:28

回答

1

重新編譯從源頭解決了這個問題的C++接口。

可能是一個編譯器設置在他們預先構建的二進制文件中,並不符合我的項目。我會和MySQL談這個。

感謝您的協助。

1

我有一段時間沒有做過SQL,但我想你忘了把列名放在那裏。語法應爲:

INSERT INTO TESTTBL (column_name) VALUES (?) 

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

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

這不是一個語法問題。硬編碼一個整數來代替?然後跳過setInt的調用工作正常。 – Ryan 2009-11-10 17:05:12