qt下sqlite数据库的应用(二)

前端之家收集整理的这篇文章主要介绍了qt下sqlite数据库的应用(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
qt中数据库和窗体界面的交互,可以当后台来用,其中用到的主要控件是tableview,sqlite,所在的环境是linux下,如果是在ios,android下开发,只需要将类的书写方式及动态函数静态函数的书写方式改一下。 在看代码之前想复习一下数据库的知识: 一、数据模型: 定义:现实世界数据特征的抽象,用来定义数据如何组织,数据之间的关系怎样。可分为三层:概念模型、逻辑/实现模型、物理模型 二、三级模式: 1.内模式(存储模式):数据物理结构和存储方式的描述,是数据内部的表示方式。 2.概念模式(全局模式或模式):是对数据库中全体数据的逻辑结构和特征的描述 3.外模式(子模式或用户模式):数据库用户能够看间和使用的局部数据逻辑结构和特征的描述 三、两级映射: 1.概念模式/内模式映射 2.外模式/概念模式 数据的物理独立性: 内模式与模式之间的映射提供了数据的物理独立性。当数据的物理结构发生变化时,只需要修改内模式与模式的映射即可。 数据的逻辑独立性: 模式与外模式之间的映射提供了数据的逻辑独立性。当数据的整体逻辑结构发生变化时,只需要修改各个外模式与模式概念之间的映射即可。 四:数据库系统的设计过程 1.数据设计的基本过程 2.需求收集与分析 3.概念结构设计 4.选择合适的DBMS 5.逻辑结构设计 6.物理结构设计 7.数据库实施 8.运行于维护 举例(sqlITE数据库): //Database.h class CDatabase : public QDialog { Q_OBJECT public: CDatabase(QWidget *parent = 0); ~CDatabase(); protected: void changeEvent(QEvent *e); private: Ui::CDatabase *ui; //add by chenney 注释部分为自己手写 public slots: void searchSong_clicked(); void upDataSong_clicked(); void clearSong_clicked(); void deleteSong_clicked(); void addSong_clicked(QString str); void addSong_clicked(); public: void connectDB();//创建连接函数 void closeDB();//创建关闭函数 int readData(QStandardItemModel *modelSong,QList<Phonon::MediaSource> *list); private: QsqlTableModel *model;//建立数据库文件描述符 QsqlDatabase db; //add by chenney }; #endif // CDATABASE_H //Database.cpp int num = 0; CDatabase::CDatabase(QWidget *parent) : QDialog(parent),ui(new Ui::CDatabase) { ui->setupUi(this); //add by chenney //addSong deleteSong searSong clearSong updateSong均为PushButton按钮 connect(ui->addSong,SIGNAL(clicked()),this,SLOT(addSong_clicked()));//添加数据 connect(ui->deleteSong,SLOT(deleteSong_clicked()));//删除数据 connect(ui->searSong,SLOT(searSong_clicked()));//查找数据 connect(ui->clearSong,SLOT(clearSong_clicked()));//清空数据库 connect(ui->updateSong,SLOT(updateSong_clicked()));//更新数据库 connectDB(); //绑定数据库到tableview列表 model = new QsqlTableModel(this); model->setTable("music");//数据库名字music model->setEditStrategy(QsqlTableModel::OnManualSubmit); model->select();//选取标的一行 ui->songList->setModel(model); ui->songList->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:transparent;}"); //add by chenney } CDatabase::~CDatabase() { delete ui; } void CDatabase::changeEvent(QEvent *e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } //add by cheny void CDatabase::connectDB() { db = QsqlDatabase::addDatabase("QsqlITE");//链接数据库 db.setDatabaseName("music.db"); if(!db.open())//打开数据库 { qDebug()<< "database is error"; } else { qDebug()<<"database is ok"; } QsqlQuery quer; quer.exec(QObject::tr("create table music (music string)"));//创建表格 } void CDatabase::closeDB() { db.close();//关闭数据库 } /*添加歌曲*/ void CDatabase::addSong_clicked(QString str) { QsqlQuery quer; quer.prepare("INSERT INTO music(music) VALUES(:music)"); quer.bindValue(":music",str); quer.exec(); model->submitAll(); } /*删除歌曲*/ void CDatabase::deleteSong_clicked() { int curRow = ui->songList->currentIndex().row(); model->removeRow(curRow); int ok = QMessageBox::warning(this,tr("delete the current row !"),tr("Are you sure delete the current row ?"),QMessageBox::Yes,QMessageBox::No); if(ok == QMessageBox::No) { model->revertAll(); } else { model->submitAll(); num--; } } /*清空数据库*/ void CDatabase::clearSong_clicked() { int ok = QMessageBox::warning(this,tr("clear the List !"),tr("Are you sure clear the List ?"),QMessageBox::No); if(ok == QMessageBox::No) { model->revertAll(); } else { QMessageBox(this,"Error info ","clear Failed"); } } /*更新数据库*/ void CDatabase::upDataSong_clicked() { ui->songList->setModel(model); } void CDatabase::searchSong_clicked() { QString music = ui->editSong->text(); model->setFilter(QObject::tr("music = '%1'").arg(music));//setFilter()函数进行关键字筛选 model->select(); } /*读取数据到列表(此列表是在另个窗体上,单单数据库可以不用这个)*/ int CDatabase::readData(QStandardItemModel *modelSong,QList<Phonon::MediaSource> *list) { int k = 0; QsqlQuery quer; quer.exec("select * from music"); while(quer.next()) { list->append(quer.value(0).toString()); modelSong->setItem(k,new QStandardItem(QFileInfo(quer.value(0).toString()).fileName())); k++; } return k; } /*添加数据到tableview列表*/ void CDatabase::addSong_clicked() { QStringList files = QFileDialog::getOpenFileNames(this,tr("Selec Files to play"),"/","*.wav *mp3"); QString file; QsqlQuery quer; foreach(file,files) { quer.prepare("INSERT INTO music(music) VALUES(:music)"); quer.bindValue(":music",file); quer.exec(); } model->submitAll();//提交数据。 } //add by chenney 原文链接:https://www.f2er.com/sqlite/199605.html

猜你在找的Sqlite相关文章