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的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
随机推荐
- try/catch/finally 语句
定义和用法 try/catch/finally 语句用于处理代码中可能出现的错误信息. 错误可能是语法错误,通常是程序员造成的编码错误或错别字.也 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异 ...
- spring(三):DefaultListableBeanFactory
- Adobe 系列下载链接
(注意!:在下方链接前加上 "pan.baidu.com/s/" 才是正确网址,用"百度网盘"下载) Photoshop 专区(图像处理软件) Adobe Ph ...
- 1015 Reversible Primes
1. 题目 2. 抽象建模 无 3. 方法 无 4. 注意点 素数判断(1不是素数) 数值的倒转 5. 代码 #include<stdio.h> #include<math.h> ...
- 微信环境中如何实现跳转到手机默认外部浏览器下载apk文件
由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载.其实原来很简单,就是判断当前是在微信内置浏览器中 ...
- D. Game with modulo 交互题(取余(膜)性质)附带a mod b<a/2证明
D. Game with modulo 交互题(取余(膜)性质) 题意 猜一个点\(a\)可以向机器提问 点对\((x,y)\) 如果\(x\mod(a)>=y\mod(a)\)回答\(x\) ...
- unittest学习5-断言
unittest提供了以下断言方式: 方法 检查 新进 assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) b ...
- 【Python】摄氏度与华氏度互相转化
Python入门程序,大家可以举一反三,进行各种转换,比如单位转化,货币转化等等,自行发挥即可! 原理: 代码: Tempstr=input("请输入带有符号的温度值:\n")# ...
- Oracle的表空间、用户和表的区别和联系
Oracle的表空间.用户和表的区别和联系 Oracle数据库是通过表空间来存储实际存在的那些表.索引.视图的, 表空间分类: 临时表空间: 用于存储数据库中单持久性模型对象,如表.索引.视图等, ...
- Lowest Common Multiple Plus 题解
求n个数的最小公倍数. Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. Output为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的 ...