Qt 没有查询无法获取行
我正试图编写一段代码,从QTableView获取所选项目并将其从数据库中删除Qt 没有查询无法获取行,qt,sqlite,Qt,Sqlite,我正试图编写一段代码,从QTableView获取所选项目并将其从数据库中删除 QModelIndex index = ui->tableView->selectionModel()->currentIndex(); QString value= ui->tableView->model()->data(index).toString(); qDebug() << "Value : " << value; QSqlDatabase d
QModelIndex index = ui->tableView->selectionModel()->currentIndex();
QString value= ui->tableView->model()->data(index).toString();
qDebug() << "Value : " << value;
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("TestDatabase.db");
if(!db.open())
{
qDebug() << db.lastError();
qFatal("Failed to connect");
}
QSqlQuery qry;
qry.prepare("DELETE * FROM movies WHERE Title='"+value+"'");
if(!qry.exec())
{
QMessageBox::critical(this, tr("error::") , qry.lastError().text());
}
db.close();
但是,我遇到了“无查询无法获取行”错误。如果你能帮我解决这个问题,我将不胜感激
更新:问题是我在DELETE之后放置了“*”。您的代码受到SQL注入的影响,因为您没有正确使用prepare。这也是您出现错误的原因。要以正确的方式使用prepare,它后面必须至少有一个bindValue。在您的情况下,类似于:
QSqlQuery qry;
qry.prepare("DELETE * FROM movies WHERE Title = :title");
qry.bindValue(":title", value);
if(!qry.exec()) //...
bindValue注意正确转义值,并且不会造成任何伤害
…如果您认为SQL注入不是问题,请与以下人员聊天: