/**************************************************************************
* 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[]; // 保存数据库中的id
char name[]; // 姓名
char password[]; // 密码
char startTime[]; // 用户创建的开始时间
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(, sizeof(User));
for (i = ; i < col_count; i++) {
if(strcmp(col_name[i], "id") == ){
strcpy(userCurrent->id, col_values[i]);
}
if(strcmp(col_name[i], "name") == ){
strcpy(userCurrent->name, col_values[i]);
}
if(strcmp(col_name[i], "password") == ){
strcpy(userCurrent->password, col_values[i]);
}
if(strcmp(col_name[i], "startTime") == ){
strcpy(userCurrent->startTime, col_values[i]);
}
}
// 创建链表头
if(userLinkedHead == NULL){
userLinkedHead = userCurrent;
return ;
}
// 采用头插的方式插入链表
userCurrent->next = userLinkedHead->next;
userLinkedHead->next = userCurrent; return ;
} // 将链表中的数据打印出来
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, , NULL); sqlite3_close(db);
db = ; 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 = ; return ;
} 三、cat main.c
#include "user.h" int main(int argc, char** argv){
userDemo();
return ;
} 四、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(),
password varchar(),
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;

C语言SQLite3基本操作Demo的更多相关文章

  1. C语言指针基本操作

    C语言指针基本操作 指针  指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...

  2. 【软件多国语言】一个demo

    之前上学的时候做过一个东西,需要中英文软件界面,并且需要随时可以切换,当时是师妹来做的,用的最直接也是最笨的办法, what? if(中文) { button1.Text = "花姑娘&qu ...

  3. ios在SQLite3基本操作

    iOS关于sqlite3操作 iPhone中支持通过sqlite3来訪问iPhone本地的数据库. 详细用法例如以下 1:加入开发包libsqlite3.0.dylib 首先是设置项目文件.在项目中加 ...

  4. sqlite3基本操作

    在移动设备上进行高性能高效率的大量数据存储,我们一般用得时sqlite这款轻巧型的数据库,这里介绍其增删改查基本功能 在ios开发中我们需要先导入"libsqlite3.dylib" ...

  5. Linux 中 sqlite3 基本操作

    https://www.runoob.com/sqlite/sqlite-commands.html 一 .linux 下安装数据库和创建一个数据库 1. Linux 下安装sqlite3 需要两个命 ...

  6. c语言二叉树基本操作

    编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...

  7. 转贴:C语言链表基本操作

    http://www.oschina.net/code/snippet_252667_27314#comments 这个代码有很多错误,估计是从老谭书上抄来但是很多还抄错了:对照老谭的书好好研究下.切 ...

  8. C语言文件基本操作

    1.用文本方式储存‘1’,‘0’,‘2’存入文件,然后用二进制方式从文件开头读出一个short型数据,并验证结果是否正确 #include<stdio.h> #include<str ...

  9. C语言文件读写Demo

    CIODemo.c #include <stdio.h> #include <time.h> #define INPUT_BUFFER_SIZE 100 * 1024 int ...

随机推荐

  1. jenkins定时构建示例

    项目:使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是git插件,还可以安装svn插件 我们将git路径存在这里还需要权限认证,否则会出现error 我们添加一 ...

  2. gulp4小demo

    本来想着用gulp搭建一个自动化构建工具,结果一顿报错,后来发现我重新安装的gulp版本是4.0.0,与3版本还是不太一样的,遂记之. Gulp 3版本Demo: const gulp = requi ...

  3. vs2010_相关目录

    1. C:\Program Files\Microsoft SDKs\Windows\v7.0A 2.创建了 C:\Program Files\Microsoft Visual Studio 9.0 ...

  4. [原][库][c++]tinyxml使用小结

    参考:http://blog.csdn.net/L_Andy/article/details/40615517 tinyxml官网: http://www.grinninglizard.com/tin ...

  5. 团队项目用户验收评审——《WAP团队》

    团队项目用户验收评审——<WAP团队> 1.验收准备的相关文档链接:https://github.com/LVowe999/xiangmubaogao.git                ...

  6. Codeforces 834C - The Meaningless Game

    834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...

  7. 记录Vmware Workstation及Centos6.8 的安装

    网上找到的一个非常详细的安装详解.个人觉得非常好.于是加保存一下.地址:http://www.mamicode.com/info-detail-1462939.html

  8. IIS中发布后出现Could not load file or assembly'System.Data.SQLite.dll' or one of its depedencies

    [问题]在我本机的开发环境c#连接sqlite3没有问题,可是release版本移植到其他的机器就提示Could not load file or assembly'System.Data.SQLit ...

  9. centos7: vsftpd安装及启动: ftp配置(以虚拟用户为例)

    centos7: vsftpd安装及启动: ftp配置 1安装: yum -y install vsftpd /bin/systemctl start vsftpd.service #启动 /bin/ ...

  10. English trip -- VC(情景课)1 B Countries

    Vocabulary focus 核心词汇 Vo ca bu la ry   fo cus [və(ʊ)'kæbjʊlərɪ]      ['fəʊkəs] Listen and repeat  听并 ...