博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言SQLite3基本操作Demo
阅读量:6967 次
发布时间:2019-06-27

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

/************************************************************************** *                     C语言SQLite3基本操作Demo * 声明: *      1. 本文仅仅是为了写一个C语言SQLite3的Demo; *      2. 本文并没有说明如何在终端下进入SQLite3创建数据库,也没有解释 *          sql语句的概念,仅仅给出了代码示例,这些内容需要你自己去 *          资料。 * *                                  2015-7-4 晴 深圳 南山平山村 曾剑锋 *************************************************************************/                       \\\\\\\-*- 目录-*-///                       |  一、cat user.h                       |  二、cat user.c                       |  三、cat main.c                       |  四、cat Makefile                       |  五、cat user.sql                       \\\\\\\\\\\\\///一、cat user.h    #ifndef __USER_H__        #define __USER_H__            #include 
#include
#include
#include
// 使用结构体来保存数据库中的数据 typedef struct USER { char id[4]; // 保存数据库中的id char name[20]; // 姓名 char password[20]; // 密码 char startTime[20]; // 用户创建的开始时间 struct USER* next; // 数据从数据库中提取出来是用链表保存 } User; // 查询user表Demo void userDemo(void); // 查询数据时的回调函数 static int select_callback(void* data, int col_count, char** col_values, char** col_name); // 打印UserLinked链表 void printUserLinked(User* userLinked); // 获取UserLinked链表 User* getUserLinked(char* sql); // 释放链表中的数据 void freeUserLinked(User* userLinked); // 更新数据库 int updateUserDB(char* sql); #endif二、cat user.c #include "user.h" // 存放链表的表头 static User* userLinkedHead = NULL; // 存放当前记录的结构体地址 static User* userCurrent = NULL; void userDemo(void){ // 获取用户链表 User* userLinked = getUserLinked("select * from user;"); // 打印用户链表 printUserLinked(userLinked); // 释放用户链表 freeUserLinked(userLinked); } // 查询数据库时的回调函数 static int select_callback(void* data, int col_count, char** col_values, char** col_name){ int i; userCurrent = calloc(1, sizeof(User)); for (i = 0; i < col_count; i++) { if(strcmp(col_name[i], "id") == 0){ strcpy(userCurrent->id, col_values[i]); } if(strcmp(col_name[i], "name") == 0){ strcpy(userCurrent->name, col_values[i]); } if(strcmp(col_name[i], "password") == 0){ strcpy(userCurrent->password, col_values[i]); } if(strcmp(col_name[i], "startTime") == 0){ strcpy(userCurrent->startTime, col_values[i]); } } // 创建链表头 if(userLinkedHead == NULL){ userLinkedHead = userCurrent; return 0; } // 采用头插的方式插入链表 userCurrent->next = userLinkedHead->next; userLinkedHead->next = userCurrent; return 0; } // 将链表中的数据打印出来 void printUserLinked(User* userLinked){ User* userCurrent = userLinked; while(userCurrent){ printf("id = %s\n", userCurrent->id); printf("name = %s\n", userCurrent->name); printf("password = %s\n", userCurrent->password); printf("startTime = %s\n", userCurrent->startTime); userCurrent = userCurrent->next; } } // 当程序退出的时候,要释放堆中的内存空间 void freeUserLinked(User* userLinked){ User* freeCurrent = userLinked; User* freePre = userLinked; while(freeCurrent){ freeCurrent = freePre->next; free(freePre); freePre = freeCurrent; } userLinkedHead = NULL; } // 通过传入查询sql字符串来获取查询的链表 User* getUserLinked(char* sql){ sqlite3 *db; sqlite3_open("./user.db", &db); sqlite3_exec(db, sql, select_callback, 0, NULL); sqlite3_close(db); db = 0; return userLinkedHead; } // 通过sql来更新数据库 int updateUserDB(char* sql){ sqlite3 *db; sqlite3_open("./user.db", &db); sqlite3_exec(db, sql, NULL, NULL, NULL); sqlite3_close(db); db = 0; return 0; }三、cat main.c #include "user.h" int main(int argc, char** argv){ userDemo(); return 0; }四、cat Makefile user: user.o main.o gcc user.o main.o -lsqlite3 -o user user.o: user.h gcc -c user.c main.o: user.h gcc -c main.c clean: rm -rf *.o user五、cat user.sql #创建表,id为自动增长 create table user ( id integer PRIMARY KEY AUTOINCREMENT, name varchar(20), password varchar(20), startTime timestamp ); #插入初始值 insert into user (name, password, startTime) values ('zjf', 'zjf', current_timestamp); insert into user (name, password, startTime) values ('lt', 'lt', current_timestamp); insert into user (name, password, startTime) values ('cyq', 'cyq', current_timestamp); #查询 select * from user; select * from user where name='zjf'; #日期的使用 select date('now'); select time('now'); select datetime('now'); select jolianday('now')-jolianday('1981-12-23'); select strftime('%Y.%m.%d', 'now'); select strftime('%Y.%m.%d', 'now', 'localtime'); #带日期的查询 select id, name, password, date(startTime) from user; select id, name, password, time(startTime) from user; select id, name, password, datetime(startTime) from user; #删除表 drop table user;

 

转载地址:http://znisl.baihongyu.com/

你可能感兴趣的文章
Android中的设计模式之单例模式
查看>>
webpack核心概念
查看>>
Vue 兼容 ie9 的全面解决方案
查看>>
移动端总结
查看>>
认识Arduino,开始嵌入式之旅
查看>>
深入了解Threadlocal
查看>>
HTTP的请求与响应
查看>>
rsync部署使用
查看>>
算法-java排序实现总结
查看>>
VS Code、ATOM这些开源文本编辑器的代码实现中有哪些奇技淫巧?
查看>>
EditorConfig
查看>>
使用Canvas和JavaScript做一个画板
查看>>
用trait实现简单的依赖注入
查看>>
webpack-从0开始写一个webapck v3 loader
查看>>
vue-cli 引入第三方插件终极法!!
查看>>
springboot项目 docker部署实践
查看>>
js 获取窗口、屏幕、页面元素宽高+位置(兼容ie)
查看>>
汤森路透 Thomson Reuters--使用多模型数据库ArangoDB 打造快速安全的简单视图分析...
查看>>
[Webpack并不难]使用教程(三)--- plugins
查看>>
TOP100summit:【分享实录】链家网大数据平台体系构建历程
查看>>