Исключение коннектора mySql (библиотека C ++ для mysql) при вставке строки в непустую таблицу - PullRequest
1 голос
/ 03 декабря 2009

Я почти не занимался программированием баз данных. Я работаю над примером кода для использования 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();

Это на платформе MS с использованием Visual Studio 2008.

База данных запущена и работает, и я могу использовать другие инструменты запросов к базе данных, чтобы просмотреть таблицы и т. Д.

EDIT:

Я вижу, что получаю исключение mysql:

«Использование неподдерживаемого типа буфера: 4191960 (параметр: 3)» errno 2036

EDIT:

Я не уверен, что принятый ответ был правильным, но он помог мне найти решение. В основном я удалил все ненулевые атрибуты, вынул нулевую заливку и установил первичный ключ в автоинкремент. Теперь все отлично работает

1 Ответ

1 голос
/ 03 декабря 2009

Я подозреваю, что это либо заполненный нулями столбец INT, либо столбец DATETIME (не уверен, что это за столбец 3).

Попробуйте создать таблицу с чем-то вроде:

`val3` INT(10) ZEROFILL ,

где 10 - количество позиций для заполнения нулями. Я также не уверен, что NULL необходим, поэтому я исключил его выше.

Кроме того, можете ли вы опубликовать созданную вами строку даты, если вышеприведенное не работает?

...