Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样)。关于Sqlite和Qt的千丝万缕的故事,有机会再说(各位看官查一查也可以自己search一下)。这里简单说说Sqlite数据库的用法吧。

一、sql语句和部分接口函数

1、在.pro文件中记得增加 :

QT       += core gui sql
 

2、sqlite数据库的增删查改【接口函数参见代码】

  1. #ifndef SQLITEDBAOPERATOR_H

  2. #define SQLITEDBAOPERATOR_H

  3. #include"generalheaders.h"

  4. #include <QSqlDatabase>

  5. #include <QSqlQuery>

  6. #include <QSqlQueryModel>

  7. #include <QDebug>

  8. #include <QSqlError>

  9. class SqliteDBAOperator

  10. {

  11. public:

  12. SqliteDBAOperator();

  13. ~SqliteDBAOperator();

  14. public:

  15. //创建数据库并建立连接

  16. bool OpenDb(void);

  17. //创建数据表(student)

  18. void createTable(void);

  19. //在表格中增加新的字段

  20. void addNewcolumn(QString &columnNameAndproperty);

  21. //查询和显示结果

  22. void queryTable(QString& str);

  23. //判断数据表是否存在

  24. bool IsTaBexists(QString& Tabname);

  25. //插入数据

  26. void singleinsertdata(w2dba &singledb);//插入单条数据

  27. void Moreinsertdata(QList<w2dba> &moredb);//插入多条数据

  28. //删除数据

  29. void deletedata();

  30. //修改数据

  31. void updatedata();

  32. //关闭数据库

  33. void closeDb(void);

  34. private:

  35. QSqlDatabase db;//用于建立和数据库的连接

  36. };

  37. #endif // SQLITEDBAOPERATOR_H

这里w2dba 是自己定义的一个结构体类型的数据。各位可以根据自己实际需要修改。 因为c++开发面向对象的思想,所以我个人通常是在确定一个对象后,再思考这个对象的衣食住行、拉屎放屁、能够公开交流的、或者只能私有的都有哪些东西,接着根据这个对象的应有的特点,编写对应的函数尽量让这个对象鲜活饱满,但是春光不会外泄出来(==》纯属小弟个人微不足道的理解,不喜勿喷。更多精彩画面,自行脑补)。

  1. /*Sqlite数据库操作*/

  2. #include "sqlitedbaoperator.h"

  3. #include"generalheaders.h"

/*构造函数中初始化数据库对象,并创建连接*/
  1. SqliteDBAOperator::SqliteDBAOperator()

  2. {

  3. QSqlDatabase database;

  4. if (QSqlDatabase::contains("qt_sql_default_connection"))

  5. {

  6. database = QSqlDatabase::database("qt_sql_default_connection");

  7. }

  8. else

  9. {

  10. //建立和sqlite数据的连接

  11. db = QSqlDatabase::addDatabase("QSQLITE");

  12. //设置数据库文件的名字

  13. QString dbname = QDir::currentPath() +QString("/")+ QString("MACAddrs.db");

  14. db.setDatabaseName(dbname);

  15. }

  16. }

 
  1. /*析构函数关闭数据库连接*/

  2. SqliteDBAOperator::~SqliteDBAOperator()

  3. {

  4. db.close();

  5. }

  6. //打开数据库

  7. bool SqliteDBAOperator::OpenDb(void)

  8. {

  9. //打开数据库

  10. if(db.open() == false){

  11. qDebug() << "连接数据失败!";

  12. return false;

  13. }

  14. qDebug() << "连接数据库成功";

  15. return true;

  16. }

  17. //判断数据库中某个数据表是否存在

  18. bool SqliteDBAOperator::IsTaBexists(QString& Tabname)

  19. {

  20. QSqlDatabase db = QSqlDatabase::database();

  21. if(db.tables().contains(Tabname))

  22. {

  23. return true;

  24. }

  25. return false;

  26. }

  27. //创建数据表

  28. void SqliteDBAOperator::createTable(void)

  29. {

  30. //用于执行sql语句的对象

  31. QSqlQuery query;

  32. //构建创建数据库的sql语句字符串

  33. QString str = QString("CREATE TABLE MACAddrs (\

  34. ID INT PRIMARY KEY NOT NULL,\

  35. Type TEXT NOT NULL,\

  36. ProduceTime TEXT NOT NULL)");

  37. //执行sql语句

  38. query.exec(str);

  39. }

  40. void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)

  41. {

  42. }

  43. //查询和显示结果

  44. void SqliteDBAOperator::queryTable(QString& str)

  45. {

  46. QSqlQuery query;

  47. //构建创建数据库的sql语句字符串

  48. str = QString("SELECT ID,Type,MACADDR FROM MACAddrs");

  49. //执行sql语句,并将结果集保存到model

  50. query.exec(str);

  51. }

  52. //单条插入

  53. void SqliteDBAOperator::singleinsertdata(w2dba &singledb)

  54. {

  55. QSqlQuery query;

  56. query.prepare("INSERT INTO MACAddrs VALUES (:ID,:Type,:ProduceTime)");

  57. query.bindValue(":ID", singledb.id);

  58. query.bindValue(":Type", singledb.type);

  59. query.bindValue(":ProduceTime",singledb.prodceTime);

  60. query.exec();

  61. }

  62. //多条插入

  63. void SqliteDBAOperator::Moreinsertdata(QList<w2dba>& moredb)

  64. {

  65. QSqlQuery query;

  66. query.prepare("insert into MACAddrs values (?,?,?,?,?,?,?,?)");

  67. QVariantList idlist,snlist,typelist,MACAddrlsit,produceTimelist,Pieceslist,Operatorlist,OperateStatlist;

  68. for(int i=0; i< moredb.size(); i++)

  69. {

  70. idlist << moredb.at(i).id;

  71. typelist << moredb.at(i).type;

  72. produceTimelist << moredb.at(i).prodceTime;

  73. }

  74. query.addBindValue(idlist);

  75. query.addBindValue(MACAddrlsit);

  76. query.addBindValue(produceTimelist);

  77. if (!query.execBatch())

  78. {

  79. qDebug() << query.lastError();

  80. }

  81. }

  82. //删除一条数据

  83. void SqliteDBAOperator::deletedata()

  84. {

  85. //比较简单,自行补充

  86. }

  87. //修改

  88. void SqliteDBAOperator::updatedata()

  89. {

  90. //比较简单,自行补充

  91. }

  92. void SqliteDBAOperator::closeDb(void)

  93. {

  94. db.close();

  95. }

