在Qt中使用Sqlite目前比较常用的有两种方式,一种是使用Qt内部的Sql模块,这种方式比较简单,接口使用方便,很推荐,但是常常因为驱动不兼容,缺少驱动等出现一堆问题,主要是环境搭建的问题,在嵌入式设备中,想这样使用必须移植编译对应的Sqlite库驱动,很麻烦,其实还有另一种方式可以实现,不通过Qt的Sql模块,直接使用Sqlite的lib库,使用Sqlite的标准C/C++接口就行。
我们来看直接使用sqlite的方式:
1.获取sqlite的必要的库文件
这是所需要的几个文件,我们在工程目录下创建一个sqlLib(你随意,我上面的就是简单的lib)目录,这4个文件放到里面,这几个文件是sqlite官网下载的,下载你电脑对应位数的,也可以用我提供的,因为我还没整理资料,我放网盘几天就丢了乱了,要的直接回复邮箱或者私信我我发给你,这是我亲测成功的
2.加载库
3.包含sqlite3.h头文件
注意包含头文件的路径是你工程目录下的lib目录下,就是你存放库文件的路径,一般是./lib就行,然后就可以使用Sqlite提供的C/C++的接口 *** 作数据库了
例:
//初始化打开数据库,你可以直接复制过去改一下你的数据库path就能直接用
bool SqlInputModel::SqlDBInit()
{
QString path = qApp->applicationDirPath()+"/py.db";
int ret = sqlite3_open(path.toStdString().c_str(), &mydb);
if(ret == SQLITE_OK) {
return true;
}
else {
return false;
}
}
//查询到结果的回调函数,查到某一个字段的时候,会触发此函数
static int callback(void *data, int argc, char **argv, char **azColName){
QString strRec(argv[0]);
QStringList text = strRec.split(" ");
foreach (QString txt, text) {
if (txt.length() > 0) {
qDebug() << "MainWindow::selectChinese() txt:" << txt;
}
return 0;
}
}
//从数据库查找东西,注意调用这个函数后,有结果返回会跳入回调函数,我将回调函数放在上面
void SqlInputModel::selectChinese()
{
char *zErrMsg = 0;
int rc;
QString sql = QString("select word from pinyin where pinyin='beijing';");
rc = sqlite3_exec(mydb, sql.toStdString().c_str(), callback, (void*)this, &zErrMsg);
if( rc != SQLITE_OK ) {
qDebug() << "SQL error: %s" << zErrMsg;
sqlite3_free(zErrMsg);
}
else {
qDebug() << "select OK";
}
}
写的 *** 作就是给发指令,和查的函数一样,就发送的串不一样,就不再赘述
方式二、使用Qt自带的Sql模块 *** 作sqlite数据库1.在工程文件也就是pro文件中加入sql模块
QT += sql
2.引入3个头文件
#include
#include
#include
3.初始化打开数据库
QSqlDatabase DbConn;
DbConn = QSqlDatabase::addDatabase("QSQLITE", "py");
DbConn.setDatabaseName(qApp->applicationDirPath() + "/py.db");
bool dbRet = DbConn.open();
4.愉快的使用数据库
//所有的 *** 作呢都可以使用这个query来发送指令 *** 作,可以说没啥难度了
QString sql = QString("select word from pinyin where pinyin='%1'").arg(currentPY);
bool sqlRet = query.exec(sql);
qDebug() << "Execute sql :" << sql << ". return :" << sqlRet;
//逐个将查询到的字词加入汉字队列
while(query.next()) {
QString result = query.value(0).toString();
QStringList text = result.split(" ");
foreach (QString txt, text) {
if (txt.length() > 0) {
qDebug() << "MainWindow::selectChinese() txt:" << txt;
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)