как вставить данные в sqlite с помощью qt

#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-инъекцией, по крайней мере, если вы не выполните серьезную проверку целостности и достоверности, пользователь сможет ввести в базу данных все, что захочет.