这部分可能稍微有点意思的就是带参SQL语句的编写,在数据的单条插入和多条插入中,使用了两种不同的方法,各位可以自行查看。

二、接口函数的检测

1、windows下sqlite数据库的安装:

(1) 前往www.sqlite.org.com下载相应的数据库文件,然后在创建路径并在 c:\sqilte3 路径下将文件解压(路径可自己定义);

(2)设置环境变量,将数据库路的路径增加到PATH变量下。

(3)环境配置完成,重启电脑,配置生效。

(4)数据库操作

1>创建或打开数据库

通过cd 命令到.db数据库文件所在的目录下,如果没有文件自己创建一个。

这里在C盘的根目录下创建一个test.db的数据库文件

敲击回车后进入sqlite数据库,显示如下:

(2)前面简单的数据库基本配置工作已经完成,现在开始数据库的操作部分

首先,我们要创建一张数据表:

sql语句:

CREATE TABLE MACAddrs ( ID INT PRIMARY KEY NOT NULL,Type TEXT NOT NULL,ProduceTime TEXT );

查看表格是否创建成功 以及表头内容:

.tables

.schema

QT实现对sqlite数据库的操作

先看下效果图:
http://blog.chinaunix.net/photo/116111_101004185238.jpg
该程序对数据库的操作包括4个字段:ID、Name、Addr、Nick  (注意第一个字段必须是整数)
query、insert、delete按钮分别表示查询、插入、删除功能
 
查询按钮的实现:
void database::on_QueryButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("test.db");
    bool ok = db.open();
    if (ok == true)
    {
        QSqlQuery query;
        query.exec("SELECT * from info");
        QString string;
        while (query.next())
        {
            QString id = query.value(0).toString();
            qDebug() <            string += id + "\n";
            QString name = query.value(1).toString();
            string += name + "\n";
        }
        qDebug() <        ui->TextEdit->setText(string);
    }
    else
    {
        QMessageBox::information(this, "ERROR", "open database error");
    }
    db.close();
}
插入按钮的实现:
void database::on_InsertButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("test.db");
    bool ok = db.open();
    if (ok == true)
    {
        QSqlQuery query;
        query.prepare("INSERT INTO info (id, name) "
                  "VALUES (:id, :name)");
        query.bindValue(":id", ui->IdEdit->text().toInt());
        query.bindValue(":name", ui->NameEdit->text());
        query.exec();
        ui->IdEdit->clear();
        ui->NameEdit->clear();
        this->on_QueryButton_clicked();
    }
    else
    {
        QMessageBox::information(this, "ERROR", "open database error");
    }
    db.close();
}
 
