QT 实现数据库的增删改查,排序

标准数据库常用基础语句:
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 desc; asc:升序 desc:降序
总数:select count() from table1;
总数:select count(field1) from table1;
求和:select sum(field1) from table1;
平均:select avg(field1) from table1;
最大:select max(field1) from table1;
最小:select min(field1) from table1;

源代码:
.pro

QT       += core gui sql

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include 

/* debug 和 打印************************************************************************************/
#include 

/*数据库相关头文件***********************************************************************************/
#include 
#include 
#include        //数据库记录相关

/*用户的宏定义**********************************************************************************/
#define MYDEBUG qDebug() << "[" <<__FILE__ <<":"<<__FUNCTION__<<":"<<__LINE__ <<"]"

/***********************************************************************************************/
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();


private:
    int i,j;
    //库结构
    QString         dbname_init;        //库名
    QStringList     table_list_init;    //表名
    QStringList     tb_head_list_init;  //表头

/*******************************************************************************************/
    QSqlDatabase    db;             //要打开的库,不存在则创建
    QSqlQuery       mquery;         //库的检索类
    QSqlRecord      mrecord;        //数据记录

    QStringList     tablelist;         //库里的表列表

    QStringListIterator *itr;          //表名迭代器

    QString         tableNmaes;         //迭代器用的暂存表名
    QString         tableNmae;          //表名
    QStringList     tb_head_list;       //表头
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    MYDEBUG << "start...................................";
    this->setFixedSize(800, 600);

    //初始化
    i = 0; j = 0;

    dbname_init = "test.db";
    table_list_init.append("admin");
    table_list_init.append("staff");
    MYDEBUG << table_list_init;

    tb_head_list_init.append("ID");
    tb_head_list_init.append("Name");
    tb_head_list_init.append("Age");
    tb_head_list_init.append("Today");
    tb_head_list_init.append("SUMT");
    MYDEBUG << tb_head_list_init;

    tb_head_list.clear();


    MYDEBUG << "variable init success..................";

/****************************************************************************/

    db = QSqlDatabase::addDatabase("QSQLITE");      //设置库的类型为sqlite
    MYDEBUG << "addDatabase success..............";

    db.setDatabaseName(dbname_init);                //设置要打开的库名,没有则创建
    bool ok = db.open()
    if (ok) {
        MYDEBUG << ok << "db.open success..................";
    } else {
        MYDEBUG << ok << "db.open fail";
        return ;
    }


    tablelist = db.tables();                           //获取数据库中的表

    mquery = QSqlQuery(db);                            //设置要操作的库

    if  (tablelist.count() == 0)						//如果库中没有表,则创建
    {
        mquery.exec(QString("create table %1(%2, %3, %4);")\
                             .arg(table_list_init.at(0))\
                             .arg(tb_head_list_init.at(0))\
                             .arg(tb_head_list_init.at(1))\
                             .arg(tb_head_list_init.at(2)));

    }

    MYDEBUG << "创建了表" << db.tables().count();

    itr = new QStringListIterator(tablelist);          //迭代器

    while (itr->hasNext())
    {
        i = 0;
        tableNmaes = itr->next();
        MYDEBUG << tableNmaes;

        QString str = "pragma table_info(" + tableNmaes + ")";

        QSqlQuery query;
        query.prepare(str);
        if (query.exec())
        {
            while (query.next())
            {
                qDebug() << query.value(0).toString() << query.value(1).toString();     //字段编号 + 表头
                tb_head_list.insert(i, query.value(1).toString());
                i++;
            }
        }
        MYDEBUG << "db.tables(); >> " <> " << tableNmae;                   //打印获得的表名


    //添加
#if 1
    MYDEBUG << "add state is down...................";
#else
    if (mquery.exec(QString("insert into %1(%2, %3, %4) values(%5)")\
                      .arg(tableNmae)\
                      .arg(tb_head_list.at(0))\
                      .arg(tb_head_list.at(1))\
                      .arg(tb_head_list.at(2))\
                      .arg("5, '小红', 57")))
    {
        MYDEBUG << "add success";

    } else {
        MYDEBUG << "add fail";

    }

#endif

    //删除
#if 1
    MYDEBUG << "delete state is down................";
#else
    mquery.clear();
    if (mquery.exec(QString("delete from %1 where %2;")\
                    .arg(tableNmae)\
                    .arg("Name = '小红'")))       //字符串要用单引号
    {
        MYDEBUG << "delete sucess";

    }
    else
    {
        MYDEBUG << "delete fail";

    }

#endif

    //修改
#if 1
    MYDEBUG << "update state is down................";
#else
    mquery.clear();
    if (mquery.exec(QString("update %1 set %2 where %3;")\
                    .arg(tableNmae)\
                    .arg("Name = '张三'")\
                    .arg("ID = 2")))        // %1:表名 %2:要修改的内容 %3:范围
    {
        MYDEBUG << "update sucess";

    }
    else
    {
        MYDEBUG << "update fail";

    }

#endif

    //查询
#if 0
    MYDEBUG << "select state is down................";
#else

    //打印表里数据条数
    mquery.clear();
    if (mquery.exec(QString("select count() from %1;")\
                    .arg(tableNmae)))
    {
        MYDEBUG << "select count success................";
        mquery.seek(0);
        MYDEBUG << tableNmae + " count:" <

运行结果:
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 6 ] start…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 15 ] (“admin”, “staff”)
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 22 ] (“ID”, “Name”, “Age”, “Today”, “SUMT”)
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 27 ] variable init success…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 32 ] addDatabase success…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 37 ] true db.open success…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 58 ] 创建了表 1
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 66 ] “admin”
“0” “ID”
“1” “Name”
“2” “Age”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 81 ] db.tables(); >> (“ID”, “Name”, “Age”)
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 85 ] db.tables(); >> “admin”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 90 ] add state is down…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 110 ] delete state is down…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 130 ] update state is down…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 159 ] select count success…
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 161 ] “admin count:” 3
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 172 ] select sucess
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 184 ] “have find 3”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 187 ] (“ID”, “Name”, “Age”)
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 189 ] “2 张三 46”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 189 ] “3 王五 48”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 189 ] “1 李四 48”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 207 ] select sucess
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 217 ] (“ID”, “Name”, “Age”)
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 219 ] “1 李四 48”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 219 ] “2 张三 46”
[ …\Qsql\mainwindow.cpp : MainWindow::MainWindow : 219 ] “3 王五 48”

你可能感兴趣的:(C++,Qt,数据库,C++,QT数据库,数据库,增删改查)