关于QT里面连接sqlite出现QSqlQuery::exec: database not open的原因

一般情况下我们使用sqlite都是这么使用的

ql_Connect::Sql_Connect(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Sql_Connect)
{
    ui->setupUi(this);

    qDebug() << QSqlDatabase::drivers();

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("../info.db");

    if(!db.open())
    {
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }

    //设置模型
    model = new QSqlTableModel(this);
    //指定使用哪个表
    model->setTable("user");

    //把model放到view中
    ui->tableView->setModel(model);

    //显示model的数据
    model->select();
但是在query初始化的时候,不适用系统默认的数据库关联,而是**强制指定关联数据库** -------------------**QSqlQuery query(db)**;
qDebug() << QSqlDatabase::drivers();

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("../info.db");

//这里要改:
    db.open();
    
//    qDebug() << db.open();

    QString username = ui->userNameLEd->text();
    QString password = ui->pwdLEd->text();


    if(username == "")
        QMessageBox::warning(this,"","用户名不能为空!");
    else if(password == "")
        QMessageBox::warning(this,"","密码不能为空!");
    else
       {

        //sql语句在数据库中进行查询验证
        QString S = QString("select * from user where username ='%1'and password = '%2' ")
                .arg(username).arg(password);
                
       // QSqlQuery query; 这儿要改
        QSqlQuery query(db);
       
        query.exec(S);
        qDebug() <<query.exec(S);
        int row = queryRowCount(query);


         if(row == 1)
            {
            MyTcpClient *mytcpclient = new MyTcpClient;

            mytcpclient->show();
         }
         else
             QMessageBox::warning(this, tr("警告!"),tr("用户名或密码错误!"),QMessageBox::Yes);

          // 清空输入框内容
             ui->userNameLEd->clear();
             ui->pwdLEd->clear();

             //光标定位
             ui->userNameLEd->setFocus();


       }

试了半天发现还是不行 最后加了个db.open();就可以了

猜你喜欢

转载自blog.csdn.net/weixin_43599304/article/details/115409348