加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Qt-sqlite数据库实战

发布时间:2020-12-12 20:00:33 所属栏目:百科 来源:网络整理
导读:一、Qt数据库实战Demo 实验目的: 掌握 QDataBase 类的使用方法 掌握 Qt 与 SQlite 的连接方法 掌握 QTab lewidget 等项视图类的使用方法 实验内容: 1.QT 的连接与查询数据库的方法,查看表的使用 2. 使用窗体编辑记录的方法以及在表中显示数据的方式 实验

一、Qt数据库实战Demo

实验目的:

掌握QDataBase类的使用方法

掌握QtSQlite的连接方法

掌握QTablewidget等项视图类的使用方法

实验内容:

1.QT的连接与查询数据库的方法,查看表的使用

2.使用窗体编辑记录的方法以及在表中显示数据的方式

实验步骤

1.QT的连接与查询数据库的方法,查看表的使用

连接数据库:

QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName("test.db");

QSqlQueryquery;

if(!db.open())

{

qDebug()<<"Can'topen!";

}

else

qDebug()<<"canopen!";

查询数据库:

QSqlQueryquery;

query.exec(“/*sql语句*/”)

查询语句:

insertintotest_tablevalues('2','he')

deletefromtest_tablewhereid='0'andname='first'

updatetest_tablesetname='first'whereid='3'

查看表的使用:

select条件from表名where条件

2.使用窗体编辑记录的方法以及在表中显示数据的方式

窗体编辑记录主要使用到信号与槽、QLineEdit,主要是通过通过lineedit->text().tostring进行转化然后结合sql语句进行操作,通过click事件触发相应的槽函数的触发实现。

在表中显示数据的方式

QSqlQueryModel();

modal->setQuery("select*fromtest_table");

tableview=newQTableView;

tableview->setModel(modal);

实战代码详解:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <qsql.h>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlDriver>
#include <QDebug>
#include <QFile>
#include <QSqlQueryModel>

#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>

#include <QTableView>

#include <QHBoxLayout>
#include <QVBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT
    
public:
    Widget(QWidget *parent = 0);
    ~Widget();
public:
    void ConnectDB();
    bool CreateTB();
    bool InsertData(QString id,QString name);
    bool SelectData();
    bool deleData(QString id,QString name);
    bool updData(QString id,QString name);
private slots:
    void addData();
    void deleteData();
    void updateData();
    void refreshData();
private:
    QPushButton *addBtn;
    QPushButton *delteBtn;
    QPushButton *updateBtn;
    QPushButton *refreshBtn;

    QLineEdit *idLine;
    QLineEdit *nameLine;

    QLabel *id;
    QLabel *name;

    QSqlQueryModel *modal;
    QTableView *tableview;
};

#endif // WIDGET_H
实现代码:
</pre><pre name="code" class="cpp">
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{

    ConnectDB();
    CreateTB();

    addBtn = new QPushButton(tr("add"));
    delteBtn = new QPushButton(tr("delete"));
    updateBtn = new QPushButton(tr("update"));
    refreshBtn = new QPushButton(tr("refresh"));

    idLine = new QLineEdit;
    nameLine = new QLineEdit;

    id = new QLabel(tr("id:"));
    name = new QLabel(tr("name:"));


    modal = new QSqlQueryModel();
    modal->setQuery("select * from test_table order by id");
    tableview = new QTableView;
    tableview->setModel(modal);

    QHBoxLayout *hbox1 = new QHBoxLayout;
    hbox1->addWidget(addBtn);
    hbox1->addWidget(delteBtn);
    hbox1->addWidget(updateBtn);
    hbox1->addWidget(refreshBtn);

    QHBoxLayout *hbox2 = new QHBoxLayout;
    hbox2->addWidget(id);
    hbox2->addWidget(idLine);
    hbox2->addWidget(name);
    hbox2->addWidget(nameLine);


    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(tableview);
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);

    setLayout(vbox);

    connect(addBtn,SIGNAL(clicked()),this,SLOT(addData()));
    connect(delteBtn,SLOT(deleteData()));
    connect(updateBtn,SLOT(updateData()));
    connect(refreshBtn,SLOT(refreshData()));
}

void Widget::ConnectDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("test.db");

    QSqlQuery query;

    if(db.open())
    {
        qDebug()<<"open !";
    }
    else
    {
        qDebug()<<"can't open !";
    }

}

bool Widget::CreateTB()
{
    QSqlQuery query;
    bool success = query.exec("create table if not exists test_table (id int primary key,name varchar)");

    if(!success)
    {
        qDebug()<<"create table false";
        qDebug() << query.lastError().text();
        return false;
    }
    else
    {
        qDebug()<<"create table success";
        QMessageBox::warning(this,"Error","create successful");
        return true;
    }
}

bool Widget::InsertData(QString id,QString name)
{
    QSqlQuery query;

    QString str;

    str = "insert into test_table values('";
    str += id;
    str += "','";
    str += name;
    str += "')";
    //测试专用
    qDebug() << str;
    bool s = query.exec(str);
    qDebug()<<s;

    if(s)
    {
        QMessageBox::warning(this,"conduct successful");
        return false;
    }

    QMessageBox::information(this,"message","conduct successful!");
    return true;

}

bool Widget::SelectData()
{
    QSqlQuery query;
    bool success = query.exec("select * from test_table");
    if(!success)
    {
        return false;
    }
    while(query.next())//query.next()指向查找到的第一条记录,然后每次后移一条记录
    {
        QString ele0=query.value(0).toString();//query.value(0)是id的值,将其转换为int型
        QString ele1=query.value(1).toString();
        qDebug()<<ele0<<ele1;//输出两个值
    }
    return true;
}


bool Widget::deleData(QString id,QString name)
{
    QSqlQuery query;

    QString str;

    str = "delete from test_table where id ='";
    str += id;
    str +="' and name ='";
    str += name;
    str +="'";
//测试专用
    qDebug() << str;
    bool s = query.exec(str);
    qDebug()<<s;

    if(!s)
    {

        return false;
    }

    return true;
}

bool Widget::updData(QString id,QString name)
{
    QSqlQuery query;

    QString str;

    str = "update test_table set name ='";
    str += name;
    str +="' where id ='";
    str += id;
    str +="'";
//测试专用
    qDebug() << str;
    bool s = query.exec(str);
    qDebug()<<s;

    if(!s)
        return false;

    return true;

}

void Widget::addData()
{
    QString Gid,Gname;
    Gid = idLine->text();
    Gname = nameLine->text();

    InsertData(Gid,Gname);
}

void Widget::deleteData()
{

    QString Did,Dname;
    Did = idLine->text();
    Dname = nameLine->text();

    deleData(Did,Dname);

}

void Widget::updateData()
{
    QString Uid,Uname;
    Uid = idLine->text();
    Uname = nameLine->text();

    updData(Uid,Uname);
}

void Widget::refreshData()
{
    modal->setQuery("select * from test_table order by id");
    //tableview = new QTableView;
    tableview->setModel(modal);
}

运行截图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读