QT上使用Sqlite3

前端之家收集整理的这篇文章主要介绍了QT上使用Sqlite3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

官网上的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

记着再添加之前的在pro文件添加QT +=sql

  1. QT += sql
  1.  

3.1 首先先建立一个h文件,用来写一连接函数

  1. class Linksql
  1. {
  1. public:
  1. Linksql(QString,QString);
  1. bool connectDB(QString);
  1. void insert(QString , int id, QString name, int age);
  1. bool createTable(QString );
  1. void select(QString );
  1. void selectUseModel1(QString );
  1. void showTable(QString );
  1.  
  1. };
  1.  

3.2在main函数调用数据库

  1. QApplication a(argc, argv);
  1. QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
  1. QString DB_NAME="music.db";//数据库
  1. QString TB_NAME="People";//表名
  1. Linksql *linksql=new Linksql(DB_NAME,TB_NAME);
  1. if(!linksql->connectDB(DB_NAME))
  1. {
  1. QMessageBox::information(0,QObject::tr("Error"),QObject::tr("连接出错"));//添加一个INFORMATION消息框
  1. return 0;
  1. }
  1. linksql->showTable(TB_NAME);

3.3如何知道是否成功使用了数据库

3.3.1使用QDebug:

先写几个成员函数接口,也可以直接在main函数里面全写了。

  1. #include"linksql.h"
  1. #include<Qtsql/QsqlDatabase>
  1. #include<QsqlQueryModel>
  1. #include<QsqlQuery>
  1. #include<QsqlRecord>
  1. #include<QDebug>
  1. #include<QsqlTableModel>
  1. #include<QTableView>
  1. Linksql::Linksql(QString DB_NAME,QString TB_NAME)
  1. {
  1.  
  1. connectDB(DB_NAME);
  1. createTable(TB_NAME);
  1. }
  1.  
  1. bool Linksql::connectDB(QString DB_NAME)
  1. {
  1. QsqlDatabase db=QsqlDatabase::addDatabase("QsqlITE");//使用Qsqlite驱动
  1. db.setDatabaseName(DB_NAME);//DB名称,如果源文件没有这个DB,则会自动创建。
  1. if(!db.open())//如果打开失败。
  1. {
  1. return false;
  1. }
  1. else
  1. return true;
  1. }
  1. bool Linksql::createTable(QString TB_NAME)
  1. {
  1. QsqlQuery query;
  1. QString sql_create="CREATE TABLE IF NOT EXISTS "+TB_NAME+" (id INTEGER PRIMARY KEY AUTOINCREMENT,"
  1. "name VARCHAR(20) NOT NULL,"
  1. "age INTEGER NULL)";
  1. bool flag= query.exec(sql_create);//标记是否成功创建表
  1. if(flag)
  1. {
  1. qDebug()<<"ceate table partition success";
  1. return true;
  1. }
  1. else
  1. {
  1.  
  1. qDebug()<<"ceate table partition Failed";
  1. return false;
  1. }
  1. }
  1. void Linksql::insert(QString TB_NAME,int id,QString name,int age)
  1. {
  1.  
  1. QsqlTableModel model;
  1. model.setTable(TB_NAME);
  1. model.select();
  1. int row=0;
  1. model.insertRows(row,1);//QModelParentIndex
  1. model.setData(model.index(row,0),id);
  1. model.setData(model.index(row,1),name);
  1. model.setData(model.index(row,2),age);
  1. model.submitAll();//输入此语句才能确保更新到数据库
  1. }
  1. void Linksql::select(QString TB_NAME)
  1. {
  1. QsqlQuery query;
  1. query.exec("SELECT id, name, age FROM "+TB_NAME);
  1. while (query.next())
  1. {
  1. qDebug()<<"people("<<query.value(0).toInt()<<") name:"<<query.value(1).toString()<<" age:"<<query.value(2).toInt();
  1. }
  1. }
  1. void Linksql::selectUseModel1(QString TB_NAME)
  1. {
  1. // QsqlQuery query;
  1. QsqlQueryModel model;
  1. model.setQuery("SELECT * FROM "+TB_NAME);//提取所有的数据
  1. // for(int i=0;i<model.rowCount();i++)//rowCount=3;model的record从0到2
  1. // {
  1. // int age=model.record(i).value("age").toInt();
  1. // QString name=model.record(i).value("name").toString();
  1. // qDebug()<<name<<" "<<age;
  1. // }
  1. int ageIndex=model.record().indexOf("age");
  1. int nameIndex=model.record().indexOf("name");
  1. for(int i=0;i<model.rowCount();i++)
  1. {
  1. QsqlRecord record=model.record(i);
  1. int age=record.value(ageIndex).toInt();
  1. QString name=record.value(nameIndex).toString();
  1. qDebug()<<name<<" "<<ageIndex<<":"<<age;
  1. }
  1. }
  1.  
  1.  
  1.  

可知成功的创建了数据库

如果下次编译不通过,出现错误“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类,提供只读数据模型

  1. void Linksql::showTable(QString TB_NAME)
  1. {
  1. QTableView *view=new QTableView;
  1. view->setFixedWidth(500);
  1. view->setFixedHeight(500);
  1. QsqlQueryModel *model=new QsqlQueryModel;
  1. model->setQuery("SELECT * FROM "+TB_NAME);//提取所有的数据
  1. view->setModel(model);
  1. // view->resizeColumnsToContents();//自动根据内容调整列宽
  1. // view->resizeRowsToContents();
  1.  
  1. view->show();
  1. }





参考博客

Qt学习(3)Qt连接sqlite 数据库http://blog.163.com/wenwen10090215@126/blog/static/173322114201261784889/

QT中简单使用SQLITE数据库 http://blog.csdn.net/fjb2080/article/details/6459599

猜你在找的Sqlite相关文章