当前位置:首页 » 《关注互联网》 » 正文

Linux中安装配置SQLite3,并实现C语言与SQLite3的交互。

15 人参与  2024年11月14日 19:21  分类 : 《关注互联网》  评论

点击全文阅读


#1024程序员节 | 征文#

在这里插入图片描述

前言

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。本次实验介绍在Linux上实现C语言和SQLite3的交互,利用C语言编写相关语句,连接数据库、操作数据库。

准备工具

1.VMware
2.Linux虚拟机
3.Xshell
4:SQLite源码压缩包(选用,下面会介绍在线安装SQLite到虚拟机)

相关工具的获取
虚拟机1.zip
链接: https://pan.baidu.com/s/1vy3_YpRCVCYQdmiNO0RxGw?pwd=wgu1 提取码: wgu1
Xshell
链接: https://pan.baidu.com/s/1VSt_CQAgE2etUzbj9QAUCQ?pwd=mp5d 提取码: mp5d

配置Linux上的C语言编译环境

可以先检查下Linux上是否配置好GCC相关文件,GCC是C语言的编译器,便于我们后面需要实现C语言和SQLite3的交互。

GCC是Linux系统下最常用的C语言编译器之一。它能够将C语言源代码编译成可执行文件或目标文件,使得程序员能够在Linux环境下编写、测试和运行C语言程序。

1.检查环境

在终端检查是否已经安装gcc

gcc --version

如果没有输出任何信息的话,就说明没有安装配置gcc环境
在这里插入图片描述

2.安装gcc、配置gcc环境变量

1)可以使用yum安装,先更新yum源

在这里插入图片描述

2) 安装build-essential 包
这个build-essential包包括了GCC编译器、G++以及其他一些必要的工具。安装完这些工具后,你的Linux系统基本上已经配置好了C/C++的开发环境。

sudo yum groupinstall "Development Tools"或在ubuntu上输入以下命令sudo apt-get updatesudo apt-get install build-essential

3)检查版本,查看是否完成安装

gcc -v

在这里插入图片描述

4)配置环境变量,使C语言文件可以在多种目录下灵活的编译运行
这里gcc和g++的环境变量安装时通常会自动配置到usr/bin 目录下,可以用以下命令输出gcc和g++的存放位置

which gccwhich g++

在这里插入图片描述

如果你发现gcc的目录没有在usr/bin目录下,需要手动配置环境变量。你需要用上面两条命令查找到你的gcc存放路径,然后在终端输入

export PATH="gcc存放路径(bin):$PATH"或者是export PATH=$PATH:gcc存放目录

重新加载配置文件使其生效

source  ~/.bashrc

然后再检查gcc的路径,如果配置完成输出的是usr/bin目录

/usr/bin是 Linux 文件系统中的一个标准目录,通常用于存放用户级别的可执行程序。以下是关于 /usr/bin 目录的一些详细信息:

系统范围的可执行文件:
• /usr/bin 目录包含大多数标准的、多用途的用户命令和二进制文件。这些命令通常是系统管理员安装和维护的,供所有用户使用。与 /bin 的区别:
• /bin 目录通常包含基本的、最小化的系统命令,如 ls, cp, mv 等。这些命令在系统启动和基本操作中是必不可少的。
• /usr/bin 则包含了更多的用户级命令和应用程序,这些命令可能不是系统运行所绝对必须的,但在日常操作中非常有用。例如,开发工具、文本编辑器和其他实用程序通常会安装在 /usr/bin 下。权限和访问:
• 通常,只有具有超级用户权限(root)的用户才能向 /usr/bin 目录添加或删除文件。这是为了防止普通用户误操作或恶意操作影响系统的正常运行。环境变量:
• /usr/bin 通常包含在系统的默认 PATH 环境变量中,这意味着你可以在终端中直接输入命令来运行这些程序,而不需要指定完整路径。
将 SQLite 的可执行文件(如 sqlite3)拷贝到 /usr/bin 目录下,意味着你可以直接在终端中使用 sqlite3 命令来运行 SQLite 数据库管理工具,而无需每次都提供完整路径。

5)测试能否编译运行.c文件

新建一个.c文件,写入可执行的c语言代码
在这里插入图片描述

保存退出。

6)生成可执行文件,运行可执行文件(目标文件)

gcc -o 目标文件 c语言文件运行可执行文件./目标文件

在这里插入图片描述

7)配置sqlite3.h头文件和libsqlite3.so*库文件的编译路径

由于我们后面会使用C语言和sqlite进行交互,因此在编写C语言文件时会调用到libsqlite3.so*和sqlite3.h。这里提前告诉编译器存放位置。

3.头文件和库文件

将头文件和库文件的存放路径告诉给编译器,可以省去C语言程序在调用头文件和库文件的很多麻烦。

可执行文件(如sqlite3)通常位于/bin目录。
库文件(如动态链接库libsqlite3.so)通常位于/lib目录。
头文件(如sqlite3.h)通常位于/include目录。

1)查找sqlite3.h 的存放位置

sudo find / -name "sqlite3.h"

在这里插入图片描述

2)指定编译器在搜索头文件时应该查找的目录

