weixin_42508418 2019-03-14 07:50 采纳率: 100%
浏览 2136
已采纳

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 2019-03-15 01:55
    关注

    setDataBaseName() 里面要完整的路径

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog