欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > Qt仿音乐播放器:数据库持久化

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

2025/3/17 20:51:14 来源:https://blog.csdn.net/qincjun/article/details/144933506  浏览:    关键词:Qt仿音乐播放器:数据库持久化

一、铺垫

本地的数据持久化选择的是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;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词