Qt与MySQL的连接与基本操作

Qt与MySQL间的通讯有两种方法.

注:需要在.pro文件中添加,QT +=sql

方法一:使用SQL模型类,该方法是Qt中更高层的类来进行数据库的访问,不需要SQL语法知识。

QSqlTableModel是SQL表格模型,一次只能操作一个SQL表的读/写模型,可以浏览和修改独立的SQL表。

首先建立在MySQL中建立数据库phm_db,并建立一个campss_data的数据表。

(1)建立创建数据库连接的头文件db_connection.h

#ifndef DB_CONNECTION_H
#define DB_CONNECTION_H

#include<QMessageBox>
#include<QSqlDatabase>

//创建一个默认的连接,即只有一个连接
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  //数据库类型
    db.setHostName("localhost");   //主机名
    db.setDatabaseName("phm_db");   //数据库名称
    db.setUserName("root");    //用户名
    db.setPassword("123456");   //密码
    if(!db.open())
    {
        QMessageBox::critical(0,"Cannot open database",
                              "Unable to establish a database connection",
                              QMessageBox::Cancel);
        return false;
    }
    db.open();
    return true;
}
#endif // DB_CONNECTION_H

(2)使用方法,创建连接,然后建立一个QSqlModelTable对象model,对model进行相应操作即可显示表。

//SQL表格模型。(模型/视图,MVC方法)
    //显示表:cmapass_data
    createConnection();
    model = new QSqlTableModel(this);
    model->setTable("cmapss_data");
    model->select();
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);    //设置编辑策略。
    ui->tableView->setModel(model);
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);  //设置视图为只读模式

结果显示如下:



方法二:通过Qt提供的数据库接口进行通讯,需要基本的SQL语句知识。

以登录界面与MySQL数据库中登录密码表进行校验为例。

(1)建立与数据库的连接,然后判断文本框中的内容是否与表中(第一行是序号,第二行是用户名,第三行是密码)内容相一致。建立数据库连接的方法同上,然后使用QSqlQuery结合SQL语句访问数据库内容。

注:db_login是自己建立的类

//读取界面上的登录信息,与数据库内容比较验证
bool db_login::VerificationLogin(QString username, QString password)
{
    //验证数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("phm_db");
    db.setUserName("root");
    db.setPassword("ckzhb");
    if (db.open())
    {
        QSqlQuery query(db);
        query.exec("select * from login_account");
        while(query.next())
        {
            QString account = query.value(1).toString().trimmed();  //获取数据库登录表中的账号名
            QString p = query.value(2).toString().trimmed();    //获取表中的密码
            if((username.trimmed() == account) && (p.trimmed() == password))
                return true;
        }
        db.close();
    }
    else
    {
        QMessageBox::critical(0,"Cannot open database",
                              "Unable to establish a database connection",
                              QMessageBox::Cancel);
        return false;
    }
}

(2)使用db_login类,正确则进入下一个界面,错误将输入框清零并弹出警告信息。

db_login database;
    if (database.VerificationLogin(ui->lineEditAccount->text().trimmed(),ui->lineEditPassword->text().trimmed()))
    {
        //正确匹配
        Func_Slet_Dialog *dialog = new Func_Slet_Dialog(this);
        dialog->show();
    }
    else
    {
        QMessageBox::warning(this,tr("警告"),tr("请输入正确的用户名或密码!"),QMessageBox::Yes);
        ui->lineEditAccount->clear();
        ui->lineEditPassword->clear();
        ui->lineEditAccount->setFocus();
        this->show();
    }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值