sqlite3的编译、安装和使用

参考:https://www.cnblogs.com/luego/p/11542420.html

https://blog.csdn.net/zouleideboke/article/details/73649886

一、sqlite3源码下载

sqlite3官网下载:https://www.sqlite.org/download.html

这里选择下载sqlite-amalgamation-3330000.zip(版本3.33.0)

二、sqlite3在Linux下的编译

将sqlite-amalgamation-3330000.zip解压,包含:shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h几个文件

1、编译命令行管理工具

gcc shell.c sqlite3.c -lpthread -ldl -o sqlite3  //将生成sqlit3命令行管理工具

编译完成后生成可执行文件sqlite3,通过此工具可以使用命令行创建、打开、查看数据库文件,具体使用方法参考:

https://blog.csdn.net/zqixiao_09/article/details/50528181

https://blog.csdn.net/hhhhhyyyyy8/article/details/100587597

为方便使用,可在/bin目录下创建sqlite3的软链接,后续可以直接在命令行中输入sqlite3启用

ln -s /home/runoob/work/my_project/sqlite3/sqlite-amalgamation-3330000/sqlite3 sqlite3

2、编译libsqlite3.so共享库

gcc -g -shared -fPIC -c sqlite3.c
gcc -g -shared -fPIC -o libsqlite3.so sqlite3.o

三、libsqlite3.so库的使用

应用程序可通过链接生成的libsqlite3.so来实现对数据库的管理(创建数据库、创建表格、插入数据、查询、数据、删除数据等)。下面以test.c为例(参考https://blog.csdn.net/zouleideboke/article/details/73649886

1、test.c

/*********************************************************************************
 *      Copyright:  (C) 2017 zoulei
 *                  All rights reserved.
 *
 *       Filename:  insert.c
 *    Description:  This file i
 *
 *        Version:  1.0.0(2017年06月22日)
 *         Author:  zoulei <zoulei121@gmail.com>
 *      ChangeLog:  1, Release initial version on "2017年06月22日 19时31分12秒"
 *
 ********************************************************************************/
 
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main(int argc, char**argv)
{
     sqlite3 *db=NULL;
     int len;
     int i=0;
     int nrow=0;
     int ncolumn = 0;
     char *zErrMsg =NULL;
     char **azResult=NULL; //二维数组存放结果
     /* 打开数据库 */
     len = sqlite3_open("user",&db);
     if( len )
     {
        /*  fprintf函数格式化输出错误信息到指定的stderr文件流中  */
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));//sqlite3_errmsg(db)用以获得数据库打开错误码的英文描述。
        sqlite3_close(db);
        exit(1);
     }
     else printf("You have opened a sqlite3 database named user successfully!\n");
 
     /* 创建表 */
     char *sql = " CREATE TABLE SensorData(\
         ID INTEDER PRIMARY KEY,\
         SensorID INTEGER,\
         siteNum INTEGER,\
         Time VARCHAR(12),\
         SensorParameter REAL\
         );" ;
 
      sqlite3_exec(db,sql,NULL,NULL,&zErrMsg);
#ifdef _DEBUG_
      printf("%s\n",zErrMsg);
      sqlite3_free(zErrMsg);
#endif
      /*插入数据  */
      char*sql1 ="INSERT INTO 'SensorData'VALUES(NULL,1,2,201430506201,13.5);";
      sqlite3_exec(db,sql1,NULL,NULL,&zErrMsg);
      char*sql2 ="INSERT INTO 'SensorData'VALUES(NULL,3,4,201530506302,14.5);";
      sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);
      char*sql3 ="INSERT INTO 'SensorData'VALUES(NULL,5,6,201630506413,18.6);";
      sqlite3_exec(db,sql3,NULL,NULL,&zErrMsg);
 
      /* 查询数据 */
      sql="select *from SensorData";
      sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
      printf("nrow=%d ncolumn=%d\n",nrow,ncolumn);
      printf("the result is:\n");
      for(i=0;i<(nrow+1)*ncolumn;i++)
        {
          printf("azResult[%d]=%s\n",i,azResult[i]);
        }
 
     /* 删除某个特定的数据 */
      sql="delete from SensorData where SensorID = 1 ;";
      sqlite3_exec( db , sql , NULL , NULL , &zErrMsg );
