C语言SQLite3基本操作Demo
/************************************************************************** * 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 <stdio.h> #include <stdlib.h> #include <sqlite3.h> #include <string.h> // 使用结构体来保存数据库中的数据 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;