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的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
随机推荐
- Educational Codeforces Round 80 A-E简要题解
contest链接:https://codeforces.com/contest/1288 A. Deadline 题意:略 思路:根据题意 x + [d/(x+1)] 需要找到一个x使得上式小于等于 ...
- CentOS7.5下基于FTP服务的局域网yum源搭建
实验环境 yum源服务器和yum客户端都处于同一局域网之中 yum源服务器 hostname:zabbix OS版本:CentOS 7.5 IP:192.168.101.201 yum客户端 host ...
- springmvc的框架搭建及工作流程
1.搭建要点 web.xml: <servlet-mapping> <servlet-name>springDispatcherServlet</servlet- ...
- Mysql使用事务
DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; START TR ...
- 九、c++容器
9.1 简介 容器库是类模板与算法的汇集,允许程序员简单地访问常见数据结构,例如队列.链表和栈. 有三类容器--顺序容器.关联容器和无序关联容器--每种都被设计为支持不同组的操作. 顺序容器:顺序容器 ...
- 深浅拷贝_python
一.浅拷贝 拷贝第一层的东西,如其他列表修改他们共同的第二层(或更深),他管不了,只能跟着变. 用处:很少用,用不同账号关联共享: import copyhusband= ['chen','123', ...
- WLC5520分布式端口(数据口)使用1G模块!
思科WLC5520有两个分布式端口. 在 10G 模式和 1G 模式之间切换•如果在端口 1 上未安装任何内容,则默认情况下主板配置为 10G 模式.因此,要切换到 1G 模式,则必须在端口 1上安 ...
- java 中使用logback日志,并实现日志按天分类压缩保存。
以maven项目作为构建工具为例,首先引入使用logback需要的3个依赖,需要注意使用logback是需要引入slf4j-api的,因为logback是基于slf4j的 <!--logback ...
- HTTP状态码详解(上)
HTTP状态码的英文为 HTTP Status Code.下面是常见的HTTP状态码: 200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在 ...
- 吴裕雄 python 机器学习——数据预处理标准化StandardScaler模型
from sklearn.preprocessing import StandardScaler #数据预处理标准化StandardScaler模型 def test_StandardScaler() ...