#ifdef _DEBUG_
      printf("zErrMsg = %s \n", zErrMsg);
      sqlite3_free(zErrMsg);
#endif
 
      /* 查询删除后的数据 */
      sql = "SELECT * FROM SensorData ";
      sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
      printf( "row:%d column=%d\n " , nrow , ncolumn );
      printf( "After deleting , the result is : \n" );
      for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
      {
            printf( "azResult[%d] = %s\n", i , azResult[i] );
      }
      sqlite3_free_table(azResult);
#ifdef _DEBUG_
   printf("zErrMsg = %s \n", zErrMsg);
   sqlite3_free(zErrMsg);
#endif
 
      sqlite3_close(db);
      return 0;
 
}

2、编译应用程序

gcc -g test.c -L. -lsqlite3 -lpthread -ldl -o test

执行./test程序,运行结果如下:

runoob@ubuntu:~/work/my_project/sqlite3/sqlite-amalgamation-3330000$ ./test
You have opened a sqlite3 database named user successfully!
table SensorData already exists
nrow=3 ncolumn=5
the result is:
azResult[0]=ID
azResult[1]=SensorID
azResult[2]=siteNum
azResult[3]=Time
azResult[4]=SensorParameter
azResult[5]=(null)
azResult[6]=1
azResult[7]=2
azResult[8]=201430506201
azResult[9]=13.5
azResult[10]=(null)
azResult[11]=3
azResult[12]=4
azResult[13]=201530506302
azResult[14]=14.5
azResult[15]=(null)
azResult[16]=5
azResult[17]=6
azResult[18]=201630506413
azResult[19]=18.6
zErrMsg = (null) 
row:2 column=5
 After deleting , the result is : 
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = siteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = (null)
azResult[6] = 3
azResult[7] = 4
azResult[8] = 201530506302
azResult[9] = 14.5
azResult[10] = (null)
azResult[11] = 5
azResult[12] = 6
azResult[13] = 201630506413
azResult[14] = 18.6
zErrMsg = (null) 

 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLite是一个轻量级的嵌入式数据库引擎,可以在各种操作系统上运行。SQLite的开发语言是C,所以在编译SQLite时需要使用C编译器。对于Windows操作系统来说,Visual C++(简称VC)是一个常用的C/C++编译器。 下面是SQLite3编译VC的步骤: 1. 下载SQLite源代码:可以从SQLite官方网站或者其他可信的源代码托管平台上下载最新版本的SQLite源代码。 2. 安装Visual Studio:从Microsoft官方网站上下载并安装Visual Studio,根据个人需要选择相应的版本,比如Visual Studio Community。 3. 打开Visual Studio:打开Visual Studio开发环境,点击“文件”->“新建”->“项目”来创建一个新的项目。 4. 创建一个C/C++项目:在“创建新项目”对话框中,选择“Visual C++”下的“Win32控制台应用程序”,并填写项目名称等相关信息,点击“确定”。 5. 添加SQLite源代码:在“解决方案资源管理器”中,右键点击“源文件”或“头文件”文件夹,选择“添加”->“现有项”,然后找到下载的SQLite源代码文件,选择并点击“添加”。 6. 配置项目属性:右键点击项目名称,选择“属性”来配置项目的属性。在属性窗口中,选择“配置属性”->“C/C++”->“常规”,将“附加包含目录”设置为SQLite源代码所在的目录。 7. 编译项目:点击“生成”->“生成解决方案”来编译项目。如果编译成功,会在输出窗口中显示编译的状态信息。 8. 运行项目:编译成功后,点击“调试”->“开始执行”,运行SQLite应用程序。 这样就可以在Visual C++环境下编译SQLite3库文件了。注意,在编译时需要根据具体的需求进行一些配置,比如选择编译的版本(32位或64位)、编译使用的配置等。在编译完毕后,可以使用生成的SQLite库文件进行开发和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值