qt开发中的sqlite数据库使用

    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

发布了125 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Fiverya/article/details/99860183
今日推荐