Работа со SQlite в qt
мне нужно сделать работу с локальной базой данных в моем приложении. В функции insertCategoryData у меня добавляются в бд данные с массива vector. При попытке что-то добавить в бд я получаю ошибку Failed to insert data: QSqlError("", "Parameter count mismatch", ""). Из-за чего может возникать такая ошибка?
struct CategoryData {
int id;
float amount;
QDate date;
};
DatabaseManager::DatabaseManager()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("data.db");
if (!db.open()) {
qDebug() << "Error: connection with database failed";
}
else {
qDebug() << "Database: connection ok";
QSqlQuery query;
QString createTableQueryUser = "CREATE TABLE IF NOT EXISTS users ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"username TEXT NOT NULL UNIQUE, "
"password TEXT NOT NULL)";
if (!query.exec(createTableQueryUser)) {
qDebug() << "Unable to create table 'users':" << query.lastError().text();
}
QString createTableQueryCategoryData = "CREATE TABLE IF NOT EXISTS CategoryData ("
"index INTEGER NOT NULL,"
"amount REAL NOT NULL, "
"date TEXT NOT NULL)";
if (!query.exec(createTableQueryCategoryData)) {
qDebug() << "Unable to create table 'CategoryData':" << query.lastError().text();
}
}
}
void DatabaseManager::insertCategoryData(const QVector<CategoryData>& data)
{
QSqlQuery query;
query.prepare("INSERT INTO CategoryData (index, amount, date) "
"VALUES (:index, :amount, :date)");
for (auto item : data) {
query.bindValue(":index", item.id);
query.bindValue(":amount", item.amount);
query.bindValue(":date", item.date.toString(Qt::ISODate));
if (!query.exec()) {
qDebug() << "Failed to insert data:" << query.lastError();
}
}
}
``