文章目录

  • SQLite示例教程
    • 使用SQLite创建数据库
    • 使用SQLite3创建一个数据表
    • 在上述数据表中插入数据
    • 数据的获取
    • UPDATE操作
    • delate操作

SQLite示例教程

使用SQLite创建数据库

*sqlite3_open(const char *filename, sqlite3 *ppDb)

如果 filename 参数是 NULL 或 ‘:memory:’,那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

简单的来说就是会打开一个数据库文件,文件不存在就会创建一个对应名字的数据库文件

*sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char *errmsg)

在这里,第一个参数 sqlite3 是打开的数据库对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止

sqlite3_close(sqlite3*)

如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;//sqlite3_open 打开指定的数据库文件,文件不存在就创建一个新的rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}sqlite3_close(db);return  0;
}
$ gcc creat_db.c -l sqlite3
$ ./a.out
Opened database successfully
$ ls
a.out  creat_db.c  test.db

使用SQLite3创建一个数据表

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int  rc;char *sql;/* Open database *///< 打开数据库文件rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stdout, "Opened database successfully\n");}/* Create SQL statement *///< 建表语句定义/* 创建主键 */ //"ID INT PRIMARY KEY     NOT NULL," sql = "CREATE TABLE COMPANY("  \"ID INT PRIMARY KEY     NOT NULL," \"NAME           TEXT    NOT NULL," \"AGE            INT     NOT NULL," \"ADDRESS        CHAR(50)," \"SALARY         REAL );";/* Execute SQL statement *///< 返回程序生成的执行的任何返回rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Table created successfully\n");}sqlite3_close(db);return 0;
}
$ gcc creat_db_datebase.c -l sqlite3
$ ./a.out
Opened database successfully
Table created successfully

数据库内筒如下:

在上述数据表中插入数据

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;char *sql;/********************第一步,打开数据库文件,获取数据库文件操作句柄*************************/rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/********************第二步、定义数据操作语句***********************/sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "     \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";/********************第三步、执行建表语句建立数据表**********************/rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Records created successfully\n");}sqlite3_close(db);return 0;
}
$ ./a.out
Opened database successfully
Records created successfully

数据的获取

  • 获取数据中需要用到回调函数的使用
typedef int (*sqlite3_callback)(
void*,    /* sqlite3_exec() 中第四个参数*/
int,      /* 行中的列数 */
char**,   /* 行中的字符串 */
char**    /* 列名的字符串数组*/
);
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>static int callback(void *data, int argc, char **argv, char **azColName){int i;fprintf(stderr, "%s: ", (const char*)data);for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;char *sql;const char* data = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create SQL statement */sql = "SELECT * from COMPANY";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0;
}
$ gcc creat_db_select.c -l sqlite3
$ ./a.out
Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0Callback function called: ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0Operation done successfully

UPDATE操作

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){int i;fprintf(stderr, "%s: ", (const char*)data);for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;char *sql;const char* data = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \"SELECT * from COMPANY";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0;
}

执行结果

$ gcc creat_db_update.c -l sqlite3
$ ./a.out
Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 25000.0   #原来是 2000Callback function called: ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0Operation done successfully

delate操作

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){int i;fprintf(stderr, "%s: ", (const char*)data);for(i=0; i<argc; i++){printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;
}int main(int argc, char* argv[])
{sqlite3 *db;char *zErrMsg = 0;int rc;char *sql;const char* data = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "DELETE from COMPANY where ID=2; " \"SELECT * from COMPANY";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0;
}

执行结果

$ ./a.out
Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 25000.0Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0Operation done successfully

SQLite-C语言实战相关推荐

  1. R语言实战:机器学习与数据分析源代码5

    本文辑录了<R语言实战--机器学习与数据分析>(电子工业出版社2016年出版)一书第6章至第7章前半部分(至136页)之代码.本书引言请见如下链接: http://blog.csdn.ne ...

  2. R语言mad(c(1 2 3 4)),R语言--数据管理-R语言实战笔记-第四五章

    第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的数据样本,对的,"合适",做到合适可不是一个简单的事情 ...

  3. R语言实战笔记--第四五章 数据管理

    R语言实战笔记–第四&五章 数据管理 标签(空格分隔): R语言 第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的 ...

  4. 买了一本老镇的swift语言实战晋级

    为什么80%的码农都做不了架构师?>>>    买的老镇的<<swift语言实战晋级>>书刚到,发现没有51CTO的100金币学习卡. 转载于:https:/ ...

  5. oracle数据库sql培训,Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐...

    风哥oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 套餐介绍: 风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 内容: SQL语言基础入 ...

  6. Go语言实战读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> Go语言实战读书笔记 第二章 通道(channel).映射(map)和切片(slice)是引用类型.引用类型的对象需要使用ma ...

  7. R语言实战(七)图形进阶

    本文对应<R语言实战>第11章:中级绘图:第16章:高级图形进阶 基础图形一章,侧重展示单类别型或连续型变量的分布情况:中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关 ...

  8. 福利来袭,送你105例C语言实战

    前几周,TIOBE 编程语言社区最新发布了 2018 年 6 月排行榜,和5月份相比,C语言的增长率达到8.09%,是排行前20编程语言中增长率最大的,可见学C语言的人越来越多.小编一直有意识地收集了 ...

  9. r语言electricity数据集_R语言实战学习

    <R语言实战>中文电子版 提取码:lx35 已经学习打卡R语言22天了,可以说是初窥真容--基本了解R的数据和函数:作为程序语言,就是要多练习,多领悟,在实战中发现问题并解决问题. 所以, ...

  10. go int 转切片_一文掌握GO语言实战技能(二)

    Go 数组 Go 切片 Go 变量和内存地址 Go Map 类型 Go 面向对象编程 Go 方法的定义 GO 数组 数组是同一类型的元素集合.Go中的数组下标从0开始,因此长度为n的数组下标范围是[0 ...

最新文章

  1. ajax实现php验证码验证码,PHP验证码之Ajax验证实现方法_PHP教程
  2. 记录一次可能的order by注入
  3. (22)VHDL实现比较器(二位数值)
  4. C语言头文件一般以什么名称结尾,c语言书写规范.doc
  5. 对团队成员公开感谢博客
  6. 用CSS3写圆角(超简单)
  7. linux运维必学python吗_Python学习资源整理
  8. HDU 3622 Bomb Game(2-sat)
  9. 【每日新闻】Gartner:区块链热度高但实际部署较少且面临挑战 | 阿里巴巴宣布研制出全球最强量子电路模拟器“太章”...
  10. Golang 标准库 tips之waitgroup详解
  11. Intellij idea keymap
  12. 微信小程序物流快递状态时间轴
  13. 当前时间转换成日期格式
  14. 面试经验之北京掌上先机
  15. 实验二——软件项目管理的直观感受
  16. 程序员锁死服务器搅黄游戏,600万打水漂,创始人负债数百万!
  17. CDN-直播-点播-技术简介
  18. QT中引用动态库(.so) 和 静态库 (.a)
  19. 服务器容器化-docker(全)
  20. aspose使用合集java(Word、Excel、PPT转PDF)

热门文章

  1. C# Ado.NET连接Sql-server
  2. nyoj-469--擅长排列的小明 II
  3. NYOJ 267 郁闷的C小加(二)
  4. 详解django三种文件下载方式
  5. Python模块和包
  6. C# Image 、 byte[] 、Bitmap之间的转化
  7. ifconfig详解及设置静态IP的方法
  8. Python错误:TypeError: 'list' object is not callable
  9. 一个操作系统的实现(1):分析linux下如何运行一个执行文件
  10. C++编译链接的那些小事