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: Q
sqlTableModel *model;//建立
数据库的
文件描述符 Q
sqlDatabase 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 Q
sqlTableModel(this); model->setTable("music");//
数据库名字music model->setEditStrategy(Q
sqlTableModel::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 = Q
sqlDatabase::addDatabase("Q
sqlITE");//
链接数据库 db.setDatabaseName("music.db"); if(!db.open())//打开
数据库 { qDebug()<< "database is error"; } else { qDebug()<<"database is ok"; } Q
sqlQuery quer; quer.exec(QObject::tr("create table music (music string)"));//创建表格 } void CDatabase::closeDB() { db.close();//
关闭数据库 } /*
添加歌曲*/ void CDatabase::addSong_clicked(QString str) { Q
sqlQuery 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 = QMessage
Box::warning(this,tr("delete the current row !"),tr("Are you sure delete the current row ?"),QMessage
Box::Yes,QMessage
Box::No); if(ok == QMessage
Box::No) { model->revertAll(); } else { model->submitAll(); num--; } } /*清空
数据库*/ void CDatabase::clearSong_clicked() { int ok = QMessage
Box::warning(this,tr("clear the List !"),tr("Are you sure clear the List ?"),QMessage
Box::No); if(ok == QMessage
Box::No) { model->revertAll(); } else { QMessage
Box(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; Q
sqlQuery 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; Q
sqlQuery quer; foreach(file,files) { quer.prepare("INSERT INTO music(music) VALUES(:music)"); quer.bindValue(":music",file); quer.exec(); } model->submitAll();//提交数据。 } //add by chenney