QT连接SQLite数据库(实现登陆注册)

大致简介

1、用SQLiteStudio构建 一个.db的数据库

2、前期准备:常用头文件的引入

#include <QSqlDatabase> //用于创建连接并打开数据库
#include <QSqlError>
#include <QDebug>
#include <QSqlQuery> //执行查询操作

3、将构造函数私有化

private: //构造函数私有化
    explicit database(QObject *parent = nullptr);
    static database *userDb;

4、调用QSqlDatabase的静态函数database创建一个连接

QSqlDatabase db = QSqlDatabase::database("smart-home-db");

5、创建一个关联的QSqlQuery对象,由QSqlQuery来实现数据库的增删查改工作

QSqlQuery  query(db);
query.addBindValue(username);
query.addBindValue(password);
query.addBindValue(phone);

6、获取登陆界面中输入栏的数据,与数据库中的数据进行比对,正确则跳转到主界面

7、获取注册界面中的输入栏数据,检测数据库中是否有相同数据,若没有则存入


例子:用户的登陆注册 

数据库建立

这里我建的数据库表名为:User

字段:username、password、phone

下面应修改对应的数据库路径,自己所建数据库不一样时应该更改

数据库连接部分

----------
database.h
----------
#ifndef DATABASE_H
#define DATABASE_H

#include <QObject>

class database : public QObject
{
    Q_OBJECT
public:
    static database *getdatabase();
//函数声明
    bool addRegiserUser(const QString &username,const QString &password,const  QString &phone);
    bool queryphone(const QString &phone);
    bool queryusername(const QString &username);
    bool querypassword(const QString &username,const QString &password);

signals:

public slots:

private: //构造函数私有化
    explicit database(QObject *parent = nullptr);
    static database *userDb;
};

#endif // DATABASE_H

-------------
database.cpp
-------------
#include "database.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QSqlQuery>

database* database::userDb = NULL;

database *database::getdatabase()
{
    if(!userDb){
        userDb = new database;
    } //new一个构造函数

    return userDb;
}

//注册功能
bool database::addRegiserUser(const QString &username, const QString &password, const QString &phone)
{
    //调用QSqlDatabase的静态函数databas创建了一个名为smart-home-db的连接
    QSqlDatabase db = QSqlDatabase::database("smart-home-db");
    
    //创建一个关联的QSqlQuery对象,由QSqlQuery来实现以下工作
    QSqlQuery  query(db);
    
    //将输入username、password、phone 的数据插入表中;
    query.prepare("INSERT INTO User (username,password,phone) "
                  "VALUES (?, ?, ?)");

    query.addBindValue(username);
    query.addBindValue(password);
    query.addBindValue(phone);
    bool ok = query.exec(); //判断打开数据库是否成功;
    if(!ok){
        qDebug() << "Fail add regiser user : " << query.lastError().text();
    }

    return ok;
}

//登陆的电话检测
bool database::database::queryphone(const QString &phone)
{
    QSqlDatabase db = QSqlDatabase::database("smart-home-db");
    QSqlQuery query(db);
    
    //判断数据库中是否存在所输入号码
    query.prepare("select *from User where phone=?");
    query.addBindValue(phone);
    bool ok = query.exec();
    if(!ok){
        qDebug() << "Fail query register phone" << db.lastError().text();
        return false;
    }
    if(query.next()){
        return true;
    }
    else{
        return false;
    }
}

//登陆的用户名检测
bool database::database::queryusername(const QString &username)
{
    QSqlDatabase db = QSqlDatabase::database("smart-home-db");
    QSqlQuery query(db);
    query.prepare("select *from User where username=?");
    query.addBindValue(username);
    bool ok = query.exec();
    if(!ok){
        qDebug() << "Fail query register username" << db.lastError().text();
        return false;
    }
    if(query.next()){
        return true;
    }
    else{
        return false;
    }
}


//登陆的密码检测
bool database::database::querypassword(const QString &username,const QString &password)
{
    QSqlDatabase db = QSqlDatabase::database("smart-home-db");
    QSqlQuery query(db);
    query.prepare("select *from User where username=? and password=?");
    query.addBindValue(username);
    query.addBindValue(password);
    bool ok = query.exec();
    if(!ok){
        qDebug() << "Fail query register password" << db.lastError().text();
        return false;
    }
    if(query.next()){
        return true;
    }
    else{
        return false;
    }
}

