Я почти не занимался программированием баз данных. Я работаю над примером кода для использования 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:
Я не уверен, что принятый ответ был правильным, но он помог мне найти решение. В основном я удалил все ненулевые атрибуты, вынул нулевую заливку и установил первичный ключ в автоинкремент. Теперь все отлично работает