linux下c语言绘图库_使用c语言实现linux数据库的操作
发布日期:2021-06-24 17:36:49 浏览次数:2 分类:技术文章

本文共 3466 字,大约阅读时间需要 11 分钟。

前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作。

使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据库源码的文件打包成库文件.so放到ubuntu函数库(/bin)目录下,并且把linux数据库sqlite中的.sh文件拷贝到/usr/include目录中。

第一步:把.c文件生成.o文件

gcc -fPIC -o sqlite3.o -c sqlite3.c -lpthread -ldl

第二步:把.o文件生成.so文件

gcc -shared -fPIC -o libsqlite3.so sqlite3.o -lpthread -ldl

第三步:把生成的.so文件拷贝都ubuntu的/lib目录下,方便以后使用

sudo cp libsqlite3.so /lib/

第四步:把.sh文件拷贝到/usr/include/目录下,如果前面已经做过这一步了,可以不做

sudo cp *.h /usr/include/

到这里我们使用c语言实现linux数据库操作的环境就搭建好。

下面我们来看看用c语言实现linux数据库操作要用到的几个主要的接口,当然我们还可以上sqlite的官网去看更多的API接口。

1、打开数据库

intsqlite3_open(const char *filename, /*数据库名 ,如果数据库不在同一目录下请写上绝对路径*/sqlite3**ppDb /*数据库句柄*/);

返回值:成功:SQLITE_OK

失败:SQLITE_ERROR

2、执行操作指令(可实现回调查询,前提是第三个参数不能为空)

intsqlite3_exec(

sqlite3*, /*数据库句柄*/

const char *sql, /*执行的语句(执行的命令行)*/

int (*callback)(void*,int,char**,char**), /*回调函数(可设为NULL)*/

void *, /*1st argument to callback(可设为NULL)*/

char **errmsg /*错误信息(可设为NULL)*/);

返回值:成功:SQLITE_OK

失败:SQLITE_ERROR

3、回调函数查询(自定义实现)

int callback(void*,int,char**,char**)

参数:void* --由sqlite3_exec函数的第四个参数

int---查询的数据有多少列char** ----每一列的值char**----每一列的名字

4、非回调查询

intsqlite3_get_table(

sqlite3*db, /*数据库句柄*/

const char *zSql, /*查询指令*/

char ***pazResult, /*存储查询到的结果*/

int *pnRow, /*存储查询到的行数*/

int *pnColumn, /*存储查询到的列数*/

char **pzErrmsg /*存储错误信息*/);

5、释放所占用空间

void sqlite3_free_table(char **result);//result为调用了sqlite3_get_table后pazResult中的数据

6、关闭表格

int sqlite3_close(sqlite3*);

下面是代码示例

1 1 #include

2 2 #include

3 3 #include

4 4

5 5 /*定义此宏时使用回调函数查询,否则使用非回调函数查询*/

6 6 #define CALLBACK

7 7

8 8 //如果查询到多行数据, 那么这个函数就会调用多次(每一行调用一次)

9 9 int callback(void *arg, int col, char **value, char **name)10 10{11 11 int i=0;12 12 for(i=0;i

20 20

21 21 int main(void)22 22{23 23 //1.打开数据库

24 24 sqlite3 *ppdb =NULL;25 25 int ret = sqlite3_open("./mysql.db", &ppdb); //打开一个当前目录下名为mysql.db的数据库

26 26 if(ret !=SQLITE_OK)27 27{28 28 perror("open fail");29 29 return -1;30 30}31 31

32 32 //执行sql语句,创建一个表格

33 33 char *sql="create table IF not EXISTS myname(id integer primary key, name text)";34 34 ret =sqlite3_exec(ppdb, sql, NULL, NULL, NULL);35 35 if(ret !=SQLITE_OK)36 36{37 37 perror("create fail");38 38sqlite3_close(ppdb);39 39 return -1;40 40}41 41

42 42 //插入数据

43 43 char name[32] ={0};44 44 int id = 0;45 45 while(1)46 46{47 47 printf("please input name and id:"); scanf("%s %d", name, &id);48 48 if(id == 0)break; //输入q退出插入数据

49 49 char *insert = "insert into myname values(%d, '%s')";50 50 char insql[strlen(insert) + strlen(name) + 5];51 51sprintf(insql, insert, id, name);52 52

53 53 ret =sqlite3_exec(ppdb, insql, NULL, NULL, NULL);54 54 if(ret !=SQLITE_OK)55 55{56 56 perror("exec fail");57 57sqlite3_close(ppdb);58 58 return -1;59 59}60 60}61 61

62 62

63 63#ifdef CALLBACK64 64 //回调查询

65 65 char *selectsql = "select * from myname";66 66 ret =sqlite3_exec(ppdb, selectsql, callback, NULL, NULL);67 67 if(ret !=SQLITE_OK)68 68{69 69 perror("create fail");70 70sqlite3_close(ppdb);71 71 return -1;72 72}73 73

74 74 //非回调查询

75 75 #else

76 76 char *sql2 = "select * from myname";77 77 char **result =NULL;78 78 int row = 0;79 79 int col = 0;80 80 char *error =NULL;81 81 ret = sqlite3_get_table(ppdb,sql2,&result,&row,&col,&error);82 82 if(ret !=SQLITE_OK)83 83{84 84 perror("get table fail");85 85 return -1;86 86}87 87 int i=0, j=0;88 88 for(i=0;i

97 97 #endif

98 98

99 99

100 100sqlite3_close(ppdb);101 101 return 0;102 102 }

View Code

编译代码:

gcc -o mysqlite3 mysqlite3.c -lsqlite3

先创建一个叫mysql.db的库

sqlite3 mysql.db

运行结果如下:

转载地址:https://blog.csdn.net/weixin_34182361/article/details/112833909 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:超微服务器电源短接启动图解_服务器电源怎么短接
下一篇:调音台docker教程_Docker Hello World | 菜鸟教程

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 14时10分09秒