weixin_42508418
weixin_42508418
采纳率100%
2019-03-14 07:50 阅读 1.4k

Qt里面使用sqlite3连接成功,但是对数据库操作无响应

操作环境是 macOS, Qt 5.8

在代码外,我建好了 myData.db 数据库文件,已经进行了建表。我想把在ui
界面的输入框里面获得到的数据插入到数据库里面,但是运行后点击相关的插入按钮却插入不成功。
我是连上了数据库的,但是不能把获取到的数据插入到数据库,也没有报错什么的,不知道是否是我的数据库环境配置问题还是代码上忘了什么。请大家帮我看看,十分感谢。

这个是主页面的 cpp文件

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "NextWindow.h"

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

    //创建出新窗口
     nextWin = new NextWindow;
    connect(ui->switchLabel, &MyLabel::clicked, [=](){
        this->hide();
        nextWin->show();
    });


}



MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_signUp_clicked()
{
    //连接到数据库
//    myData = QSqlDatabase::addDatabase("QSQLITE");
    QSqlDatabase myData;

    if(QSqlDatabase::contains("qt_sql_default_connection")) {

        myData = QSqlDatabase::database("qt_sql_default_connection");  //判断一下
    }
    else {
        myData = QSqlDatabase::addDatabase("QSQLITE");
    }

    myData.setHostName("localhost");
    myData.setUserName("Root");
    myData.setPassword("");
    myData.setDatabaseName("myData.db");


    if(myData.open()) {
        qDebug() <<"数据库连接成功"<<endl;

        //取出创建的用户名,密码和手机号
        QString signName = ui->signNameBtn->text();
        QString signPassword = ui->signPassBtn->text();
        QString signPhone = ui->signPhoneBtn->text();

        //插入到数据库里面
        QSqlQuery sql;
        sql.prepare("INSERT INTO users (userName, password, email)"
                    "VALUES (:uerName, :password, :email)");
        sql.bindValue(":userName", signName);  //之前取出来的 Qstring的signName
        sql.bindValue(":password", signPassword);
        sql.bindValue(":email", signPhone);  //数据库里面的第三个写的是邮箱,不好改,下次得注意


        //提示数据插入成功没有
        if(sql.exec()) {
            QMessageBox::information(this, "Successful", "Insert data successful");

        }else {
             QMessageBox::information(this, "Not Inserted", "Data is not inserted ");
        }


    }else {
        QMessageBox::information(this, "Not connected", "database is not conntected");
    }


}

头文件

#include <QString>
#include<QSqlQuery>
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    //下个页面的指针
    NextWindow* nextWin;


private slots:

    void on_logInBtn_clicked(); //登录按钮

    void on_signUp_clicked();  //注册按钮

private:
    Ui::MainWindow *ui;
    QSqlDatabase myData;
};

#endif // MAINWINDOW_H

图片说明


我把错误打印出来了,QSqlError("", "Parameter count mismatch", "") 说是参数错误,我输出了一下从输入框获取的值,是成功的。所以应该是插入那一段代码有问题吧。但是我仔细看了一下我的数据文件,都是匹配的啊。。

图片说明

图片说明

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    weixin_42508418 weixin_42508418 2019-03-15 01:55

    setDataBaseName() 里面要完整的路径

    点赞 评论 复制链接分享
  • slevenxulianjie slevenxulianjie 2019-03-14 08:14

    在打印提示信息那儿,打印一下具体的错误
    sql.lastError()
    再根据具体的错误进行排查

    点赞 评论 复制链接分享

相关推荐