export C_INCLUDE_PATH=/home/gec/sqlite/include:$C_INCLUDE_PATH注意将头文件的路径替换为你查找到的路径设置其永久有效source ~/.bashrc

在这里插入图片描述

3)查找libsqlite3.so*库文件

find / -name "libsqlite3.so*"

在这里插入图片描述

指定编译器在搜索库文件时应该查找的目录

export LIBRARY_PATH=/home/gec/sqlite/lib:$LIBRARY_PATH注意替换成你自己的库文件路径加载文件使其生效source ~/.bashrc

在这里插入图片描述

到此C语言的运行环境已经配置完成,接下来安装配置SQLite3。

安装配置SQLite3

方式1.可以使用yum安装(联网推荐)

更新软件包(可选)sudo apt update  (Ubuntu可用)或者sudo yum update
安装sqlite3sudo apt install sqlite3(Ubuntu)或者sudo yum install sqlite3
验证安装是否完成sqlite3

在这里插入图片描述

方式2.可以选择源码安装、编译

在Linux联网的情况下,可以选择去官网自行下载最新版本
SQLite官网

本次实验介绍利用Xshell连接Linux,传输本地sqlite源码文件给Linux(sqlite3官网提供了联网下载,可以直接在虚拟机上访问官网获取软件包;),

如果你的虚拟机上没有安装ssh服务,无法实现Xshell远程连接,请参考这篇文章;或者也可以使用FTP协议,进行本地机向物理机传输文件。

本地机下载好sqlite3源码压缩包,虚拟机链接Xshell,上传文件到指定目录

在这里插入图片描述在这里插入图片描述

解压文件

在这里插入图片描述在这里插入图片描述

编译安装
进入到sqlite-autoconf-3380500

cd sqlite-autoconf-3380500

在这里插入图片描述

指定sqlite3安装目录

./configure --prefix=/home/gec/sqlite/home/gec/sqlite是安装路径,可以自定义

执行完 ./configure --prefix=/home/gec/sqlite 后,接下来运行 make 和 make install 来编译并安装软件。最终,软件会被安装到 /home/gec/sqlite 目录下,包括可执行文件、库文件、头文件等。

在这里插入图片描述

在当前目录下输入make编译sqlite
编译需要一些时间,耐心等待即可。

在这里插入图片描述

安装

make install

在这里插入图片描述

此时你会在/home/gec/sqlite/bin 看到安装好的sqlite 可执行文件

在这里插入图片描述

如果要直接使用可以将该文件拷贝到 /usr/bin目录下(一般情况下安装sqlite3时也会自动配置好环境变量)
在这里插入图片描述

3.对sqlite3的简单操作

创建数据库,创建完成数据库在创建一个数据表

在这里插入图片描述

实现C语言与SQLite3交互

这里上传一个.c文件到Linux的指定目录
.c文件代码

#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sqlite3.h>int callback(void *arg, int column_size, char *column_value[], char *column_name[]){static int count = 0;int i;printf("%s\n", (char *)arg);if(0 == count){for(i = 0; i < column_size; i++){printf("%-8s\t", column_name[i]);}printf("\n");}for(i = 0; i < column_size; i++){printf("%-8s\t", column_value[i]);}printf("\n");printf("size is %d \n",column_size);count++;printf("%d\n",count);return 0;}int main(int argc, const char **argv){sqlite3 *db = NULL;int ret;char sql[1024] = "\0";char *errmsg = NULL;if(argc < 3){fprintf(stderr, "please input:%s id name\n", argv[0]);exit(EXIT_FAILURE);}//step 1: create or open databaseret = sqlite3_open("./student.db", &db);if(SQLITE_OK != ret){fprintf(stderr, "sqlite3_open:%s\n", sqlite3_errmsg(db));exit(EXIT_FAILURE);}//step 2: create tablesprintf(sql, "create table if not exists student (id integer, name text)");ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if(SQLITE_OK != ret){fprintf(stderr, "create table:%s\n", sqlite3_errmsg(db));fprintf(stderr, "create table:%s\n", errmsg);exit(EXIT_FAILURE);}//step3: insert your id and namesprintf(sql, "insert into student (id, name) values ('%s', '%s')", argv[1], argv[2]);ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if(SQLITE_OK != ret){fprintf(stderr, "insert into:%s\n", sqlite3_errmsg(db));fprintf(stderr, "insert into:%s\n", errmsg);exit(EXIT_FAILURE);}//step4: select infosprintf(sql, "select * from student ");ret = sqlite3_exec(db, sql, callback, "callback msg", &errmsg);if(SQLITE_OK != ret){fprintf(stderr, "select:%s\n", sqlite3_errmsg(db));fprintf(stderr, "select:%s\n", errmsg);exit(EXIT_FAILURE);//异常退出}//last step : close databasesqlite3_close(db);return 0;}

在这里插入图片描述

进入.c文件可以按照需要修改数据信息
保存退出,生成可执行文件

gcc -o 目标文件名  .c文件名

在这里插入图片描述
在这里插入图片描述

