首页 > 数据库 >Qt仿音乐播放器:数据库持久化

Qt仿音乐播放器:数据库持久化

时间:2025-01-12 10:32:49浏览次数:3  
标签:播放器 sqLite Qt 数据库 musicId query QSqlDatabase bindValue

一、铺垫

本地的数据持久化选择的是SQLite;他的头文件及准备文件只有100兆左右;它形成的数据库通常只有几兆大小;适合于单片机嵌入式开发;

而且Qt是支持SQLite的,也就是说,只需要在核心文件中加一个拓展名,就可以解决;

二、套路

#include<QSqlDatabase>        //头文件
#include<QSqlQuery>
QSqlDatabase sqLite = QSqlDatabase::addDatabase("QSQLITE"); //创建数据库类sqLite.setDatabaseName("music.db");        //设置要链接的数据库名称   
//3.打开数据库    
if(!sqLite.open()){ 
        QMessageBox::critical(this,"MiniMusic","数据库打开失败");        
        return;            
}    
qDebug()<<"数据库连接成功";
//4.创建表
QString sql = "CREATE TABLE IF NOT EXISTS MusicInfo(\
                id INTEGER PRIMARY KEY AUTOINCREMENT,\
                musicId VARCHAR(50) UNIQUE,\
                musicName VARCHAR(50),\               
                musicSinger VARCHAR(50),\
                albumName VARCHAR(50),\
                musicUrl VARCHAR(256),\
                duration BIGINT,\
                isLike INTEGER,\
                isHistory INTEGER)";
QSqlQuery query;
if(!query.exec(sql)){
        QMessageBox::critical(this,"MiniMusic","初始化错误");
        return;
        }        
qDebug()<<"表创建成功";

三、头文件类的说明

The QSqlQuery class provides a means of executing and manipulating SQL statements.

//query:查询; execute:实施,执行; manipulate 操作,控制;

//此类提供了一中执行和操作SQL语句的方法

The QSqlDatabase class handles a connection to a database.

//此类处理数据库的链接;

 四、对数据库的增删查改 

其实本质上就是数据库的语句,只不过是怎加了一层封装;但是确实比刚开始学简单多了;我的音乐播放器暂时没有删除选项暂时没有写删除;

4.1增

query.prepare("INSERT INTO MusicInfo(musicId,musicName,musicSinger,albumName,musicUrl,\
                      duration,isLike,isHistory) VALUES(?,?,?,?,?,?,?,?)");
query.bindValue(0,musicId);
query.bindValue(1,musicName);
query.bindValue(2,musicSinger);
query.bindValue(3,musicAlbumn);
query.bindValue(4,musicUrl.toLocalFile());
query.bindValue(5,duration);
query.bindValue(6,isLike?1:0);
query.bindValue(7,isHistory?1:0);
if(!query.exec()){
    qDebug()<<"插入失败"<<query.lastError().text();
    return;
}
qDebug()<<"更新歌曲信息:"<<musicName<<" "<<musicId;

4.2查、改

