2009-12-03 47 views
1

我根本沒有做太多的數據庫編程。我正在使用一些使用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

編輯:

我不知道如果接受的答案是完全正確的答案,但它幫助我得到一個解決方案。基本上我刪除了所有非空屬性,取出零填充並將主鍵設置爲自動遞增。現在它工作正常

+0

你可以發佈val1等的變量聲明嗎?此外,看起來像vale1的錯字。 – zooropa 2009-12-03 04:10:48

+0

我假設「vale1」(etc)不是他的實際代碼的一部分,但他只是隱藏了他的世界實際的列名。 :) – Dolph 2009-12-03 04:17:18

+0

是的 - 只是隱藏真實的價值。代碼編譯並運行。整數是整數,字符串是std :: strings。 – Tim 2009-12-03 04:25:20

回答

1

我懷疑它是你的零填充INT或DATETIME列(不知道哪一列是第3列)。

嘗試的東西,如創建表:

`val3` INT(10) ZEROFILL , 

,其中10位零填充的數量。我也不確定NULL是否有必要,所以我將它排除在上面。

此外,如果上述不起作用,您可以發佈您創建的日期字符串嗎?

+0

感謝您的建議 - 我會更新。奇怪的部分是爲什麼它在表空時工作,但不是當表中有一行時... – Tim 2009-12-03 04:28:30

+0

我會嘗試刪除表並創建它不同。 – Tim 2009-12-03 04:30:12

+0

我不確定這是否正確答案,但它幫助我找到了解決方案。基本上我刪除了所有非空屬性,取出零填充並將主鍵設置爲自動遞增。現在它工作正常 – Tim 2009-12-03 16:48:53