我根本沒有做太多的數據庫編程。我正在使用一些使用MySQL Connector/C++的示例代碼。將行插入非空表時,mySql連接器異常(用於mysql的C++庫)
當我運行下面的代碼時,我在某些std :: string代碼的最後一行發生崩潰 - 但它只在表不爲空時崩潰。如果表格是空的,它會插入該行並正常工作。如果表格非空,則崩潰。我很困惑。有什麼我做錯了主鍵或其他值? (列名已在此處更改,但其他代碼是逐字的)
當我查看std :: string模板代碼中的變量(我能看到的很少)時,看不到任何熟悉的值我試圖插入的數據 - 所以根本沒有任何幫助。我看到像「HY000」這樣的字符串值,但我不確定它是從哪裏來的。
最初我以爲它可能是日期字符串,但代碼工作正常與空表,然後崩潰時非空。這表明日期字符串工作正常。
prep_stmt = con->prepareStatement("INSERT INTO
sometable(val1, val2, val3, Date, val5, val6, val7)
VALUES (?, ?, ?, ?, ?, ?, ?)");
/*
`idLicenses` INT NOT NULL ,
`val1` VARCHAR(45) NOT NULL ,
`val2` INT NOT NULL ,
`val3` INT ZEROFILL NULL ,
`Date` DATETIME NOT NULL ,
`val5` VARCHAR(45) NOT NULL ,
`val6` VARCHAR(45) NOT NULL ,
`val7` VARCHAR(45) NOT NULL ,
*/
// val1, val5, val6 and val7 are std::strings, val2 and val3 are ints.
prep_stmt->setString(1, val1);
prep_stmt->setInt(2, val2);
prep_stmt->setInt(3, 0);
prep_stmt->setDateTime(4, /* I created some date string here*/);
prep_stmt->setString(5, val5);
prep_stmt->setString(6, val6);
prep_stmt->setString(7, val7);
prep_stmt->execute();
這是MS平臺使用Visual Studio 2008
數據庫運行起來,我可以使用其他數據庫查詢工具查看錶等
編輯:
我看到在看mysql的異常,我得到:
「使用不支持的緩衝區類型:4191960(參數:3)」 ERR沒有2036
編輯:
我不知道如果接受的答案是完全正確的答案,但它幫助我得到一個解決方案。基本上我刪除了所有非空屬性,取出零填充並將主鍵設置爲自動遞增。現在它工作正常
你可以發佈val1等的變量聲明嗎?此外,看起來像vale1的錯字。 – zooropa 2009-12-03 04:10:48
我假設「vale1」(etc)不是他的實際代碼的一部分,但他只是隱藏了他的世界實際的列名。 :) – Dolph 2009-12-03 04:17:18
是的 - 只是隱藏真實的價值。代碼編譯並運行。整數是整數,字符串是std :: strings。 – Tim 2009-12-03 04:25:20