6-2-SQL 数据示例

1.介绍

数据库的使用流程:

  • 1、首先建立与数据库的连接然后打开数据库。如下:
    QSqlDatabase db =QSqlDatabase::addDatabase(“QSQLITE”);
    db.open();
  • 2、创建QSqlQuery对象。
    QtSql模块中的 QSqlQuery 类提供了一个执行 SQL语句的接口并且可以遍历执行的返回结果集。
    除QSqlQuery类之外,Qt还提供了三种用于访问数据库的高层类QSqlQueryModel、OSqITableModel和 OSqlRelationTableModel,
    它们无须使用 SOL 语句就可以进行数据库操作,而且可以很容易地将结果在表格中表示出来。其各自的用途见表 13.5。
  • 3、使用QSqlQuery 类对数据库操作。
    如:创建表单,对表单数据相关操作等。
  • 4、关闭数据库
    db.close

一、常用函数的介绍

QSqlDatabase 类是Qt中用于管理数据库连接的类。它提供了创建、配置、打开和关闭数据库连接的方法。

1.addDatabase 函数

static QSqlDatabase addDatabase(const QString& type, const QString& connectionName = QLatin1String(defaultConnection));
该函数用于添加一个数据库连接。
type 参数指定数据库驱动类型,例如 "QMYSQL""QSQLITE" 等。
connectionName 参数指定连接的名称,默认为 defaultConnection。
返回一个 QSqlDatabase 对象,用于后续的数据库配置。

2.setDatabaseName函数

void setDatabaseName(const QString& name);
用于设置数据库连接的名称,通常是数据库文件名或者连接字符串。

3.setHostName、setUserName、setPassword 函数

void QSqlDatabase::setHostName(const QString &host);
void QSqlDatabase::setUserName(const QString &name);
void QSqlDatabase::setPassword(const QString &password);
用于设置数据库服务器的主机名、用户名和密码。

4.open、isOpen 函数

bool QSqlDatabase::open(const QString &user, const QString &password);
bool QSqlDatabase::isOpen() const;
open 用于打开数据库连接,参数为用户名和密码。
isOpen 用于检查数据库连接是否已经打开。

5.close函数

void QSqlDatabase::close();
用于关闭数据库连接。

6.lastError函数

QSqlError QSqlDatabase::lastError() const;
用于获取数据库连接的最后一次错误。

2.数据表的创建和数据的插入

3 查询、删除数据表的数据

示例:

#include <QCoreApplication>
#include <QtDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

void creatInsertSql(void);
void SqlQuery(void);
void updataSql(void);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    creatInsertSql();//数据表的创建和数据的插入
    SqlQuery();      //查询数据表的数据
    updataSql();     //更新、删除数据表的某一条数据


    return a.exec();
}


void updataSql()
{
    QSqlDatabase db =  QSqlDatabase::addDatabase("QSQLITE");// 添加 SQLite 数据库连接
    db.setDatabaseName("mySQL.db");
    if(db.open())
    {
        qDebug()<<"database connect successfully";
        QSqlQuery upquery;

        //更新
        upquery.prepare("UPDATE student SET sore = :newSore WHERE id = :userId");// 使用参数化查询,防止 SQL 注入攻击
        //绑定参数
        upquery.bindValue(":newSore",1);//新的分数
        upquery.bindValue(":userId",1);//待更新的用户ID

        if(upquery.exec())
        {
           qDebug() << "Data updated successfully";

           // 打印查询结果
           upquery.exec(QString("SELECT * FROM student"));// 查询数据表数据
           while(upquery.next())
           {
               int id = upquery.value("id").toInt();
               QString name = upquery.value("name").toString();
               int sore = upquery.value("sore").toInt();
               qDebug()<<"id:"<<id<<"name:"<<name<<"sore:"<<sore;
           }
        }
        else
        {
           qDebug() << "Update error:" << upquery.lastError().text();
        }


        //删除
        upquery.prepare("DELETE FROM student WHERE id = :userId");
        upquery.bindValue(":userId",1);//待删除用户ID
        if(upquery.exec())
        {
           qDebug() << "Data deleted successfull";
           // 打印查询结果
           upquery.exec(QString("SELECT * FROM student"));// 查询数据表数据
           while(upquery.next())
           {
               int id = upquery.value("id").toInt();
               QString name = upquery.value("name").toString();
               int sore = upquery.value("sore").toInt();
               qDebug()<<"id:"<<id<<"name:"<<name<<"sore:"<<sore;
           }
        }
        else
        {
           qDebug() << "Delete error:" << upquery.lastError().text();
        }

    }
    else
    {
        qDebug()<<"database connect err:"<<db.lastError().text();
    }

    if(db.isOpen())
    {
        db.close();
    }
}

void SqlQuery(void)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 添加 SQLite 数据库连接
    db.setDatabaseName("mySQL.db");// 设置数据库文件名
    if(db.open())
    {
        qDebug()<<"database connect successfully";

        QSqlQuery query;
        bool isTableExist = query.exec(QString("SELECT * FROM student"));// 查询数据表数据
        qDebug()<<"isTableExist:"<<isTableExist<<endl;

        // 打印查询结果
        while(query.next())
        {
            int id = query.value("id").toInt();
            QString name = query.value("name").toString();
            int sore = query.value("sore").toInt();
            qDebug()<<"id:"<<id<<"name:"<<name<<"sore:"<<sore;
        }
    }
    else
    {
        qDebug() << "Database connection error:" << db.lastError().text();
    }

    //关闭数据库
    if(db.isOpen())
    {
        db.close();
    }
}


//数据表的创建和数据的插入
void creatInsertSql(void)
{
    //获取当前Qt支持的驱动列表
   QStringList drivers = QSqlDatabase::drivers();
   qDebug()<<"获取当前Qt支持的驱动列表"<<endl;
   foreach(QString driver,drivers)
   {
       qDebug()<<driver;
   }


   //创建一个SQLite数据库连接
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName("mySQL.db");//设置数据库名
   db.setHostName("hostname-001");//设置数据库主机名
   db.setUserName("username-001");//设置数据库用户名
   db.setPassword("003");          //设置数据库密码
   bool ret = db.open();
   if(ret)
   {
       qDebug()<<"数据库打开成功"<<endl;
   }
   else
   {
       qDebug() << "Database connection error:" << db.lastError().text();
   }

   //创建QSqlQuery对象,查看表单stdent是否存在
   QSqlQuery query(db);
   bool isTableExist = query.exec(QString("SELECT * from student"));
   if(isTableExist)
   {
       //返回true,则表存在;反之,表不存在
       qDebug() <<"isTableExist:"<<isTableExist<<"创建失败";
   }
   else
   {
       ret = query.exec("create table student(id int primary key,name varchar,sore int)");//创建名为sutedent表单;三列:ID 名字 分数;如果表单已经存在则会创建失败
       if(ret==true)
       {
           qDebug()<<"创建QSqlQuery->student table 成功";
       }
       else
       {
           qDebug()<<"创建QSqlQuery->student table 失败";
       }
       query.exec("INSERT INTO student VALUES(1,'张三',100)");
       query.exec("INSERT INTO student VALUES(2,'李四',99)");
       query.exec("INSERT INTO student VALUES(3,'王五',80)");
       query.exec("INSERT INTO student VALUES(4,'赵六',60)");
   }

   //关闭数据库
   if(db.isOpen())
   {
       db.close();
       qDebug()<<db.databaseName()<<endl;
       //db.removeDatabase(db.databaseName());
   }
}



运行结果如下:
在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值