官网上的sqlite最新是sqlite3的版本,下载了Realese版本的源代码可以学习学习。
至于sqlite,简单说一下它的特性,一个轻量级的十分厉害的数据库,可以和很多编译环境结合。
对于QT,QT自带有驱动程序,在包的plugins里面有个sqldrivers就是了。
使用sqlite教程如下,可是学习了其它人优秀的文章总结而出:
1.下载sqlite3.exe。
这是个命令行使用工具,可以在官网找到.http://www.sqlite.org/download.html
sqlite-shell-win32-x86-3080701.zip (303.20 KiB) |
2.利用这个EXE可以创建数据库。在DOS下创建的。
在dos下运行sqlite3.exe,然后用sql语句进行创建.
3.结合QT与sqlite
- QT += sql
- class Linksql
- {
- public:
- Linksql(QString,QString);
- bool connectDB(QString);
- void insert(QString , int id, QString name, int age);
- bool createTable(QString );
- void select(QString );
- void selectUseModel1(QString );
- void showTable(QString );
- };
- QApplication a(argc, argv);
- QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
- QString DB_NAME="music.db";//数据库名
- QString TB_NAME="People";//表名
- if(!linksql->connectDB(DB_NAME))
- {
- return 0;
- }
linksql->showTable(TB_NAME);
3.3如何知道是否成功使用了数据库
3.3.1使用QDebug:
- #include"linksql.h"
- #include<QsqlQueryModel>
- #include<QsqlQuery>
- #include<QsqlRecord>
- #include<QDebug>
- #include<QsqlTableModel>
- #include<QTableView>
- {
- connectDB(DB_NAME);
- createTable(TB_NAME);
- }
- bool Linksql::connectDB(QString DB_NAME)
- {
- if(!db.open())//如果打开失败。
- {
- return false;
- }
- else
- return true;
- }
- bool Linksql::createTable(QString TB_NAME)
- {
- QsqlQuery query;
- QString sql_create="CREATE TABLE IF NOT EXISTS "+TB_NAME+" (id INTEGER PRIMARY KEY AUTOINCREMENT,"
- "name VARCHAR(20) NOT NULL,"
- "age INTEGER NULL)";
- if(flag)
- {
- qDebug()<<"ceate table partition success";
- return true;
- }
- else
- {
- qDebug()<<"ceate table partition Failed";
- return false;
- }
- }
- void Linksql::insert(QString TB_NAME,int id,QString name,int age)
- {
- QsqlTableModel model;
- model.setTable(TB_NAME);
- model.select();
- int row=0;
- model.insertRows(row,1);//QModelParentIndex
- model.setData(model.index(row,0),id);
- model.setData(model.index(row,1),name);
- model.setData(model.index(row,2),age);
- model.submitAll();//输入此语句才能确保更新到数据库中
- }
- void Linksql::select(QString TB_NAME)
- {
- QsqlQuery query;
- query.exec("SELECT id, name, age FROM "+TB_NAME);
- while (query.next())
- {
- qDebug()<<"people("<<query.value(0).toInt()<<") name:"<<query.value(1).toString()<<" age:"<<query.value(2).toInt();
- }
- }
- void Linksql::selectUseModel1(QString TB_NAME)
- {
- // QsqlQuery query;
- QsqlQueryModel model;
- model.setQuery("SELECT * FROM "+TB_NAME);//提取所有的数据
- // for(int i=0;i<model.rowCount();i++)//rowCount=3;model的record从0到2
- // {
- // int age=model.record(i).value("age").toInt();
- // QString name=model.record(i).value("name").toString();
- // qDebug()<<name<<" "<<age;
- // }
- int ageIndex=model.record().indexOf("age");
- int nameIndex=model.record().indexOf("name");
- for(int i=0;i<model.rowCount();i++)
- {
- QsqlRecord record=model.record(i);
- int age=record.value(ageIndex).toInt();
- QString name=record.value(nameIndex).toString();
- qDebug()<<name<<" "<<ageIndex<<":"<<age;
- }
- }
可知成功的创建了数据库。
如果下次编译不通过,出现错误“cannot open debug/XXX.exe" 请关掉正在运行的xxx.exe,因为使用qdebug是不会停止这个EXE运行的进程的。
3.3.2利用自定义UI界面输出,这里使用tableview;
需要借助,QT提供的三种访问数据库的高层类,QsqlQueryModel,QsqlTableModel,QsqlRelationalTableModel,可将数据源将数据库内的数据在QLIstView,或者是QTableView等基于视图模式的QT类表示出来。
3.3.2.1 QsqlQuertModel类,提供只读数据模型
- void Linksql::showTable(QString TB_NAME)
- {
- QTableView *view=new QTableView;
- view->setFixedWidth(500);
- view->setFixedHeight(500);
- model->setQuery("SELECT * FROM "+TB_NAME);//提取所有的数据
- view->setModel(model);
- // view->resizeRowsToContents();
- view->show();
- }
参考博客:
Qt学习(3)Qt连接sqlite 数据库http://blog.163.com/wenwen10090215@126/blog/static/173322114201261784889/
QT中简单使用SQLITE数据库 http://blog.csdn.net/fjb2080/article/details/6459599