最近在工作上开始尝试使用Qt来写一些小程序,因为Qt是刚学习的,很多功能都是第一次使用,所以特意整理了一下。

创建,连接,增,删,查,改,满足了数据库的基本使用。


头文件包含

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>


1.创建数据库


QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "mysql");//创建数据库,参数二用于在使用中连接数据库;  
    db.setDatabaseName("UserInfo.db");//设定数据的保存路径;  
    if(!db.open())  
    {  
        //能打开就证明数据库成功创建;  
        qDebug()<< "数据库创建失败!";  
    }


QSqlDatabase db = QSqlDatabase::database("mysql");//连接数据库,参数为创建时设定的连接名称;




2.创建表格


QSqlQuery query(db);//新建数据库操作索引;  
    bool Rsl = query.exec("create table user(id int primary key, name nvarchar(10), gender nvarchar(2),"  
                          "age int, height int)");//新建数据表  
  
    if(Rsl)  
    {  
        qDebug()<< "创建数据表成功!";  
    }  
    else  
    {  
        qDebug()<< "创建数据表失败!";  
    }



3.增



QSqlQuery query(db);//创建数据库操作索引;

    //方法一;
    query.prepare("insert into user values(?, ?, ?, ?, ?)");//数据库前置指令,与后面的指令配合使用;
    query.bindValue(0, 1);
    query.bindValue(1, "李四");
    query.bindValue(2, "男");
    query.bindValue(3, 25);
    query.bindValue(4, 175);

    bool Rsl = query.exec();//执行上面的操作;
//方法二
    Rsl = query.exec(QString("insert into user values(%1, %2, '男', 20, 170)").arg(4).arg("'陈五'"));
    if(Rsl)
    {
        qDebug()<< "插入数据成功!";
    }
    else
    {
        qDebug()<< "插入数据失败!";
    }



4.删



QSqlQuery query(db);

    bool Rsl = query.exec(QString("delete from user where id = %1").arg(1));
    if(Rsl)
    {
        qDebug()<< "删除数据成功!";
    }
    else
    {
        qDebug()<< "删除数据失败!";
    }




5.查



QSqlQuery query(db);

    //该指令返回的结果仅表示该数据库语句执行结果,并不代表查询结果;
    bool Rsl = query.exec(QString("select * from user"));
    if(Rsl)
    {
        qDebug()<< "查询成功!";
 
        QString qstr;
        while(query.next())//指向查询结果的列表,重复执行相当于指针递增;遍历所有查询结果;
        {
            qstr += query.value(0).toString() + "\t";//对应数据表中关键字1;
            qstr += query.value(1).toString() + "\t";//对应数据表中关键字2;
            qstr += query.value(2).toString() + "\t";//对应数据表中关键字3;
            qstr += query.value(3).toString() + "\t";//对应数据表中关键字4;
            qstr += query.value(4).toString() + "\t";//对应数据表中关键字5;
 
            qDebug()<< qstr;
        }
    }
    else
    {
        qDebug()<< "查询失败!";
    }



6.改



QSqlQuery query(db);

    //方法一
    query.prepare(QString("update user set age = ?, height = ? where id = %1").arg(2));
    query.bindValue(0, 27);
    query.bindValue(1, 180);

    bool Rsl = query.exec();
//方法二
    Rsl = query.exec(QString("update user set age = %1, height = %2 where id = %3").arg(29).arg(190).arg(3));
    if(Rsl)
    {
        qDebug()<< "更新数据成功!";
    }
    else
    {
        qDebug()<< "更新数据失败!";
    }




   问题总结:


    1)使用中最常见的问题是sql语句错误,这些错误编译器是检查不出来的,因为它们在这里都是字符串,只有在运行时验证这些语句是否执行成功。因此判断执行结果很有必要,当出现执行失败时不妨检查sql语句是否存在错误,包括书写语法及书写错误。


    2)当数据库已存在某条记录时,再去插入同关键字记录也会操作失败,所以插入前需先检查一下是否存在该记录,存在则选择更新,不存在则插入。


    3)需要在pro文件里加上

QT+=sql

          因为 数据库是Qt的一个模块;


本文对应【Demo】