官网上的sqlite最新是sqlite3的版本,下载了Realese版本的源代码可以学习学习。
至于Sqlite,简单说一下它的特性,一个轻量级的十分厉害的数据库,可以和很多编译环境结合。
对于QT,QT自带有驱动程序,在包的plugins里面有个sqldrivers就是了。
使用Sqlite教程如下,可是学习了其它人优秀的文章总结而出:
1.下载sqlite3.exe。
这是个命令行使用工具,可以在官网找到.http://www.sqlite.org/download.html
2.利用这个EXE可以创建数据库。在DOS下创建的。
在dos下运行sqlite3.exe,然后用sql语句进行创建.
3.结合QT与Sqlite
记着再添加之前的在pro文件中添加QT +=sql
QT+=sql
3.1 首先先建立一个h文件,用来写一连接函数
classLinkSql
{
public:
LinkSql(QString,QString);
boolconnectDB(QString);
voidinsert(QString,intid,QStringname,intage);
boolcreateTable(QString);
voidselect(QString);
voidselectUseModel1(QString);
voidshowTable(QString);
};
3.2在main函数里调用数据库
QApplicationa(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QStringDB_NAME="music.db";//数据库名
QStringTB_NAME="People";//表名
LinkSql*linksql=newLinkSql(DB_NAME,TB_NAME);
if(!linksql->connectDB(DB_NAME))
{
QMessageBox::information(0,QObject::tr("Error"),QObject::tr("连接出错"));//添加一个INFORMATION消息框
return0;
}
linksql->showTable(TB_NAME);
3.3如何知道是否成功使用了数据库
3.3.1使用QDebug:
先写几个成员函数接口,也可以直接在main函数里面全写了。
#include"linksql.h"
#include
#include
#include
#include
#include
#include
#include
LinkSql::LinkSql(QStringDB_NAME,QStringTB_NAME)
{
connectDB(DB_NAME);
createTable(TB_NAME);
}
boolLinkSql::connectDB(QStringDB_NAME)
{
QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");//使用QSqlite驱动
db.setDatabaseName(DB_NAME);//DB名称,如果源文件没有这个DB,则会自动创建。
if(!db.open())//如果打开失败。
{
returnfalse;
}
else
returntrue;
}
boolLinkSql::createTable(QStringTB_NAME)
{
QSqlQueryquery;
QStringsql_create="CREATETABLEIFNOTEXISTS"+TB_NAME+"(idINTEGERPRIMARYKEYAUTOINCREMENT,"
"nameVARCHAR(20)NOTNULL,"
"ageINTEGERNULL)";
boolflag=query.exec(sql_create);//标记是否成功创建表
if(flag)
{
qDebug()<
returntrue;
}
else
{
qDebug()<
returnfalse;
}
}
voidLinkSql::insert(QStringTB_NAME,intid,QStringname,intage)
{
QSqlTableModelmodel;
model.setTable(TB_NAME);
model.select();
introw=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();//输入此语句才能确保更新到数据库中
}
voidLinkSql::select(QStringTB_NAME)
{
QSqlQueryquery;
query.exec("SELECTid,name,ageFROM"+TB_NAME);
while(query.next())
{
qDebug()<
}
}
voidLinkSql::selectUseModel1(QStringTB_NAME)
{
//QSqlQueryquery;
QSqlQueryModelmodel;
model.setQuery("SELECT*FROM"+TB_NAME);//提取所有的数据
//for(inti=0;i
//{
//intage=model.record(i).value("age").toInt();
//QStringname=model.record(i).value("name").toString();
//qDebug()<
//}
intageIndex=model.record().indexOf("age");
intnameIndex=model.record().indexOf("name");
for(inti=0;i
{
QSqlRecordrecord=model.record(i);
intage=record.value(ageIndex).toInt();
QStringname=record.value(nameIndex).toString();
qDebug()<
}
}
可知成功的创建了数据库。
如果下次编译不通过,出现错误“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类,提供只读数据模型
voidLinkSql::showTable(QStringTB_NAME)
{
QTableView*view=newQTableView;
view->setFixedWidth(500);
view->setFixedHeight(500);
QSqlQueryModel*model=newQSqlQueryModel;
model->setQuery("SELECT*FROM"+TB_NAME);//提取所有的数据
view->setModel(model);
//view->resizeColumnsToContents();//自动根据内容调整列宽
//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