`
chinamming
  • 浏览: 151366 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步实现C++操作SQLite数据库

 
阅读更多
一步一步实现C++操作SQLite数据库

SQLite,是一款轻型的数据库,是遵守ACID的关联式关系数据库,目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同样的代码可以实现跨平台编译,这个数据库和微软的Access很象,都是小型的数据库管理系统,最大的差别为sqlite不需要office的支持,可以完全开源,是真正意义上的跨平台的数据库

由于工作的需要,这几天对sqlite数据库研究一下,并使用C++对其进行了简单的操作。中间遇到了很多问题,找到了很多资料终于解决了。总结问题,不管提高,所以把遇到的问题和解决办法写出来,希望对大家有用。

1:下载源码并编译

我下的版本为sqlite-amalgamation-3070701.zip,这个包含了主要的源代码。sqlite-dll-win32-x86-3070701.zip这个是Windows下的编译好的DLL文件和def文件,解压缩后包含两个文件,sqlite3.defsqlite3.dll

编译源代码很简单,新建立一个C++空项目,把sqlite-amalgamation-3070701.zip解压缩后的文件拷进去,编译、链接,就行了。

我的目的是把sqlite数据库作为自己项目中的一部分,是作为嵌入的一部分使用的。这个要利用到sqlite3.dll文件。可是源文件只有sqlite3.defsqlite3.dll没有sqlite3.lib文件,怎么用呢?

LIB文件和DLL文件其实是差不多的,只是使用的时间不同。LIB文件使用在编译阶段DLL文件使用在运行阶段。根据def文件可以生成对应的LIB文件。以下是命令行生成LIB文件。

找到VS的安装路径,我的是D:\ProgramFiles\,用命令行进入以下路径。

D:\ProgramFiles\MicrosoftVisualStudio9.0\VC\bin>lib/def:sqlite3.def/machine:ix86

问题一:mspdb80.dll无法找到

原因是当前路径下没有“msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件。

解决办法:Common7\IDE\下复制这四个文件到VC\Bin\下即可解决。

对应生成lib文件需要注意的是把sqlite3.def拷到上述路径下,使用命令行生成后会产生sqlite3.lib文件,这个就是在程序中编译时需要的文件。显示的结果为:

Microsoft(R)LibraryManagerVersion9.00.21022.08

Copyright(C)MicrosoftCorporation.Allrightsreserved.

正在创建库sqlite3.lib和对象sqlite3.exp

2:在C++中操作SQLite数据库

问题二:没有找到sqlite3.dll,因此这个应用程序未能启动

我在我把sqlite3.dllsqlite3.hsqlite3.lib拷到同一个文件夹里,编译时已知出现这个问题。

原来是程序执行时需要的DLL按照当前工作路径、系统目录的顺序搜索DLL文件。我的DLL文件没有和可执行文件在同一个路径下,肯定要出错了。明白这些,把sqlite3.dll拷到Debug文件夹下,问题解决了。

3:演示代码

主要的源代码来自网上,这个是我修改过的。

  1. #include<iostream>
  2. usingnamespacestd;
  3. #include"./sqlite/sqlite3.h"
  4. #pragmacomment(lib,"./sqlite/sqlite3.lib")
  5. staticint_callback_exec(void*notused,intargc,char**argv,char**aszColName)
  6. {
  7. inti;
  8. for(i=0;i<argc;i++)
  9. {
  10. printf("%s=%s\n",aszColName[i],argv[i]==0?"NUL":argv[i]);
  11. }
  12. return0;
  13. }
  14. intmain(intargc,char*argv[])
  15. {
  16. constchar*file="test.db";
  17. constchar*sSQL="select*fromstu;";
  18. char*pErrMsg=0;
  19. intret=0;
  20. sqlite3*db=0;
  21. ret=sqlite3_open("./test.db",&db);
  22. if(ret!=SQLITE_OK)
  23. {
  24. fprintf(stderr,"Couldnotopendatabase:%s",sqlite3_errmsg(db));
  25. exit(1);
  26. }
  27. printf("Successfullyconnectedtodatabase\n");
  28. sqlite3_exec(db,sSQL,_callback_exec,0,&pErrMsg);
  29. if(ret!=SQLITE_OK)
  30. {
  31. fprintf(stderr,"SQLerror:%s\n",pErrMsg);
  32. sqlite3_free(pErrMsg);
  33. }
  34. sqlite3_close(db);
  35. db=0;
  36. return0;
  37. }

4SQLite使用小问题说明

我在命令行操作SQLite数据库时,进入后一直不能生成一个数据库,并且生成表的命令也不成功。

后来终于明白了,SQLite命令行的形式为:sqlite.exedbfile,后面的即为数据库名,如果不存在,在操作后会自动生成一个数据库名。

SQLiteSQL命令都是以“;”为结束符,开始一直执行不成功,原来是没有加入“;”语句结束符号。

终于完成了一个简单的操作SQLite的程序。
分享到:
评论

相关推荐

    VC 操作sqlite数据库

    首先,为了在C++中操作SQLite数据库,我们需要包含SQLite的C++接口库,如sqlite3.h头文件。这个库提供了API,允许开发者直接在代码中执行SQL命令。 安装SQLite库通常涉及下载预编译的库文件或源代码,并将其添加到...

    c++操作数据库

    本话题主要围绕如何使用C++结合MySQL的头文件(.h)、库文件(.lib)以及动态链接库文件(.dll)来实现数据库操作。 首先,我们需要安装MySQL的C++开发库,这通常包含所需的头文件和库文件。这些文件用于编译和链接...

    sqlite3 c++ API 静态库

    在C++环境中,SQLite3提供了丰富的API接口供开发者调用,实现对数据库的操作。本资源是针对Visual Studio 2013 X64平台的SQLite3 C++静态库,它允许你在64位环境下直接将SQLite3的功能整合到你的C++项目中,无需额外...

    Qt 数据库sqlite开课查询系统

    在本课程中,我们将深入探讨如何使用Qt框架与SQLite数据库进行交互,构建一个功能完备的查询系统。Qt是一个跨平台的C++库,提供了一整套工具,使得开发者能够创建图形用户界面(GUI)应用程序,同时也支持数据库操作...

    SQLITE3.26.0 静态lib(vs2015编译x86,x64),在内部实现了数据库加密解密功能

    通过调用这个函数,开发者可以为已打开的SQLite数据库设置加密密钥。这一步通常在数据库初始化时进行,密钥一旦设置,所有后续的数据读写都将受到这个密钥的保护。如果尝试打开一个已经加密的数据库而没有提供正确的...

    qt+sqlite实例源码程序

    1. **Qt与SQLite的集成**:在Qt中,SQLite数据库的访问是通过QSqlDatabase类来实现的。首先需要引入Qt的SQL模块,并通过`QSqlDatabase::addDatabase()`方法注册SQLite驱动,然后通过`QSqlDatabase::open()`打开...

    C语言程序调用SQLite

    C语言程序调用SQLite涉及到几个关键步骤和知识点,从标题来看,我们需要了解C语言如何与SQLite数据库交互,包括如何打开和关闭数据库,如何执行SQL命令等。接下来,我们详细阐述这些步骤和相关知识点。 首先,了解...

    sqlite3的使用详解

    在Windows环境中,`sqlite3.dll`是SQLite3数据库引擎的实现,当你在应用程序中使用SQLite3时,需要将这个库文件与你的可执行文件一起分发,以确保程序能够正常运行。`sqlite3.h`则包含了所有关于SQLite3的函数声明、...

    基于QT5.9.4的qsqlite数据库小程序

    QSQLite库为开发者提供了一组C++类,使得操作SQLite数据库变得简单且直观。 在这个基于QT5.9.4的qsqlite数据库小程序中,我们可以预期实现以下功能: 1. 数据库连接:使用QSqlDatabase类,可以轻松地创建、打开或...

    用qt创建一个c的工程文件,测试能否打开一个数据库sqlite3

    在本文中,我们将深入探讨如何使用Qt框架在嵌入式平台上创建C++工程,并测试其是否能够成功连接并操作SQLite3数据库。首先,我们需要了解Qt和SQLite3的基础知识,然后介绍在A8处理器上进行交叉编译的过程。 Qt是一...

    SQL.rar_Qt数据库_qt sql_qt 数据库_qt 数据库操作_qt和数据库

    在一组数据库操作中,如果任何一步失败,可以回滚所有改变,保持数据库的完整性。 7. **预编译语句**: 使用QSqlQuery的prepare()方法可以预编译SQL语句,提高性能,防止SQL注入攻击。 8. **数据库模型视图架构**: ...

    cpp-SQLCipher是一个SQLite扩展为数据库文件提供256位AES加密

    SQLCipher 是一个针对 SQLite 数据库的开源扩展,专门设计用于在本地存储中实现256位AES(高级加密标准)加密。这使得敏感数据的安全存储成为可能,尤其适用于那些需要保护用户隐私的应用程序。在C++环境中,...

    sqlite-autoconf-3220000.tar.gz

    SQLite是一款开源、轻量级的嵌入式数据库引擎,它被广泛应用于各种操作系统和应用程序中。"sqlite-autoconf-3220000.tar.gz" 是...用户可以利用这个包来定制自己的SQLite数据库引擎,并将其集成到各类应用程序中。

    sqlite注册器

    SQLite注册器则是用于管理和操作SQLite数据库的一个工具,尤其在Windows操作系统下,它可以帮助用户注册SQLite的动态链接库(dll)文件,以便系统能够识别并正确调用SQLite的功能。 SQLite的核心特性包括: 1. **...

    sql lite 数据库之间表复制的方法

    在处理多个SQLite数据库时,有时需要将一个数据库中的表复制到另一个数据库中,这可能是因为数据库版本差异、数据同步需求或是备份恢复操作。以下将详细介绍如何在SQLite数据库之间复制表。 1. 使用SQLite Manager...

    sqlite应用实例

    SQLite提供了`sqlite3.exe`命令行工具进行数据库的备份和恢复,通过导出`.sql`文件或复制数据库文件实现。 通过以上步骤,我们可以深入理解SQLite的使用,并能将其应用于实际项目中。这个实例旨在覆盖SQLite的基本...

    sqlite-autoconf-3260000.tar

    总的来说,"sqlite-autoconf-3260000.tar"提供了SQLite数据库系统的一个完整源代码包,通过autoconf工具简化了在不同平台上的构建和安装流程,让开发者能够轻松地将SQLite集成到他们的应用程序中。

    sqlite3安装包

    SQLite3是一款轻量级的数据库管理系统,广泛应用于嵌入式设备和各种操作系统,包括Linux。它的特点是无需独立服务器进程,可以直接在用户空间运行,极大地简化了数据库的部署和使用。这个压缩包“sqlite-3.6.14.2”...

    C++实现图书管理系统

    比如,当用户借阅图书时,需要同时更新图书状态和借阅记录,如果任何一步失败,则整个操作应回滚。 错误处理和异常处理也是系统的重要组成部分。C++的异常处理机制使得程序能够在遇到错误时优雅地恢复,而不是突然...

Global site tag (gtag.js) - Google Analytics