Qt之操作数据库(SQLite)

转载 2015年11月18日 21:36:38
 QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。
    QSqlDatabase对象象征了数据库的关联。Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版(Desktop Edition)包括如下一些驱动程序:

 驱动程序  数据库 
 QDB2  IBM DB2 7.1版以及更新的版本 
 QIBASE  Borland InterBase
 QMYSQL  MySql 
 QOCI  甲骨文公司(Oracle Call Interface)
 QODBC   ODBC(包括微软公司的QSL服务)
 QPSQL   PostgreSQL的7.3版以及更高版本 
 QSQLITE  QSLite第3版 
 QSQLITE2  QSLite第2版
 QTDS   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.") ;
}
else
{
//QSqlQuery类提供执行和操作的SQL语句的方法。
//可以用来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE、DELETE, 
//以及DDL(数据定义语言)语句,例如CREATE TABLE。
//也可以用来执行那些不是标准的SQL的数据库特定的命令。
QSqlQuery sql_query; 

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 = :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();
}
else
{
qDebug()<<"table created!";
}

//查询最大id
int max_id = 0;
sql_query.prepare(select_max_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
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();
}
else
{
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();
}
else
{
qDebug()<<"updated!";
}

//查询部分数据
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
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();
}
else
{
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();
}
else
{
qDebug()<<"deleted!";
}

//清空表
sql_query.prepare(clear_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"cleared";
}
}

//关闭数据库
database.close();

//删除数据库
QFile::remove("database.db");

可以通过一些工具对SQLite进行管理,如下:

Qt之操作数据库(SQLite)

SQLite的管理
管理工具挺多的,这里简单介绍几款:
  • SQLite Manager:开放源代码的SQLite管理工具,用来管理本地电脑上的SQLite数据库,可以独立运行(以XULRunner方式),也可以作为Firefox、Thunderbird、Seamonkey、Songbird、Komodo、Gecko等的插件。
  • SQLite Administrator:一个用来管理SQLite数据库文件的图形化工具,可进行创建、设计和管理操作。提供代码编辑器具有自动完成和语法着色,支持中文,适合初学者。
  • SQLite Database browser:一个SQLite数据库的轻量级GUI客户端,基于Qt库开发,界面清洁,操作简单,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。

更多关于SQLite的介绍与使用,请参考:

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

Qt5.6 用SQLite数据库验证做登录框,并查删改xml文件做记住密码和自动登录<一>

你绝对能够实现,使用QT5做登录框,其中用到重写标题栏,使用SQlite验证登录是否成功,使用xml文件读取数据库名称,数据库版本等,将用户记住密码的以及自动登录的存储到xml文件中达到我们想要的效果...
  • yinyuchen1
  • yinyuchen1
  • 2016年09月08日 20:29
  • 1266

员工信息管理系统(Qt+SQLite)源码

  • 2011年09月22日 09:21
  • 451KB
  • 下载

Qt之操作数据库(SQLite)实例

QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。...
  • rl529014
  • rl529014
  • 2016年08月05日 11:17
  • 13074

QT中简单使用SQLITE数据库

代码:mian.cpp #include #include #include int main(int argc, char *argv[]) { QCoreApplicati...
  • fjb2080
  • fjb2080
  • 2011年06月01日 16:28
  • 11110

在 QT5 中使用 SQLITE

在我最近一直在做的有关 Kindle 批注管理软件的项目中,对于数据库我是用的是 SQLITE,在这篇文章中我会介绍一下 SQLITE 数据库,以及如何在 QT5 中使用它。 SQLITE 简介WHA...
  • luoyhang003
  • luoyhang003
  • 2016年03月14日 23:59
  • 8380

Qt SQLite数据库操作

Qt提供了平台以及数据库种类无关的访问数据库接口,支持 QMYSQL,QODBC ,QPSQL和QSQLITE. 由于Qt对不同平台和数据库都使用同一个接口,本文选择了对嵌入式领域常用的SQLite数...
  • pugu12
  • pugu12
  • 2016年03月22日 14:33
  • 1465

Qt---自带的数据库QSQLITE

database.h#ifndef DATABASE_H #define DATABASE_H#include #include #include #include #include #in...
  • u012319493
  • u012319493
  • 2016年07月23日 22:36
  • 13923

Qt数据库sqlite总结

原文地址:http://blog.csdn.net/NewBee520/article/details/8247236 QSqlDatabase类实现了数据库连接的操作 QSqlQuery类用来执...
  • luckywang1103
  • luckywang1103
  • 2012年12月04日 17:58
  • 17580

基于Qt的sqlite编程

通过Qt操作sqlite数据库。建库,建表,添加字段、增删改查。 先介绍下常用的sql语句: 判断数据库中是否存在某个表: SELECT 1 FROM sqlite_master where typ...
  • lingyun0
  • lingyun0
  • 2014年12月09日 23:37
  • 4014

Qt中使用SQLITE数据库

QT +=sql 在头文件中声明调用所需要的库 #include //数据库 #include //数据库 #include //语句 #include //错误 链接数据库 Q...
  • qq_31793791
  • qq_31793791
  • 2016年11月01日 20:20
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt之操作数据库(SQLite)
举报原因:
原因补充:

(最多只允许输入30个字)