#c #sqlite #qt4 #qml
#c #sqlite #qt4 #qml
Вопрос:
как вставить данные в sqlite
используя qt
:
query = QSqlQuery("INSERT INTO customer_details (rationcard_num, aadharcard_num, name)
values('" rationcard_num "','" aadharcard_num "','" name "')");
Комментарии:
1. В чем проблема с этим кодом?
2. Я привел рабочий пример, который строго соответствует официальным документам Qt. Если это решит вашу проблему (в чем я уверен), пожалуйста, примите ответ. Это будет полезно для будущих ссылок.
Ответ №1:
Вы можете изменить свой код и придать запросу такой вид, который, я думаю, прояснит ваши сомнения:
Подготовка инструкции запроса
QSqlQuery query;
query.prepare("INSERT INTO customer_details(rationcard_num
, aadharcard_num
, name)
VALUES(:rationcard_num
, :aadharcard_num
, :name); ");
Привязать значения
query.bindValue(":rationcard_num", your_value);
query.bindValue(":aadharcard_num", your_value);
query.bindValue(":name", your_value);
ОТЛАДКА
Вы можете использовать qDebug()
, чтобы определить, является ли ваш запрос исполняемым:
qDebug()<<query.exec()<<endl;
Это вернет true, если данные вставлены, и false в противном случае
Комментарии:
1. Обратите внимание, что
:
передname
в вашемvalues (...)
не хватает. Это тоже могло быть проблемой.
Ответ №2:
Вероятно, вы могли бы вызвать exec()
запрос или вызвать его напрямую с помощью exec(const QStringamp; query)
. Так, например, вы могли бы сделать:
QSqlQuery query;
query.exec("INSERT INTO customer_details (rationcard_num, aadharcard_num, name)"
"values('" rationcard_num "','" aadharcard_num "','"
name "')");
Однако, если вы хотите использовать подготовленную инструкцию, вы хотели бы создать запрос с QSqlDatabase, вызвать prepare(statement)
для этого и связать значения. Например:
QSqlQuery query;
query.prepare("INSERT INTO person (rationcard_num, aadharcard_num, name) "
"VALUES (:rationcard_num, :aadharcard_num, :name)");
query.bindValue(":rationcard_num", rationcard_num);
query.bindValue(":aadharcard_num", aadharcard_num);
query.bindValue(":name", name);
query.exec();
Ответ №3:
QSqlQuery query;
query.exec("INSERT INTO customer_details (rationcard_num,aadharcard_num,name)VALUES('" rationcard_num "','" aadharcard_num "','" name ")");
Комментарии:
1. Здесь повсюду написана атака SQL-инъекцией, по крайней мере, если вы не выполните серьезную проверку целостности и достоверности, пользователь сможет ввести в базу данных все, что захочет.