运行产生的可执行文件后,该目录下会生成一个student.db,此时我们可以输入以下命令,在数据库中查看是否完成了数据表的创建(一定要注意,一条sql语句是要以英文状态下的分号结尾的,一定不要忘记写上英文状态下的分号)

select * from student;

在这里插入图片描述

交叉编译ARM Linux下的sqlite3

本次操作环境在Ubuntu上

由于ARM设备通常具有较低的处理能力和内存,直接在ARM设备上进行开发和编译可能效率低下且不方便。通过交叉编译,开发者可以在性能更强的主机上进行软件开发,然后将编译好的程序部署到目标ARM设备上。比如我在Ubuntu上进行软件开发,可以在Ubuntu上编译好程序再部署到ARM设备上。

1.官网下载所需版本

https://www.sqlite.org/download.html

2.转到相关目录下解压文件

在这里插入图片描述
在这里插入图片描述

3.配置交叉编译工具链和安装目录

安装交叉编译链

sudo apt-get install gcc-arm-linux-gnueabihf

一般都是安装时默认在usr/bin目录下,可以which查看下路径,然后配置配置交叉编译环境

./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/usr/local 

这里,–host=arm-linux-gnueabihf指定目标平台,–prefix指定安装路径(可以根据需要更改),CC指定C编译器。

在这里插入图片描述

可以ls查看是否生成了makefile文件,便于下一步进行make编译
在这里插入图片描述

4.make编译

在这里插入图片描述
在这里插入图片描述

5.Install安装

注意需要使用管理员权限

sudo make install

在这里插入图片描述在这里插入图片描述

查看生成的SQLite库等文件

根据之前对sqlite进行编译的安装路径usr/local,查找相关文件
在这里插入图片描述在这里插入图片描述

在配置SQLite时使用了--prefix=/usr/local选项,那么生成的SQLite库文件、可执行文件和其他相关文件通常会被安装到/usr/local目录下。具体来说:
可执行文件(如sqlite3)通常位于/usr/local/bin目录。
库文件(如动态链接库libsqlite3.so)通常位于/usr/local/lib目录。
头文件(如sqlite3.h)通常位于/usr/local/include目录。

其实做到这一步,我们指导了所有库文件和头文件存放的位置,可以在"配置Linux的C语言编译环境–3“ 中直接将头文件和库文件告诉给编译器

export C_INCLUDE_PATH=/头文件路径/include:$C_INCLUDE_PATHexport C_INCLUDE_PATH=/库文件路径/lib:$C_INCLUDE_PATH

6.将动态库文件放入Linux目标机,并生成软链接

ln -s libsqlite3.so ./libsqlite3.so.0.8.6

若软链接已存在,则新建链接
在这里插入图片描述

检查现有链接

ls -l ./libsqlite3.so.0.8.6

在这里插入图片描述

创建新连接

sudo ln -s libsqlite3.so.0 ./libsqlite3.so.0.8.7

在这里插入图片描述

7.编写一个C语言文件test01.c

#include <stdio.h>  // 引入标准输入输出库#include "sqlite3.h"  // 引入SQLite数据库操作库int main(void) {    sqlite3 *db = NULL;  // 定义一个指向sqlite3结构的指针,用于表示数据库连接    char *err_msg = NULL;  // 定义一个字符指针,用于存储错误信息    // 打开名为data.db的数据库文件,如果不存在则创建它    int rc = sqlite3_open("data.db", &db);    // 如果打开数据库失败    if (rc != SQLITE_OK)    {        // 打印错误信息并关闭数据库连接        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));        sqlite3_close(db);                return 1;  // 返回错误代码1    }    // SQL语句:删除表t_data(如果存在),然后创建新表t_data,并插入数据    const char *sql = "DROP TABLE IF EXISTS t_data;"                       "CREATE TABLE t_data(group,num,data);"                       "INSERT INTO t_data VALUES(0,1, 52642);"                       "INSERT INTO t_data VALUES(0,2, 57127);"                       "INSERT INTO t_data VALUES(0,3, 9000);"                       "INSERT INTO t_data VALUES(0,4, 29000);"                       "INSERT INTO t_data VALUES(0,5, 350000);"                       "INSERT INTO t_data VALUES(0,6, 21000);"                       "INSERT INTO t_data VALUES(0,7, 41400);"                       "INSERT INTO t_data VALUES(0,8, 21600);";    // 执行SQL语句    rc = sqlite3_exec(db, sql, NULL, NULL, &err_msg);    // 如果执行SQL语句失败    if (rc != SQLITE_OK)    {        // 打印错误信息并释放错误信息内存,然后关闭数据库连接        fprintf(stderr, "SQL error: %s\n", err_msg);        sqlite3_free(err_msg);        sqlite3_close(db);        return 1;  // 返回错误代码1    }    // 关闭数据库连接    sqlite3_close(db);    return 0;  // 程序成功结束,返回0}

编译完成在程序目录生成test01

arm-linux-gcc test01.c -o test01 -I/usr/local/sqlite3/include -L/usr/local/sqlite3/lib -lsqlite3

将test01拷贝到arm开发板,加权限,运行即可。


点击全文阅读


本文链接:http://zhangshiyu.com/post/186225.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1