QSqlQuery query;
query.prepare("SELECT EXISTS (SELECT 1 FROM MusicInfo WHERE musicId = ?)");//只返回id
query.bindValue(0,musicId);
if(!query.exec()){
   qDebug()<<"查询失败"<<query.lastError();
   return;
}
if(query.next())
    {
        bool isExists=query.value(0).toBool();
        if(isExists){
            //musicId歌曲已经存在
            //2.存在,不需要再插入music对象,此时,只需要将islike和ishistory属性更新
            query.prepare("UPDATE MusicInfo SET isLike=?,isHistory=? WHERE musicId =?");
            query.bindValue(0,isLike?1:0);
            query.bindValue(1,isHistory?1:0);
            query.bindValue(2,musicId);
            if(!query.exec()){
                qDebug()<<"更新信息失败"<<query.lastError().text();
                return;
            }
            qDebug()<<"更新歌曲信息:"<<musicName<<" "<<musicId;
        }

标签:播放器,sqLite,Qt,数据库,musicId,query,QSqlDatabase,bindValue
From: https://blog.csdn.net/qincjun/article/details/144933506

相关文章

  • MySQL数据库出现乱码怎么解决
    为什么我的数据库总会出现中文乱码的情况。一堆中文乱码不知道怎么回事?当向数据库中写入创建表,并插入中文时,会出现这种问题。此报错会涉及数据库字符集的问题。.1解决乱码的几个方面对于中文乱码的情况,从三个方面数据终端:就是我们连接数据库的工具设置为utf8操作系统层面:l......
  • docker安装eclipse-mosquito测试mqtt
    拉取镜像dockerpulleclipse-mosquitto创建目录mkdirmqttcdmqttmkdirconfigmkdirdatamkdirlog创建配置文件cdmqtt/configtouchmosquitto.conftouchpasswdvimmosquitto.conf点击查看代码listener1883persistencetruepersistence_location/mo......
  • 用QT实现自定义样式按钮控件
    目录一、资源准备二、添加资源1)创建资源文件 2)添加图片资源 三、设置按钮样式1)定义QPixmap对象2)设置按钮图标3)图标切换4)实际效果四、总结在用QT开发界面程序时,默认的按钮控件样式不美观。当需要构建自定义的按钮样式,使界面显示效果更加美观时,可以对QT提供的默认......
  • 基于ssm四S店预约保养系统,附源码+数据库+论文+开题+任务书,包安装调试
    1、项目介绍基于ssm的四S店预约保养系统,分为用户、管理员用户-功能:登录、注册、个人中心、车辆信息管理、公告信息管理、预约保养管理管理员-功能:登录、首页、个人中心、管理员管理、车辆信息管理、基础数据管理、公告信息管理、用户管理、约保养管理2、技术框架运行系统:W......
  • 基于ssm学生资助管理系统,附源码+数据库+论文+开题+任务书+PPT,包安装调试
    1、项目介绍图4.1即为设计的管理员功能结构,管理员权限操作的功能包括审核学生的家庭经济信息,对家庭经济的证明文件进行下载查看,可以管理学生监护人信息,管理公告,管理资助名单信息以及管理学生信息等。图4.2即为设计的学生功能结构,学生权限操作的功能包括登记家庭经济信息,上......
  • 在数据库中如何存储以太坊地址?
    1.SQL数据库存储以太坊地址SQL数据库支持多种数据类型,其中VARCHAR和CHAR是存储字符串的常见选择。由于以太坊地址有固定的42个字符(包括0x前缀),我们可以根据需求选择合适的存储方式。VARCHAR(42):以太坊地址的长度是固定的42个字符,因此可以使用VARCHAR(42)来存......
  • GORM 默认行为与数据库迁移:自动处理 id 字段的自增属性
    1.GORM默认行为:自动处理id字段自增在大多数数据库中,id字段通常作为表的主键,而且经常被设计为自增字段。在使用GORM时,默认情况下,GORM会自动将int类型的id字段作为自增主键处理。即使你没有显式地声明该字段为AUTO_INCREMENT,GORM也会在创建表时自动为其添加该属性......
  • 如何安全地修改网站数据库中的数据?
    直接操作数据库可以快速更新大量数据,但也存在风险。确保操作的安全性和准确性非常重要。解决方案:备份数据库:在进行任何修改之前,务必创建完整的数据库备份。使用管理工具:利用数据库管理工具(如phpMyAdmin)进行操作,避免手动编写SQL语句带来的错误。测试查询:在执行修改前,先在一个......
  • Apache AGE:基于PostgreSQL的图数据库深度解析
    ApacheAGE:基于PostgreSQL的图数据库深度解析一、引言在当今复杂多变的数据环境中,关系型数据库和图数据库各自扮演着重要的角色。关系型数据库以其结构清晰、查询高效的特点,在事务处理和数据一致性方面表现出色;而图数据库则以其灵活的数据模型和强大的图查询能力,在社交网......
  • 搭建基于VS的PyQt6软件开发环境
    注:蓝色字体为超链接,点击即可下载对应软件一、下载Python下载Python安装包。打开安装包,点击Customizeinstallation安装Python(安装过Python的可点击UpgradeNow升级Python)。之后点击next和Install即可。二、安装第三方库打开命令提示符。将代码黏贴至命令提示符中,......