• 5470阅读
  • 3回复

关于sqlite的select [复制链接]

上一主题 下一主题
离线shifan
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-28
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
void loginDialog::emptyCheck()
{
    if(m_ui->lineEdit->text().isEmpty()||m_ui->lineEdit_2->text().isEmpty())
    {
        QMessageBox::information(this,"Wrong","Something is left empty");
        return;
    }
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("manager.db");
    if(!db.open())
    {
        qDebug()<<db.lastError();
        QMessageBox::information(0,"Fail","Fail to connect the database");
        QMessageBox::information(0,"Wrong","The user is not exist");
        db.close();
        return;
    }

    QSqlQuery query(db);
    QSqlRecord rec;
    query.prepare("SELECT id FROM users WHERE name=:loginName AND password=:loginPassword");
    query.bindValue(":loginName",m_ui->lineEdit->text());
    query.bindValue(":loginPassword",m_ui->lineEdit_2->text());

    if(!query.exec())
    {
        qDebug()<<query.lastError();
        QMessageBox::information(0,"Fail","SELECT operation is failed");
        QMessageBox::information(0,"Wrong","The user is not exist");
        db.close();
        return;
    }
    else
    {
        rec=query.record();
    }

    if(!query.isValid())
    {
        QMessageBox::warning(0,"Wrong","The user is not exist");         //运行时到这里
        db.close();
        return;
    }
    else
    {
        userId=query.value(0).toString();
    }
QMessageBox::information(0,"finally",userId);
    db.close();
    this->setResult(QDialog::Accepted);
    this->hide();
}

运行时总是提示The user is not exist。相应代码标注如上。
不知道是什么原因?
注:当我在命令行中使用sqlite来查询user表内的内容的时候
使用SELECT id FROM users WHERE name=**** AND password=*****
发现有记录。
离线mecland
只看该作者 1楼 发表于: 2009-11-28
QSqlQuery query(db);
QSqlRecord rec;
query.prepare("SELECT id FROM users WHERE name=:loginName AND password=:loginPassword");
query.bindValue(":loginName",m_ui->lineEdit->text());
query.bindValue(":loginPassword",m_ui->lineEdit_2->text());
改为
QSqlQuery query(QString("SELECT id FROM users WHERE name='%1' AND password='%2''").arg(m_ui->lineEdit->text()).arg(m_ui->lineEdit_2->text()), db);
name和password字段应该为字符型吧, 应该加'号吧
离线shifan
只看该作者 2楼 发表于: 2009-11-29
改为:
QString excuteSQL=QString("SELECT name FROM users WHERE name='%1' AND password='%2'").arg(m_ui->lineEdit->text()).arg(m_ui->lineEdit_2->text());
    
query.prepare(excuteSQL);
还是不行

我有一个疑问,在处理这种利用第三方插件的部分的时候,QT的bindValue或arg应该不是直接替换字符串的吧,因为QString和String毕竟是不同的类型。那么QT的运作机理中,是在什么时候做哪些操作呢?主要是对QString。
离线shifan
只看该作者 3楼 发表于: 2009-11-29
我的问题解决了!
if(!query.isValid())
    {
        QMessageBox::warning(0,"Wrong","The user is not exist");         //运行时到这里
        db.close();
        return;
    }
中if的判断条件改为!query.first(),就成功了。
原因好像是query要放置在一个QSqlRecord上,query才会变成Valid.
但是不知道如何把QSqlQuery放在一个QSqlRecord上呢?这一点还是要请教大侠们。。。。
快速回复
限100 字节
 
上一个 下一个