Qt多窗体之间的数据库操作

一年多之前就接触了Qt,一直也对它比较情有独钟,但是一直都是浅尝辄止,断断续续也没学到多少东西;前两天写一个带有登陆界面的客户端程序,由于初学,在数据库的连接和使用上遇到了问题,查阅了些资料,详情如下:

问题:解决Qt多窗体间连接查询数据库(SQLite)

解决方法1:采用数据库连接并选定数据库的方法

1)在main.cpp中定义函数:

#include <QSqlDatabase>

#include <QSqlError>
#include <QMessageBox>


bool CreateConn()

{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "conn");
    //db.setHostName("host");
    //db.setDatabaseName("dbname");
    //db.setUserName("username");
    //db.setPassword("password");
    db.setDatabaseName("data.db");
    if (!db.open())
    {
        QMessageBox::critical(NULL, QObject::tr("Database Error"), db.lastError().text());
        return false;
    }
    return true;
}

2)在main函数中建立数据库连接

int main(int argc, char *argv[])

{
    QApplication a(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
 
    if (!CreateConn())
        return 1;
    ......
}

3)在需要调用数据库进行查询的地方定义数据库到已经建立的连接即可

//database

在使用的类中定义数据库db及查询的query为成员变量;

//头文件中      

    QSqlDatabase db;
    QSqlQuery *query;
//源文件中
    db = QSqlDatabase::database("conn");
    query = new QSqlQuery(db);
    query->setForwardOnly(true);
下面就可以用query进行数据库的操作了。

解决方法2:采用全局变量的方法(该方法不是很好)

1)自己封装一个数据库的类,如下

#ifndef QLDATABASE_H

#define QLDATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
class QLDatabase
{
public:
    QLDatabase();
    //functions
    bool CreateConn();
    void Close();
    void DeleteTable(QString strTableName);
    //test functions
    void TestInsert();
    void TestQuery(QString strCmdText);
    void TestCreateTable();
    void TestInsertItem();
//private:
    QSqlDatabase db;
public:
    QSqlQuery *query;
    bool bDatabaseFlag;
};
static QLDatabase *db;
#endif // QLDATABASE_H
可以在类中实现一些test功能函数及一些数据库操作函数

在类的构造函数中调用CreateConn()函数建立连接,并返回数据库的链接状态到bDatabaseFlag成员变量。

#include "qldatabase.h"

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
 
QLDatabase::QLDatabase()
{
    bDatabaseFlag = CreateConn();
}
 
bool QLDatabase::CreateConn()
{
    db = QSqlDatabase::addDatabase("QSQLITE", "conn");
    //db.setHostName("host");
    //db.setDatabaseName("dbname");
    //db.setUserName("username");
    //db.setPassword("password");
    db.setDatabaseName("data.db");
    if (!db.open())
    {
        QMessageBox::critical(NULL, QObject::tr("Database Error"), db.lastError().text());
        return false;
    }
    else
    {
        query = new QSqlQuery(db);
        query->setForwardOnly(true);
        return true;
    }
}

2)初始化类

在第一次使用数据库的类的原文件中

#include "logindialog.h"

#include "ui_logindialog.h"
#include <QMessageBox>
#include "qldatabase.h"
LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
    //设置最小化按钮
    Qt::WindowFlags flags = Qt::Dialog;
    flags |= Qt::WindowMinimizeButtonHint;
    setWindowFlags(flags);
    //固定窗口大小
    this->setFixedSize(this->size());
    //temperory codes
    ui->txtUser->setText("schades");
    ui->txtPwd->setText("lhm871118");
    ui->cboPwd->setChecked(true);
    //数据库
    db = new QLDatabase();
}
3)每一次调用都重新new一下

这样只要#include自己封装的数据库类的头文件,即可调用全局变量db对数据库进行相应操作,但是每一次new一下会强迫清除原有的数据库连接,建立新的数据库连接。不建议采用第二种方法。


以上仅仅是一个初学小菜鸟的尝试,请高手点评指正。



  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
很高兴能为您提供关于MySQL连接和Qt连接数据库的文档。 MySQL连接: MySQL是一种流行的开源数据库管理系统,可以在各种操作系统上运行。以下是如何使用C++代码连接MySQL数据库的步骤: 1. 安装MySQL C++连接器。这是一个允许C++程序与MySQL数据库通信的库。可以从MySQL官方网站下载并安装。 2. 在C++代码包含MySQL连接器头文件。这通常是“mysql.h”。 3. 初始化MySQL连接器。使用“mysql_init”函数创建一个MYSQL对象。这将分配内存并设置默认值。 4. 连接到MySQL服务器。使用“mysql_real_connect”函数连接到MySQL服务器。需要提供服务器名称、用户名、密码和数据库名称。 5. 执行SQL查询。使用“mysql_query”函数执行SQL查询。可以使用任何有效的SQL语句,例如“SELECT”或“INSERT”。 6. 处理结果。使用“mysql_store_result”函数检索查询结果。可以使用“mysql_fetch_row”函数遍历结果集并检索每一行的数据。 7. 关闭连接。使用“mysql_close”函数关闭MySQL连接。 Qt连接数据库Qt是一个跨平台的C++应用程序开发框架,具有丰富的GUI和数据库支持。以下是如何使用Qt连接数据库的步骤: 1. 安装Qt。可以从Qt官方网站下载并安装。 2. 创建Qt项目。可以使用Qt Creator创建新的Qt项目。选择“应用程序”模板,并确保选使用Sqlite”选项。 3. 在Qt项目添加数据库支持。在Qt Creator打开“项目”菜单,选择“属性”选项卡,然后选择“Build”选项卡。在“qmake”选项卡添加以下行: ``` QT += sql ``` 4. 在Qt项目添加数据库驱动程序。在Qt Creator打开“项目”菜单,选择“属性”选项卡,然后选择“Build”选项卡。在“qmake”选项卡添加以下行: ``` QT += sqlite ``` 5. 在Qt项目添加数据库连接。在Qt Creator打开“窗体设计器”视图,然后使用“工具箱”的“Sql”工具添加新的数据库连接。输入数据库名称、主机名、用户名和密码。 6. 使用Qt项目数据库连接。在Qt Creator打开“源代码”视图,然后在需要连接数据库的位置创建一个新的“QSqlDatabase”对象。使用“QSqlDatabase::addDatabase”函数添加新的数据库连接,并使用“QSqlDatabase::open”函数打开连接。 7. 执行SQL查询。使用“QSqlQuery”类执行SQL查询。可以使用任何有效的SQL语句,例如“SELECT”或“INSERT”。 8. 处理结果。使用“QSqlQuery::next”函数遍历结果集并检索每一行的数据。 9. 关闭连接。使用“QSqlDatabase::close”函数关闭数据库连接。 希望这些步骤可以帮助您连接MySQL和Qt数据库。如果您需要更多帮助,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值