我根本没有做过太多的数据库编程。我正在使用一些示例代码来使用 MySQL Connector/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();
这是在使用 Visual Studio 2008 的 MS 平台上。
数据库已启动并正在运行,我可以使用其他数据库查询工具查看表等。
编辑:
我看到了我得到的 mysql 异常:
“使用不支持的缓冲区类型:4191960(参数:3)”errno 2036
编辑:
我不确定接受的答案是否完全正确,但它帮助我找到了解决方案。基本上我删除了所有非空属性,取出零填充并将主键设置为自动递增。现在它工作正常