将行插入非空表时的mySql Connector异常(用于mysql的C ++库)

时间:2009-12-03 03:24:39

标签: c++ mysql crash mysql-connector

我根本没有做太多的数据库编程。我正在使用一些示例代码来使用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

编辑:

我不确定接受的答案是否正确答案,但它帮助我找到了解决方案。基本上我删除了所有非null属性,取出零填充并将主键设置为自动递增。现在它工作正常

1 个答案:

答案 0 :(得分:1)

我怀疑它是零填充的INT或DATETIME列(不确定哪个是第3列)。

尝试使用以下内容创建表格:

`val3` INT(10) ZEROFILL ,

其中10是零填充的位置数。我也不确定NULL是否必要,所以我将其排除在上面。

另外,如果以上内容不起作用,您可以发布您创建的日期字符串吗?