Qt-sqlite數據庫實戰

一、Qt數據庫實戰Demo

實驗目的: 

掌握QDataBase類的使用方法

掌握QtSQlite的連接方法

掌握QTablewidget等項視圖類的使用方法

實驗內容: 

1.QT的連接與查詢數據庫的方法,查看錶的使用

2.使用窗體編輯記錄的方法以及在表中顯示數據的方式 

實驗步驟

1.QT的連接與查詢數據庫的方法,查看錶的使用  

連接數據庫:

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

db.setDatabaseName("test.db");

QSqlQuery query;

if(!db.open())

{

qDebug()<<"Can't open !";

}  

else

qDebug()<<"can open !";          

查詢數據庫:

QSqlQuery query;

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

查詢語句:

insert into test_table values('2','he')

delete from test_table where id ='0' and name ='first'

update test_table set name ='first' where id ='3' 

查看錶的使用:

select 條件 from 表名 where 條件   

2.使用窗體編輯記錄的方法以及在表中顯示數據的方式

窗體編輯記錄主要使用到信號與槽、QLineEdit,主要是通過通過lineedit->text().tostring進行轉化然後結合sql語句進行操作,通過click事件觸發相應的槽函數的觸發實現。

 

在表中顯示數據的方式

QSqlQueryModel();

modal->setQuery("select * from test_table");

tableview = new QTableView;

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,SIGNAL(clicked()),this,SLOT(deleteData()));
    connect(updateBtn,SIGNAL(clicked()),this,SLOT(updateData()));
    connect(refreshBtn,SIGNAL(clicked()),this,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,"Error","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);
}

運行截圖:

發佈了32 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章