当前位置:Gxlcms > 数据库问题 > 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

时间:2021-07-01 10:21:17 帮助过:4人阅读

  1. Linux下的qt安装,命令时:sudoapt-get install qt-sdk

  2. 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan/article/details/39565783

  3. 假设行想进数据库开发。须要安装libqt5sql5-mysql.命令是:

sudo apt-get install libqt5sql5-mysql

技术分享

4 创建一个项目

要调用数据库。须要加上QT += gui widgets sql  也就是说要加上sql

注意假设是在windows平台下:要将C:/MySQL/bin文件夹下的libmySQL.dll复制到项目编译后的生成的exe文件所在的同级文件夹下(比方文件夹E:\QT\build-Database01-Desktop_Qt_5_3_MinGW_32bit-Debug\debug下。在此文件夹下有Database01.exe)。比方截图:

技术分享

A 假设是在Linux文件夹下,输入下面命令:mysql-u root -p123456

创建数据库:

技术分享

B使用数据库d0718,并创建所需的数据库表

表内容例如以下:

CREATE TABLE `tcontact` (

 `username` varchar(32) NOT NULL,

 `mobile` varchar(16) NOT NULL,

 `mobile2` varchar(16) NOT NULL,

 `telephone` varchar(32) DEFAULT NULL,

 `home` varchar(32) DEFAULT NULL,

 `homeaddr` varchar(1024) DEFAULT NULL,

 `company` varchar(128) DEFAULT NULL,

 `companyaddr` varchar(1024) DEFAULT NULL,

 `title` varchar(16) DEFAULT NULL,

 PRIMARY KEY (`mobile`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tuser` (

 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘this is userid‘,

 `username` varchar(32) NOT NULL COMMENT ‘username‘,

 `password` varchar(32) NOT NULL COMMENT ‘password‘,

 `gender` int(11) NOT NULL COMMENT ‘1 is male 0 is female‘,

 PRIMARY KEY (`id`),

 UNIQUE KEY `username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 技术分享

技术分享

C 编写项目代码:

Database01.pro

SOURCES+=\

   main.cpp

 

QT+=gui widgets sql

 

CONFIG+=C++11

main.cpp

#include <QApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QWidget>
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    QWidget w;
 
    /*QT能够操作 QSLITE QODBC,QPLSQL 这些数据库*/
    //以下表示使用mysql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //设置数据库所在位置
    db.setUserName("root");       //设置数据库的username
    db.setPassword("123456");     //设置数据库的password
    db.setDatabaseName("d0718");  //设置数据库名称
    bool bRet = db.open();        //打开数据库连接
    if(bRet == false)
{
    //说明能够通过db.lastError()的方式得到错误信息
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    w.show();
    return app.exec();
}

执行结果:

技术分享

 

案例二:

Database01.pro的内容例如以下:

SOURCES += \
    main.cpp \
    Widget01.cpp
 
QT += gui widgets sql
#假设用到C++11的才会用到。否则不用
CONFIG += C++11
 
HEADERS += \
    Widget01.h

Widget01.h的内容例如以下:

#ifndef WIDGET01_H
#define WIDGET01_H
 
#include <QWidget>
 
class Widget01 : public QWidget
{
    Q_OBJECT
public:
    explicit Widget01(QWidget *parent = 0);
 
signals:
 
public slots:
 
};
 
#endif // WIDGET01_H

Widget01.cpp的内容例如以下:

#include "Widget01.h"
 
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlResult>
 
#include <QDebug>
 
Widget01::Widget01(QWidget *parent) :
    QWidget(parent)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("d0718");
    bool bRet = db.open();
    if(bRet == false)
    {
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    //向数据库中加入数据
    db.exec("insert into tuser(username,password,gender) values(‘涂作权‘,‘123456‘,‘1‘)");
    db.close();
}

main.cpp的内容例如以下:

#include <QApplication>
#include "Widget01.h"
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    Widget01 w;
    w.show();
    return app.exec();
}

执行结果:

技术分享

 

案例2,使用QSqlTableModel

Database01.pro

SOURCES += \
    main.cpp \
    Widget02.cpp
 
QT += gui widgets sql
 
CONFIG += C++11
 
HEADERS += \
    Widget02.h

Widget02.h

#ifndef WIDGET02_H
#define WIDGET02_H
 
#include <QWidget>
 
class Widget02 : public QWidget
{
    Q_OBJECT
public:
    explicit Widget02(QWidget *parent = 0);


                  

	 	
                    
                    
                    
                    
                    
                
              
                    
                
                  

                    

人气教程排行