删除按钮的实现:
void database::on_DeleteButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("test.db");
    bool ok = db.open();
    if (ok == true)
    {
        QSqlQuery query;
        QString command="DELETE FROM info WHERE ";
        if (ui->IdEdit->text().isEmpty() == false)
        {
            command.append("id="+ui->IdEdit->text());
            query.exec(command);
        }
        else if (ui->NameEdit->text().isEmpty() == false)
        {
            command +="name=\'" + ui->NameEdit->text() + "\'";
            qDebug()<            query.exec(command);
        }
        else
        {
            QMessageBox::information(this, "ERROR", "open database ok! delete error");
        }
        ui->IdEdit->clear();
        ui->NameEdit->clear();
        this->on_QueryButton_clicked();
    }
    else
    {
        QMessageBox::information(this, "ERROR", "open database error");
    }
    db.close();
}

Qt下Sqlite数据库操作相关推荐

  1. QT读写Sqlite数据库三种方式

    QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据 ...

  2. QT读写Sqlite数据库的三种方式

    QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据 ...

  3. Qt连接sqlite数据库

    Qt连接sqlite数据库步骤 ①添加数据库模块 QT += sql ②添加头文件 #include<QSqlDatabase> #include<QSqlQuery> //s ...

  4. 数据存储之 SQLite 数据库操作(三)

    上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 ...

  5. 数据存储之 SQLite 数据库操作(二)

    上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学 ...

  6. C# SQLite 数据库操作语句与文件视图管理器

    //sqlite数据库视图管理器 SQLiteSpy是一款专业的SQLite数据库管理,主要用于读取sqlite数据库,建立新的SQL查询,视图,复制和删除表.编辑单元格,以及查看索引,触发器和排序规 ...

  7. 实验8 SQLite数据库操作

    实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016/5/6 实验项目名称 SQLite数据库操作 实验地点 综合实验室 实验类型 □验证型    √设计型    □综合型 学 ...

  8. Android sqlite数据库操作通用框架AHibernate(一)-CRUD示例和使用步骤

    AHibernate简介 一句话描述,使用AHibernate框架进行sqlite数据库操作您将从重复性劳动中解脱出来. (一)支持功能: 1.自动建表,支持属性来自继承类:可根据注解自动完成建表,并 ...

  9. SQLite数据库操作实践

    SQLite数据库操作实践 SQLite存储类型 null       - 空值  integer - 有符号整数,自增列定义 id integer primary key autoincrement ...

最新文章

  1. 数据库存储引擎大揭秘,不看不知道这里面的骚操作可真多!
  2. 能跳过节假日的闹钟_非人哉:叫九月起床有多难?闹钟坏了许多个,哮天去叫被打了一顿...
  3. Spring - Java/J2EE Application Framework 应用框架 第 9 章 DAO支持
  4. 98%的人没解出的德国面试逻辑题(离散数学篇)!?
  5. 放在每个定义前的html语言,html基础
  6. User Experience Kit
  7. 又见链表 --- 另一种Creat方式与反转
  8. 腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器上网设置 | 192路由网
  9. 解读:百度官方公告对于6.22、6.28事件解释
  10. lxterminal命令打开新窗口并执行python脚本
  11. DataGridView分页
  12. 数据化、信息化、数字化和智能化之间联系和区别解析(建设收藏)
  13. xboxone硬盘坏的表现_移动硬盘打不开认不到以后的数据恢复所需要涉及到知识与恢复过程...
  14. java rxtx_Java使用开源Rxtx实现串口通讯
  15. 计算机编程语言用英语怎么说,编程用英语怎么说
  16. 从零开始设计一个共识算法——一场没有硝烟的战争
  17. ubuntu18本地镜像源_Ubuntu 18.04 搭建私有软件镜像源(支持 Ubuntu 和 CentOS)
  18. WiFi万能钥匙,真的过气了?
  19. 北京外企 外服控股:人服国企借道资产重组上市
  20. 计算机组成与维修考试试题,计算机组成原理试题与答案(考试资料)

热门文章

  1. 美团flutter_ggtalk 聊聊跨平台:后起之秀 Flutter
  2. python 禁用网卡_如何编程实现启用禁用网卡
  3. html5文件阅读器api,html 5 读取本地文件API
  4. python3命令需要使用命令行开发者工具_关于Python3的import问题(pycharm可以运行命令行import错误)...
  5. python自动化框架2019_【转】python3实现自动化框架robotframework
  6. c语言中 printf(quot;nquot;),关于C语言 printf(quot;%d\nquot;,printf(quot;%dquot;,printf(quot;%dquot;...
  7. c语言uppercase恢复小写,C语言转换字符串为大写和小写
  8. java在dos中如何测试_[求助]怎么在java中模拟dos命令行
  9. 基于jsp的教师科研工作量_javaweb教师工作量管理系统
  10. matlab叠加定理怎么输入,自动控制原理(第2版)(余成波-张莲-胡晓倩)习题全解及MATLAB实验-----第1、2章习题解答.doc...