Я вообще не занимался программированием баз данных. Я работаю с некоторым примером кода для использования MySQL Connector/С++.
Когда я запускаю следующий код, я получаю сбой в последней строке некоторого кода 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)» errno 2036
РЕДАКТИРОВАТЬ:
Я не уверен, что принятый ответ был правильным ответом, но это помогло мне найти решение. По сути, я удалил все ненулевые атрибуты, убрал нулевое заполнение и установил для первичного ключа автоинкремент. Теперь он работает нормально