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