QT开发qt sqllitee问题请教

qt连接sqlite_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
qt连接sqlite
上传于||文档简介
&&Q​t​连​招​s​q​l​i​t​e​数​据​库​。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Qt之操作数据库(SQLite)
QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。
QSqlDatabase对象象征了数据库的关联。Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版(Desktop
Edition)包括如下一些驱动程序:
7.1版以及更新的版本&
&甲骨文公司(Oracle
Call Interface)
&ODBC(包括微软公司的QSL服务)
&PostgreSQL的7.3版以及更高版本&
&QSLite第3版&
&QSLite第2版
&Qybase自适应服务器&
由于授权的许可限制,Qt的开源版本无法提供所有的驱动程序,当配置Qt时,即可以选择Qt本身包含的SQL驱动程序,也可以以查件的形式建立驱动程序,公共领域中不断发展的SQLite数据库将向Qt提供支持。
如下讨论关于Qt进行SQLite的基本操作。
代码如下:
//添加数据库驱动、设置数据库名称、数据库登录用户名、密码
QSqlDatabase database =
QSqlDatabase::addDatabase("QSQLITE");&
database.setDatabaseName("database.db");
database.setUserName("root"); &
database.setPassword("123456");
//打开数据库
if(!database.open())
qDebug()&&database.lastError();
qFatal("failed to connect.") ;
//QSqlQuery类提供执行和操作的SQL语句的方法。
//可以用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE、DELETE,&
//以及DDL(数据定义语言)语句,例如CREATE TABLE。
//也可以用来执行那些不是标准的SQL的数据库特定的命令。
QSqlQuery sql_&
QString create_sql = "create table student (id int primary
key, name varchar(30), age int)";
QString select_max_sql = "select max(id) from student";
QString insert_sql = "insert into student values (?, ?,
QString update_sql = "update student set name = :name where id
QString select_sql = "select id, name from student";
QString select_all_sql = "select * from student";
QString delete_sql = "delete from student where id = ?";
QString clear_sql = "delete from student";
sql_query.prepare(create_sql);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
qDebug()&&"table created!";
//查询最大id
int max_id = 0;
sql_query.prepare(select_max_sql);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
while(sql_query.next())
max_id = sql_query.value(0).toInt();
qDebug()&&QString("max id:%1").arg(max_id);
//插入数据
sql_query.prepare(insert_sql);
sql_query.addBindValue(max_id+1);
sql_query.addBindValue("name");
sql_query.addBindValue(25);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
qDebug()&&"inserted!";
//更新数据
sql_query.prepare(update_sql);
sql_query.bindValue(":name", "Qt");
sql_query.bindValue(":id", 1);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
qDebug()&&"updated!";
//查询部分数据
if(!sql_query.exec(select_sql))
qDebug()&&sql_query.lastError();
while(sql_query.next())
int id = sql_query.value("id").toInt();
QString name = sql_query.value("name").toString();
qDebug()&&QString("id:%1 &
&name:%2").arg(id).arg(name);
//查询所有数据
sql_query.prepare(select_all_sql);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
while(sql_query.next())
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
int age = sql_query.value(2).toInt();
qDebug()&&QString("id:%1 &
&name:%2 &
&age:%3").arg(id).arg(name).arg(age);
//删除数据
sql_query.prepare(delete_sql);
sql_query.addBindValue(max_id);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
qDebug()&&"deleted!";
sql_query.prepare(clear_sql);
if(!sql_query.exec())
qDebug()&&sql_query.lastError();
qDebug()&&"cleared";
//关闭数据库
database.close();
//删除数据库
QFile::remove("database.db");
可以通过一些工具对SQLite进行管理,如下:
SQLite的管理
管理工具挺多的,这里简单介绍几款:
Manager:开放源代码的SQLite管理工具,用来管理本地电脑上的SQLite数据库,可以独立运行(以XULRunner方式),也可以作为Firefox、Thunderbird、Seamonkey、Songbird、Komodo、Gecko等的插件。
Administrator:一个用来管理SQLite数据库文件的图形化工具,可进行创建、设计和管理操作。提供代码编辑器具有自动完成和语法着色,支持中文,适合初学者。
SQLite Database
browser:一个SQLite数据库的轻量级GUI客户端,基于Qt库开发,界面清洁,操作简单,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。
更多关于SQLite的介绍与使用,请参考:
&&技术在于交流、沟通,转载请注明出处并保持作品的完整性。
&&作者:&&原文:。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。sengmitnick 的BLOG
用户名:sengmitnick
访问量:150
注册日期:
阅读量:5863
阅读量:12276
阅读量:325688
阅读量:1034819
51CTO推荐博文
开发环境:Qt Creator 2.8.1Based on Qt 5.0.2 (GCC 4.8.2, 32 bit)问题1:编译无错误,在执行时终端出现以下字母:QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.问题所在代码段:QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");解决方法: & &把问题所在代码段改为以下代码:QSqlD
if(QSqlDatabase::contains("GBond"))
db = QSqlDatabase::database("GBond");
db = QSqlDatabase::addDatabase("QSQLITE", "GBond");这样一来,以上问题就解决了。不过,再次执行时终端出现以下字母:QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open问题所在代码段:QSqlQ
QString sql = "INSERT INTO contact VALUES(1 , 'smk' , 17 , 'friend', '' );" ;
query.exec(sql);解决方法: & &把问题所在代码段改为以下代码:QSqlQuery query(db);
QString sql = "INSERT INTO contact VALUES(1 , 'smk' , 17 , 'friend', '' );" ;
query.exec(sql);至始,该问题完美解决。ps:这个问题我也在网上搜过,网上的解决方法只是解决了一开始的问题,后面打不开数据库却在我的机子弄不了。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)ARM QT sqlite 解决方案
之前在PC机上用QT编译数据库,已经成功,本来以为直接移植到ARM上就可以用的,没想到遇到了莫名其妙的问题,到现在都搞不定。所以暂时先用sqlite3插件的方法完成任务再说,希望有用QT做数据库的大牛们帮忙看看问题所在,也随便记录一下sqlite3插件的方法。
一、QT编译数据库问题:
&1、根文件系统:友善提供的源代码,去掉qtopia之后的qt4部分
&2、问题现象&&& :
QSqlDatabasedb=QSqlDatabase::addDatabase(&QSQLITE&);
db.setDatabaseName(&database.db&);
*第一步:链接嵌入式数据库QSQLITE的,已经绑定成功
QMessageBox::warning(0, QObject::tr(&Database Error&),db.lastError().text());qDebug() &&QString(&dasfsdafdaga&); return false;}*第二步:打开数据库也没有问题
query.exec(QObject::tr(&create table student (id int primary key, name vchar)&));query.exec(QObject::tr(&insert into student values (0,'刘明')&));query.exec(QObject::tr(&insert into student values (2,'王红')&));*第三步,数据库操作开始出现问题,在PC机上实现的实现的时候这步一旦执行isActive变为true,数据库写入成功。但是移植到arm上之后却显示为false。我就郁闷了,数据库没法操作啊。网上查了老半天,遇到同样问题的人挺多,就是没有人说解决方案,有人在帖子上说跟友善的根文件系统配置有关,我打***问友善技术支持,他们说友善对数据库的支持比较差,他们也不确定是什么问题。继续查了几天错误,还是不知道到底是少了什么库还是少了什么设置,就是不能用,有个前辈建议我改为xml或者装个sqlite3的插件先代替数据库,最后决定,还是装sqlite3插件了。二、QT+sqlite3先说一下QT自带数据库和sqlite3的区别,他们的功能是一样的,但是代码就不一样了。QT对数据库具有完善的支持,不需要加任何其他插件就可以直接使用,但是如果你要是加了sqlite3插件,调用数据库就跟直接调用一个驱动一样,直接调用接口函数:open、close、……,换言之QT自带的数据库语言就用不上了。1、***sqlite3插件从官方网站下载完整版本。2、***sqlite3网上可以看到很多修改下载之后的源代码的论坛,我估计那些帖子比较老一点,最新版的代码已经不存在那些bug了,可以直接编译 *注意复制粘贴库函数的时候有的动态链接库如果单独复制会丢失之间的链接关系,所以需要一块复制cp -arf libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 。。。3、移植sqlite3在QTE的include文件中建立新文件夹sqlite3,将头文件放到里面;把库文件放到QTE的lib文件中4、编程(1) QT生成的.pro文件中添加库指令: LIBS += -lsqlite3(2) 在调用数据库的文件的头文件里添加头文件和变量 #include &sqlite3/sqlite3.h& &
sqlite3 * //数据库
char *zErrM //出错信息 char ** //调用时的保存位置 //列数 //行数 char * //出错信息(3)新建或打开数据库 if( (sqlite3_open(&people.db&, &db)) != 0 ){qDebug()&&&sqlite3 open is false&; }else {qDebug()&&&sqlite3 open is OK&; }(4) 建立表格
sqlite3_exec
person(name
varchar(30)
*添加 PRIMARY KEY 是指定主键,每个数据库只能有一个,主键的值不能重复,比方说你设定name为主键,则相同名字的人只能保存第一个,其他的忽略不计。若想避免这种情况,则去掉主键或者设定id号为主键(id号一直加一,不会重复)。
(5)往表格里写入信息
a.直接添加数据
sqlite3_exec(db, &insert into person values('张翼', 30)&, NULL, NULL, &zErrMsg); sqlite3_exec(db, &insert into person values('hongdy', 28)&, NULL, NULL, &zErrMsg);
b.添加数字变量 int data=10; char sql2[100]; //必须写明大小,划分内存,如果只写一个 char *sql2,会出现段错误 sprintf(sql2,&insert into person values('张翼',%d);&,data);sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg); *sprintf的作用是字串格式化命令,主要功能是把格式化的数据写入某个字符串中 c.添加字符串变量 char data[]=&张翼&; char sql2[100];
sprintf(sql2,&insert into person values('%s',10);&,data);sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);
* %s需要用单引号注释
d.添加text中的变量到数据库中 这里需要汉字编码的问题,Windows下默认GBK或GB2312编码,Linux下默认UTF-8编码,所以如果没有设置好会出现乱码d1. 在main.cpp中添加以下指令,支持中文显示& #include &QTextCodec&
QTextCodec::setCodecForTr(QTextCodec::codecForName(&UTF-8&));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(&UTF-8&));QTextCodec::setCodecForLocale(QTextCodec::codecForName(&UTF-8&));
d2. 读取保存
char *abc=ui-&lineEdit-&text().toUtf8().data(); //QString 转char*
sprintf(sql2,&insert into person values('%s',%d);&,abc,data);
sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);*在调试的时候如果用串口超级终端调试的话,在ARM上显示正常,但是在串口是乱码,不要被迷惑(6)查询、调用数据库a. 查询全部sqlite3_get_table(db, &select * from person&, &resultp, &nrow, &ncolumn, &errmsg);*resultp保存数据库信息,nrow返回列数,ncolumn返回列数b. 查询部分信息sqlite3_get_table(db, &select * from person where name='zhang'&, &resultp, &nrow, &ncolumn, &errmsg);c. 变量查询查询 char data[]=&张翼&; char sql3[100];
sprintf(sql3,&select * from person where name='zhang';&,data); sqlite3_get_table(db, sql3, &resultp, &nrow, &ncolumn, &errmsg); *查询时使用变量的方法和添加时一样
(7)关闭数据库
sqlite3_close(db);
楼主,那存在数据库里的信息怎样用表格显示出来呢?用Qt中的tableView好像不行。
本分类共有文章45篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";
/*爱悠闲底部960*75*/
var cpro_id = "u1888128";请问如何基于QT将SQLITE用于ARM? - QTCN开发网 - Powered by phpwind
查看完整版本: [--
请问如何基于QT将SQLITE用于ARM?
&&&&&&在网上查了一下资料,基本都是在ARM上单独用SQLITE的,请问如何在ARM中用QT连接SQLITE。以前都是在PC上用,没什么问题,现在不知道怎么搭建这个环境。我是先编译的QT/E,加上了SQLITE的支持,我看了下编译完的plugins-&sqldriver目录,有了libsqlite.so库文件,应该是数据库的驱动库文件。请问接下来该如何操作移植?&&&&&&请各位帮帮忙,讲下移植的过程?感激不尽!!
还是米有人。。。。
你是压根不会移植还是移植后连接数据库提示driver not loaded
1. 你确认插件目录设置对了么?以保证插件能正确加载。2. 如果你的sqlite插件编译时是动态链接的,则要能找到sqlite的共享库文件(libsqlite.so??)3. 如果编译时选择将插件编译到QtSql模块里面,Qt源码实际上是自带了sqlite库的,所以可以直接将sqlite静态链接到QtSql模块里。这是万能大法,呵呵,插件和sqlite全在QtSql里。
请问下版主,移植的时候我需要下载SQLITE并编译吗?
引用第4楼0354030w于 12:16发表的&&:请问下版主,移植的时候我需要下载SQLITE并编译吗?&& Qt有自带。
3. 如果编译时选择将插件编译到QtSql模块里面,Qt源码实际上是自带了sqlite库的,所以可以直接将sqlite静态链接到QtSql模块里。这是万能大法,呵呵,插件和sqlite全在QtSql里。请问版主大人,如何将sqlite插件直接编译到QtSql里面去,我编译Qt的时候加的是 -qt-sql-sqlite-plugin-sql-sqlite这两个来支持sqlite的,。
引用第6楼0354030w于 14:10发表的 回 5楼(XChinux) 的帖子 :3. 如果编译时选择将插件编译到QtSql模块里面,Qt源码实际上是自带了sqlite库的,所以可以直接将sqlite静态链接到QtSql模块里。这是万能大法,呵呵,插件和sqlite全在QtSql里。请问版主大人,如何将sqlite插件直接编译到QtSql里面去,我编译Qt的时候加的是 -qt-sql-sqlite-plugin-sql-sqlite这两个来支持sqlite的,。
-qt-sql-sqlite就用这个。
感谢版主大人,用了第三个办法,把SQLITE数据库直接编译到sql模块里面去,成功在ARM上运行了!!以前用的是qt-sql-sqlite&&-plugin-sql-sqlite这两个选项,可能后一个选项的影响,还是把SQLITE数据库编译成了插件。现在只用qt-sql-sqlite成功编译进了SQL模块!!!
查看完整版本: [--
Powered by
Gzip disabled

参考资料

 

随机推荐