SQLite - C/C++接口 API(一)
1、sqlite3_open(const char *filename, sqlite3 **ppDb)
该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
如果 filename 参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。
如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。
2、sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。
在这里,第一个参数 sqlite3 是打开的数据库对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。
sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。
3、sqlite3_close(sqlite3*)
该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。
如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。
实例一、
#include <iostream>
#include <string.h>
#include "../Sqlite3/sqlite3.h"
using namespace std; int callback(void*,int,char**,char**); int CreateSQLite(void); int main(int argc, char *argv[])
{
CreateSQLite(); return ;
} int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n"); return ;
} int CreateSQLite(void)
{
int rc = ;
sqlite3 *p_DB = NULL;
char *err_msg = NULL;
char *p_sql = "CREATE TABLE PERSON("\
"ID INT PRIMARY KEY NOT NULL,"\
"NAME TEXT NOT NULL,"\
"AGE INT NOT NULL);"; char *str_sql = "INSERT INTO PERSON(ID, NAME, AGE) VALUES(1, 'toney', 23);"\
"INSERT INTO PERSON(ID, NAME, AGE) VALUES(2, 'mark', 34);"\
"INSERT INTO PERSON(ID, NAME, AGE) VALUES(3, 'woekd', 43);"\
"INSERT INTO PERSON VALUES(4, 'YOU', 55);"\
"SELECT * FROM PERSON;"; if (SQLITE_OK != (rc = sqlite3_open("mytest.db", &p_DB)))
{
cout << "sqlite3_open() function error : "<< sqlite3_errmsg(p_DB) << endl;
return rc;
} if (SQLITE_OK != (rc = sqlite3_exec(p_DB, p_sql, callback, , &err_msg)))
{
cout << "sqlite3_exec() function error : " << err_msg << endl;
sqlite3_free(err_msg);
} if (SQLITE_OK != (rc = sqlite3_exec(p_DB, str_sql, callback, , &err_msg)))
{
cout << "sqlite3_exec() function error : " << err_msg << endl;
sqlite3_free(err_msg);
} sqlite3_close(p_DB); return rc;
}
运行结果:
实例二:
#include <stdio.h>
#include <string.h>
#include "../Sqlite3/sqlite3.h" int callback(void *NotUsed, int argc, char **argv, char **azColName); int connect_db(char const *p_db_name); int update_db(sqlite3 *p_db); int selec_clo_db(sqlite3 *p_db); int main(int argc, char *argv[])
{
connect_db("mytest.db"); return ;
} int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i = ;
for (i = ; i < argc; ++i)
{
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n"); return ;
} int connect_db(char const *p_db_name)
{
int rec = ;
sqlite3 *p_db = NULL;
char *p_err_msg = NULL;
char *p_sql = "SELECT * FROM PERSON;"; if (NULL == p_db_name)
{
printf("DB Name is NULL \n");
return -;
} rec = sqlite3_open(p_db_name, &p_db);
if (SQLITE_OK != rec)
{
fprintf(stdin, "sqlite3_open func err : %s\n", sqlite3_errmsg(p_db));
return rec;
} rec = sqlite3_exec(p_db, p_sql, callback, , &p_err_msg);
if (SQLITE_OK != rec)
{
printf("sqlite3_exec function err : %s\n", p_err_msg);
sqlite3_free(p_err_msg);
sqlite3_close(p_db);
return rec;
} rec = update_db(p_db);
if ( != rec)
{
fprintf(stdin, "update_db function err\n");
} return rec;
} int update_db(sqlite3 *p_db)
{
int rec = ;
char *p_sql = "UPDATE PERSON SET NAME = 'KING' WHERE ID = 2;";
char *p_err_msg = NULL; if (NULL == p_db)
{
printf("update_db func p_db is NULL\n");
return -;
} rec = sqlite3_exec(p_db, p_sql, NULL, , &p_err_msg);
if (SQLITE_OK != rec)
{
printf("update_db sqlite3_exec func err : %s\n", p_err_msg);
sqlite3_free(p_err_msg);
sqlite3_close(p_db);
return rec;
} printf("修改之后 !\n");
rec = selec_clo_db(p_db);
if ( != rec)
{
printf("select_clo_db func err \n");
} return rec;
} int selec_clo_db(sqlite3 *p_db)
{
int rec = ;
char *p_sql = "SELECT * FROM PERSON;";
char *p_err_msg = NULL; rec = sqlite3_exec(p_db, p_sql, callback, , &p_err_msg);
if (SQLITE_OK != rec)
{
printf("selec_clo_db sqlite3_exec func err :%s\n", p_err_msg);
sqlite3_free(p_err_msg);
} sqlite3_close(p_db); return rec;
}
运行结果:
SQLite - C/C++接口 API(一)的更多相关文章
- SQLite - C/C++接口 API(二)
1.打开数据库 SQLITE_API int sqlite3_open16( const void *filename, /* Database filename (UTF-16) */ sqlite ...
- SQLite使用(三)&&核心API使用
概述 SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等.本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用 ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- 【转】App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
- App开放接口api安全性的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证, 那么这就需要用户提供一些信息,比如用户名密码等 ...
- 开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供)
天气预报一直是各大网站的一个基本功能,最近小编也想在网站上弄一个,得瑟一下,在网络搜索了很久,终于找到了开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供),具体如下: 国家气象局提供的 ...
- 接口API测试和返回值JSON解析的插件
火狐插件1. HttpRequest作用:接口API测试例子:http://192.168.10.61:8080/ZHCS/user/loginApp.do?phone=admin&pwd ...
- 服务接口API限流 Rate Limit 续
一.前言 上一篇文章中粗浅的介绍使用Redis和基于令牌桶算法进行对服务接口API限流,本文介绍另一种算法---漏桶算法的应用.Nginx想必大家都有所了解是一个高性能的 HTTP 和反向代理服务器, ...
- App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
随机推荐
- codeforces 1288E. Messenger Simulator(树状数组)
链接:https://codeforces.com/contest/1288/problem/E 题意:序列p的长度为n,初始序列为1 2 3 4 ...n,然后有m次操作,每次指定序列中一个数移动到 ...
- JSON解析及数据库操作实战篇
代码: JSONObject json = JSONObject.parseObject(ubody);//得到整个json JSONObject AutoTable=json.getJSONObje ...
- 如何修改C# winform程序图标
以Visual Studio 2012 C# Winform程序为例 一.程序内部显示图标的修改方法 在窗体的属性窗口找到icon属性,设置成已经准备好的ico格式的文件,效果如下 二.程序外部显示图 ...
- 函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。
1 char *match( char *s, char ch1, char ch2 ){ ; ; ; while(s[len]){ len++; } *len+];//防止s字符串全满导致t溢出 * ...
- Redis09——事务(悲观锁、乐观锁)
事务 定义: Redis事务是一个单独的隔离操作 ①事务中所有的命令都会被序列化.按照顺序执行 ②事务在执行过程中不会被其他客户端发送来的命令请求打断 作用: 串联多个命令防止别的命令插队 multi ...
- sql server下载教程
进入官网:https://www.microsoft.com/zh-cn/download/details.aspx?id=29066 点击下载即可: 安装教程:可去csdn下载: win10系统下安 ...
- 密码学笔记-一段base64wp
CTF--练习平台 例题: 一段Base64 flag格式:flag{xxxxxxxxxxxxx} 附件: base64.txt 1.base64解码:http://base64.xpcha.com/ ...
- KMP算法例题
链接:https://codeforces.com/contest/1200/problem/E 题意:依次合并两个单词,每次合并将删去最长相同前后缀,输出结果. 思路:用kmp跑出每个需要被连接的单 ...
- pycharm通过unittest框架批量执行Python脚本用例
1.如下图点击进入配置页 2.新增一个配置,“2”标签选择要执行的脚本的目录或者脚本文件,“3”标签选择要执行的脚本的目录
- CentOS7网络配置:静态IP和DHCP
1.打开并编辑网络配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33 [root@localhost network-scripts]# vim ifcfg ...