Qt开发,将数据库封装

来源:互联网 发布:马尔科夫人力资源矩阵 编辑:程序博客网 时间:2024/06/06 07:24

开发环境vs2010+Qt4.8.6
项目目录树:
SourceFiles:
- main.cpp
- UserSqlClass.h
- UserSqlClass.cpp

SQL:
- sql_interface.h
- sql_interface.cpp

main.cpp

#include <QtGui/QApplication>#include <QtCore>#include <QtSql>int main(int argc,char *argv[]){    QApplication a(argc,argv);    UserSqlClass w;    w.show();    return a.exec();}

数据库类SqlClass的声明形式:
sql_interface.h

class SqlClass : publc QObject{    Q_OBJECTprivate:    QSqlDatabase* db;public:        SqlClass(QObject* parent = 0);    virtual ~SqlClass();public:    bool OpenDatabase();};

类SqlClass的实现
sql_interface.cpp

SqlClass::SqlClass(QObject* parent):QObject(parent){}bool SqlClass::OpenDatabase(){    db = &QSqlDatabase::addDatabase("QODBC","xxxx");    if(!db->isValid())    {        qDebug() << db->lastError().text();        return false;    }    db->setHostName("xxx,xx,xx,xx");    db->setDatabaseName("DRIVER={SQL SERVER};SERVER=xx.xx.xx.xx;DATABASE=xxx");    db->setUserName("xxx");    db->setPassword("123456"):    if( !db->open() )    {        QMessageBox::warning(NULL,"database error","Cannot open DB",QMessageBox::Cancel);        return false;    }    return true;}SqlClass::~SqlClass(){}

UserSqlClass类的声明形式。
UserSqlClass.h

class UserSqlClass : public QMainWindow{    Q_OBJECTprivate:    Ui::UserSqlClass ui;    SqlClass* mainSql;public:    UserSqlClass(QWidget *parent=0,Qt::WFlags flags = 0);    ~UserSqlClass();};

UserSqlClass的构造函数:
UserSqlClass.cpp

UserSqlClass::UserSqlClass(QWidget *parent,Qt::WFlags flags) : QMainWindow(parent,flags){    ui.setupUi(this);    mainSql = new SqlClass(this);}UserSqlClass::~UserSqlClass(){}

这里很多都是比较基础的知识点,不做过多解释。
主要讲解的是SqlClass类的声明。
QObject是所有Qt类的基类,所有如果像需要用到信号槽的最好是需要继承QObject,而类SqlClass声明里的Q_OBJECT宏也是必须的。
还要注意的是SqlClass的析构函数使 虚析构函数,这样可以在释放的时候向下释放,相关知识可查虚析构函数。
原本这里的db设置是打算写成传参函数的,这样的扩展性会比较强一点,而这里主要用于做简单例子也就免去了。

还有最最总要的一点是将,QSqlDatabase db,SqlClass mainSql声明为指针,这里可保证是对同一次链接对象进行操作。面向对象的思想就是将一次链接视为一个对象,这个对象就可以执行SQL操作。

0 0
原创粉丝点击