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的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
随机推荐
- 2、Spring-RootApplicationContext-refresh
上一篇文中提到父容器root applicationContext最后是调用XmlWebApplicationContext去实现的, 但是什么时候开始解析标签(默认标签.自定义标签).注册bean以 ...
- ubuntu 终端快捷方式汇总
terminal 是一个命令行终端,将启动系统默认的shell,shell是一个解释并执行在命令行提示符输入的命令的程序. 启动 terminal1 在 “面板主页” 的应用程序搜索栏中,输入命令gn ...
- win api + 基础乐理产生正弦波声音
暂时记录. 感觉想写个电子钢琴乐程序了,不过感觉音有点怪怪的. #include <iostream> #include <windows.h> #include <Mm ...
- WPF学习笔记一之布局
1.Canvas 布局控件Canvas主要用来画图,注意Canvas.Left/Right/Top/Bottom <Canvas Margin="10,10,10,10" B ...
- 后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用
mybatis pagehelper想必大家都耳熟能详了,是java后端用于做分页查询时一款非常好用的分页插件,同时也被人们称为mybatis三剑客之一,下面 就给大家讲讲如何在SSM项目和sprin ...
- css动画效果之transition(动画效果属性)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python笔记17
1.今日内容 迭代器(3*) 生成器(4*) 装饰器(5*) 项目结构 logging模块 2.内容回顾 & 作业 2.1 内容回顾 2.1.1 函数(内置/自定义) 基本函数结构 def f ...
- PHP 源码 —— is_array 函数源码分析
is_array 函数源码分析 本文首发于 https://github.com/suhanyujie/learn-computer/blob/master/src/function/array/is ...
- Educational Codeforces Round 76 (Rated for Div. 2) A. Two Rival Students
You are the gym teacher in the school. There are nn students in the row. And there are two rivalling ...
- java后台接受不到vue传的参数
@RequestMapping(value = "/delBelowImg") @Transactional public R delBelowFile(@RequestParam ...