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

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条)

报告相同问题?

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元