我正在尝试使用Qt及其SQL处理部分编写一个简单的应用程序。我已成功连接到数据库,但是无论是SELECT还是INSERT,我都无法对它运行任何查询。 (该数据库是使用SQLite3开发的)
这是处理SQL部分的类的构造函数:
SQLHandler::SQLHandler(QObject *parent, QString dbname) : QObject(parent)
{
dbName = dbname;
database = QSqlDatabase::addDatabase(DATABASE_NAME);
database.setDatabaseName(dbName);
connectionState = database.open();
}
这是一个片段,我试图验证用户填写的两个字段:
bool SQLHandler::LoginValidation(const QString username, const QString password)
{
QSqlQuery loginQuery("SELECT * FROM Cont WHERE Username = " +
username + " AND Parola = " + password + ";", database);
if(!loginQuery.exec())
qDebug() << loginQuery.lastError() << username << password << loginQuery.lastQuery();
while( loginQuery.next() )
{
if( loginQuery.value(0).toString() == username && loginQuery.value(1).toString() == password )
{
return true;
}
}
return false;
}
每当我运行此SELECT时,都会收到QSqlError(“”,“无法读取行”,“无查询”)错误。
任何帮助将不胜感激!
答案 0 :(得分:1)
您不应串联来构建查询,因为除了使它容易受到SQL Injection攻击之外,您还会错误地构建查询,而是使用占位符:
bool SQLHandler::LoginValidation(const QString & username, const QString & password)
{
QSqlQuery loginQuery("SELECT * FROM Cont WHERE Username = ? AND Parola = ?", database);
loginQuery.addBindValue(username);
loginQuery.addBindValue(password);
if(!loginQuery.exec())
// ...