sqlite与C++进行连接

前端之家收集整理的这篇文章主要介绍了sqlite与C++进行连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite数据库是零配置的,sqlite数据库不同于sqlServer等数据库sqlite不需要复杂配置,只需要,将sqlite的库文件和动态链接文件拷贝到相应工程目录下,就可以使用sqlite数据库,只是用到数据库基本操作的同学们,建议选择sqlite数据库,为大家介绍一下使用sqlite数据库API函数来实现一些基本操作。

sqlite应用与嵌入式,应为小巧方便,而且没有其他数据库的复杂配置,我们在写一些小程序或者对数据库不是很复杂的操作的情况下,sqlite是不错的选择 。

我们使用sqlite时需要下下载它的压缩包,网上有很多,

解压后,我们可以看到存在 其中我们需要的sqlite3.h和sqlite3.lib以及sqlite3.dll三个文件,接下来我们需要配置我们的编译器(vc6.0或者VS,其步骤都一样)

(1)首先,打开VS编译器,新建WIN32 控制台程序,F7编译,运行(当然什么都没有,目的是得到debug文件



(2)然后我们把已经下载的sqlite3.h,sqlite3.lib拷贝到新建的Testsqlite目录下。然后把sqlite3.h拷贝到debug目录下。其实只要把这几个文件拷贝到程序的目录下即可,到时候我们可以在include中加上路径,同样也能找到。

上面这种加载库文件方法,有一定弊端(万一我们要引用的文件很多,都拷贝到程序目录下,会很麻烦),第二种方法是使用VS2010编译器所带的功能:我们点击“项目”->“属性”-> 链接器,在附加包含目录里面添加我们所用到的库文件(lib)(输入头文件或者包含文件所在的文件目录),然后在附加库目录里面添加我们用到的库文件的名字(库文件所在的文件目录)。注意添加的时候用逗号隔开(此时我们仍然要把动态链接文件拷贝到程序目录下),这样我们就完成了库文件的加载。方法如下:

(3)




(4)附加包含目录



(5)附加依赖项


以上使用第三方库的方法请看如何使用第三方库 http://blog.csdn.net/u014028070/article/details/42278007

以上方法相当与我们把库文件包含进来,以便调用。然后我们在主程序的头文件中加入如下头文件sqlite的API函数所在的头文件)。然后我们编译下,检查前面的操作是否正确。

此时我们在程序中使用sqliteAPI函数来操作数据库。首先是创建数据库,此时,我们定义一个sqlite操作句柄(以后的打开,插入,执行等动作都是由句柄来执行的),然后定义一个字符指针,和数组,指针用来传递错误信息,数组用来存放我们的sql语句。如图:




sqlite3_open()函数用来打开一个数据库,若存在,则直接打开,若不存在,则建立一个。



运行一下。

此时我们进入程序的目录下,会发现多了一个后缀名为db的文件,这就是我们创建的数据库,右键属性,看到大小为0kb(因为里面没有插入数据)。





此时,我们进行插入数据操作,插入操作首先要建立数据所属的属性(关系数据库的概念),我们在数据库增加三个属性,分别是sno,sname,sex。分别是整形,动态字符型,字符型。

  1. <span style="font-size:18px;"> sqlite3 * conn = NULL;
  2. char * err_msg = NULL;
  3. char sql[200] = "" ;
  4. // 打开数据库,创建连接
  5. if(sqlite3_open("student.db",&conn) != sqlITE_OK)
  6. {
  7. cout<<"无法打开!";
  8. }
  9.  
  10. //创建表 student 创建表以后 不能重复创建
  11. sprintf(sql,"CREATE TABLE student_for_table \
  12. (sno int,sname varchar(20),age int)");
  13. if (sqlite3_exec(conn,sql,NULL,&err_msg) != sqlITE_OK)
  14. {
  15. cout<<"操作失败,错误代码: %s"<< err_msg;
  16. exit(-1);
  17. } </span>



然后我们执行插入操作。(这里只是一个插入数据的演示)

  1. <span style="font-size:18px;">int main(int argc,_TCHAR* argv[])
  2. {
  3. sqlite3 * conn = NULL;
  4. char * err_msg = NULL;
  5. char sql[200] = "" ;
  6. // 打开数据库,&err_msg) != sqlITE_OK)
  7. {
  8. cout<<"操作失败,错误代码: %s"<< err_msg;
  9. exit(-1);
  10. }
  11.  
  12. //表创建完成,插入数据
  13. for (int i = 0; i < 10; i++)
  14. {
  15. // 执行sql
  16. sprintf(sql,"INSERT INTO student_for_table \
  17. (sno,age) VALUES \
  18. (%d,'%s',%d)",i,"students",i);
  19. if (sqlite3_exec(conn,&err_msg) != sqlITE_OK)
  20. {
  21. cout<<"操作失败,错误代码: %s"<< err_msg;
  22. exit(-1);
  23. }
  24. }</span>
  1. <span style="font-size:18px;">}</span>


后执行,我们进入程序目录,然后可以看出来数据库的大小已经不是空了。





插入数据后,当然我们需要读出来然后显示,所以添加如下代码

//把数据读出来,进行显示sqlite3_exec()执行,调用回调函数显示的操作写在回填函数

  1. <span style="font-size:18px;"> sprintf(sql,"SELECT * FROM student_for_table");
  2. sqlite3_exec(conn,&sqlite3_exec_callback,&err_msg);
  3. </span>



要读出数据,我们要定义一个回调函数

  1. <span style="font-size:18px;">//为了数据读出来,使用回调函数
  2. int sqlite3_exec_callback(void *data,int nColumn,char **colValues,char **colNames)
  3. {
  4. for (int i = 0; i < 3; i++)
  5. {
  6. printf("%s\t",colValues[i]);
  7. }
  8. printf("\n");
  9.  
  10. return 0;
  11. }</span>



以上最后的程序如下:

  1. <span style="font-size:18px;">// Testsqlite.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. #include"sqlite3.h"
  7. using namespace std;
  8. #pragma comment(lib,"sqlite3.lib")
  9.  
  10. //为了数据读出来,使用回调函数
  11. int sqlite3_exec_callback(void *data,colValues[i]);
  12. }
  13. printf("\n");
  14.  
  15. return 0;
  16. }
  17.  
  18. int main(int argc,&err_msg) != sqlITE_OK)
  19. {
  20. cout<<"操作失败,错误代码: %s"<< err_msg;
  21. exit(-1);
  22. }
  23. }
  24.  
  25. //把数据读出来,进行显示sqlite3_exec()执行,调用回调函数显示的操作写在回填函数
  26. sprintf(sql,&err_msg);
  27.  
  28.  
  29. //操作完数据库后,一定要 关闭连接。
  30. if (sqlite3_close(conn) != sqlITE_OK)
  31. {
  32. cout<<"无法关闭错误代码: %s\n"<< sqlite3_errmsg(conn)<<endl;;
  33. exit(-1);
  34. }
  35.  
  36. cout<<"操作成功"<<endl;
  37. return 0;
  38. }
  39. </span>

运行结果如下:

上面演示的是C++如何与sqlite连接,同时我们也可以将mfc与sqlite联合起来使用,做出带界面的操作,其核心的思想是一致的,只是把对sqlite数据库的操作放在不同的响应函数中(mfc以消息传递),比如我们把“打开数据库”操作放在一个button的响应函数中。这样我们就可以做出带有界面的数据库操作程序。这仅是一些简单的操作,要想做出一些有价值的东西,还需要更深的努力。

猜你在找的Sqlite相关文章