database::database(QObject *parent) : QObject(parent)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","smart-home-db");
    db.setDatabaseName("换成自己的数据库文件路径"); //这里我的路径是/Users/dongjiahuizi/Desktop/dong.db
    bool ok = db.open(); //打开数据库
    if(!ok){
       qDebug() << "Fail to open database,error:" ;/*<< db.lastError.text();*/
    } //检测输出
}

登陆部分

----------
login.cpp
----------
#include "login.h"
#include "ui_login.h"
#include "majorwindow.h"
#include "registerwindow.h"
#include "database.h"
#include <QString>
#include <QDebug>
#include <QMessageBox>

Login::Login(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Login)
{
    ui->setupUi(this);
    re = new registerwindow;
}

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

void Login::on_pushButton_3_clicked()
{
    MajorWindow *major = new MajorWindow;
    //获取用户名输入框的数据
    QString username = ui->lineEdit->text();
    //获取密码输入框的数据
    QString password = ui->lineEdit_2->text();

    database *userDb = database::getdatabase();
    if(userDb->queryusername(username)){
        //在数据库中查询到了就跳转到主页
        if(userDb->querypassword(username,password)){
            major->show();//跳转到major页面
            this->close(); //关闭登陆页面
        }
        //在数据库中查询不到即弹出信息错误窗口
        else{
            QMessageBox::information(NULL,"登录","密码错误",QMessageBox::Ok);
            return;
        }
    }
    else{
        QMessageBox::information(NULL,"登录","用户名不存在",QMessageBox::Ok);
        return;
    }
}

//记住密码框,点击显示小勾
void Login::on_pushButton_2_clicked()
{
    if(flag == true){
        ui->pushButton->setText(" ");
        flag = false;
    }
    else{
        ui->pushButton->setText("√");
        flag = true;
    }
}

//用户注册页面跳转
void Login::on_pushButton_5_clicked()
{
    re->show();
}

----------
login.h
----------
#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include "registerwindow.h"

namespace Ui {
class Login;
}

class Login : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButton_3_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_5_clicked();

private:
    Ui::Login *ui;
    bool flag = false;
    registerwindow *re; //注册页面
};

#endif // LOGIN_H

注册部分

----------
register.h
----------
#ifndef REGISTERWINDOW_H
#define REGISTERWINDOW_H
#include <QWidget>

namespace Ui {
class registerwindow;
}

class registerwindow : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

private:
    Ui::registerwindow *ui;
};

#endif // REGISTERWINDOW_H

-------------
register.cpp
-------------
#include "registerwindow.h"
#include "ui_registerwindow.h"
#include "database.h"
#include <QString>
#include <QDebug>
#include <QMessageBox>

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

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

void registerwindow::on_pushButton_clicked()
{
    //获取输入的用户名、密码、电话分别存入username、password、phone对象中;
    QString username = ui->lineEdit->text();
    QString password = ui->lineEdit_2->text();
    QString phone = ui->lineEdit_3->text();

//控制台输出测试部分
    qDebug() << "username : " << username;
    qDebug() << "password : " << password;
    qDebug() << "phone    : " << phone;

//
    database *userDb = database::getdatabase();

//判断用户名在数据库中是否存在,违规弹出注册失败弹窗
    if(userDb->queryusername(username)){
        QMessageBox::information(NULL,"注册","用户名已被注册",QMessageBox::Ok);
        return;
    }
//判断手机号在数据库中是否存在,违规弹出注册失败弹窗
    if(userDb->queryphone(phone)){
        QMessageBox::information(NULL,"注册","手机号已被注册",QMessageBox::Ok);
        return;
    }
//打开数据库
    bool ok = userDb->addRegiserUser(username,password,phone);
    if(!ok){
        QMessageBox::information(NULL,"注册","注册失败",QMessageBox::Ok);
    }else{
        QMessageBox::information(NULL,"注册","注册成功",QMessageBox::Ok);
    }
}

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小半、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值