c语言调用sqlite
db sqlite c语言
#ifndef _DB_PLUGIN_H_
#define _DB_PLUGIN_H_
#pragma warning(disable: 4996)
//#include "mongoose.h"//typedef struct mg_keyvalue
//{// char *key;
// int klen ;
// char *value;
// int vlen;
//}mg_keyvalue;void *db_open(const char *db_path);
void db_close(void **db_handle);enum { API_OP_GET, API_OP_SET, API_OP_DEL };char *db_op_select_content(void *db, const char *tablename ,const char *id);
//void db_op(const char *key, void *db, int op);#endif /* CS_MONGOOSE_EXAMPLES_API_SERVER_DB_PLUGIN_H_ */#include "db_plugin.h"
#include "sqlite3.h"
//#include "time.h"
#include <stdio.h>
#include <stdlib.h>
//void time_get(char * buf)
//{// time_t rawtime;
// struct tm * timeinfo;
// time(&rawtime);
// timeinfo = localtime(&rawtime);
// strcpy(buf, asctime(timeinfo));
//}void *db_open(const char *db_path) {sqlite3 *db = NULL;if (sqlite3_open_v2(db_path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |SQLITE_OPEN_FULLMUTEX,NULL) == SQLITE_OK) {char *sql = "CREATE TABLE IF NOT EXISTS log([key] TEXT, [val] TEXT,[category] TEXT, [infotime] TimeStamp NOT NULL DEFAULT(datetime('now', 'localtime'))";sqlite3_exec(db,sql, 0, 0, 0);}return db;
}void db_close(void **db_handle) {if (db_handle != NULL && *db_handle != NULL) {sqlite3_close(*db_handle);*db_handle = NULL;}
}char *db_op_select_content(void *db,const char *tablename , const char *id)
{sqlite3_stmt *stmt = NULL;const char *data = NULL;int result;char buffer[128];sprintf(buffer, "SELECT * FROM %s WHERE id = ?;", tablename);if (sqlite3_prepare_v2(db, buffer, -1, &stmt,NULL) == SQLITE_OK) {sqlite3_bind_text(stmt, 1, id, strlen(id), SQLITE_STATIC);result = sqlite3_step(stmt);data = (char *)sqlite3_column_text(stmt, 0);if ((result == SQLITE_OK || result == SQLITE_ROW) && data != NULL) {char * content = malloc(strlen(data));/* mg_printf(nc,"HTTP/1.1 200 OK\r\n""Content-Type: text/plain\r\n""Content-Length: %d\r\n\r\n%s",(int) strlen(data), data);*/}else {//mg_printf(nc, "%s",// "HTTP/1.1 404 Not Found\r\n"// "Content-Length: 0\r\n\r\n");}sqlite3_finalize(stmt);}else {//mg_printf(nc, "%s",// "HTTP/1.1 500 Server Error\r\n"// "Content-Length: 0\r\n\r\n");}}static void op_set( const char *param, void *db) {sqlite3_stmt *stmt = NULL;//char value[200];//const struct mg_str *body =// hm->query_string.len > 0 ? &hm->query_string : &hm->body;char key[64];char value[512];char time[32];//mg_get_http_var(&hm->body, "key", key, sizeof(key));//mg_get_http_var(&hm->body, "value", value, sizeof(value));
// time_get(time);if (sqlite3_prepare_v2(db, "INSERT OR REPLACE INTO log VALUES (?, ?, ?);", -1,&stmt, NULL) == SQLITE_OK) {sqlite3_bind_text(stmt, 1, key, strlen(key), SQLITE_STATIC);sqlite3_bind_text(stmt, 2, value, strlen(value), SQLITE_STATIC);sqlite3_bind_text(stmt, 3, time, strlen(time), SQLITE_STATIC);sqlite3_step(stmt);sqlite3_finalize(stmt);}//mg_printf(nc, "%s", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");//printf("test is ok");// mg_printf_http_chunk(nc, "{ \"result\": %ld }", 1);//mg_send_http_chunk(nc, "", 0); /* Send empty chunk, the end of response */}static void op_get(const char *id, void *db) {sqlite3_stmt *stmt = NULL;const char *data = NULL;int result;//(void) hm;if (sqlite3_prepare_v2(db, "SELECT * FROM log WHERE key = ?;", -1, &stmt,NULL) == SQLITE_OK) {sqlite3_bind_text(stmt, 1, id, strlen(id), SQLITE_STATIC);result = sqlite3_step(stmt);data = (char *) sqlite3_column_text(stmt, 0);if ((result == SQLITE_OK || result == SQLITE_ROW) && data != NULL) {/* mg_printf(nc,"HTTP/1.1 200 OK\r\n""Content-Type: text/plain\r\n""Content-Length: %d\r\n\r\n%s",(int) strlen(data), data);*/} else {//mg_printf(nc, "%s",// "HTTP/1.1 404 Not Found\r\n"// "Content-Length: 0\r\n\r\n");}sqlite3_finalize(stmt);} else {//mg_printf(nc, "%s",// "HTTP/1.1 500 Server Error\r\n"// "Content-Length: 0\r\n\r\n");}
}static void op_del(struct mg_connection *nc, const struct http_message *hm,const struct mg_str *key, void *db) {//sqlite3_stmt *stmt = NULL;
// int result;//(void) hm;//if (sqlite3_prepare_v2(db, "DELETE FROM log WHERE key = ?;", -1, &stmt,// NULL) == SQLITE_OK) {// sqlite3_bind_text(stmt, 1, key->p, key->len, SQLITE_STATIC);// result = sqlite3_step(stmt);// if (result == SQLITE_OK || result == SQLITE_ROW) {// mg_printf(nc, "%s", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");// } else {// mg_printf(nc, "%s",// "HTTP/1.1 404 Not Found\r\n"// "Content-Length: 0\r\n\r\n");// }// sqlite3_finalize(stmt);//} else {// mg_printf(nc, "%s",// "HTTP/1.1 500 Server Error\r\n"// "Content-Length: 0\r\n\r\n");//}
}void db_op(const char *key, void *db, int op) {switch (op) {case API_OP_GET:op_get(key, db);break;case API_OP_SET://op_set(nc, hm, key, db);break;case API_OP_DEL://op_del(nc, hm, key, db);break;default://mg_printf(nc, "%s",// "HTTP/1.0 501 Not Implemented\r\n"// "Content-Length: 0\r\n\r\n");break;}
}
c语言调用sqlite相关推荐
- Linux C语言操作SQLite数据库
1. SQLite数据库特点 (1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它. (2)事务的处理是原子的,一致的 ...
- SQLite简介,C#调用SQLite
当我们用到海量数据时一般会用Oracle,SQL Server,DB2,Sybase,MySQL等数据库来保存和管理数据.如果只是程序中需要保存少量数据的话直接整到注册表里,或者保存到一个XML文件中 ...
- 使用thrift进行跨语言调用(php c# java)
1:前言 实际上本文说的是跨进程的异构语言调用,举个简单的例子就是利用PHP写的代码去调C#或是java写的服务端.其实除了本文提供的办法还有其他办法,例如http+xml(json)等等都能做到. ...
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...
- C++ 编写DLL文件给易语言调用
摸索了两天了,终于解决了所有问题,在此跟大家分享. 需要三个文件,dll_demo.h.dll_demo.cpp.dll_dome.def 直接上代码: 头文件如下: 1 #ifndef _DLL_D ...
- JNI基础 c语言调用java方法
利用c语言调用java无参的方法 java方法 com.example.jniparsedata.ParseData类中的方法 //打印 public void sayHelloFro ...
- Java如何跨语言调用Python/R训练的模型
在 如何使用sklearn进行在线实时预测(构建真实世界中可用的模型) 这篇文章中,我们使用 sklearn + flask 构建了一个实时预测的模型应用.无论是 sklearn 还是 flask,都 ...
- php 易语言md5加密解密,详解易语言调用js实现md5加密方法
易语言调用js需要用到拓展组件的脚本组件, 在窗口创建完毕的事件里给脚本组件初始化设置下脚本组件的语言属性,在这里以JScript为例: 脚本组件执行脚本的简单方法是: 脚本组件1.执行 () 然 ...
- Linux C语言调用C++动态链接库
Linux C语言调用C++动态链接库 标签: C调用C++库 2014-03-10 22:56 3744人阅读 评论(0) 收藏 举报 分类: [Linux应用开发](48) 版权声明:本文为博主原 ...
最新文章
- C语言解析pcap文件得到HTTP信息实例(原创,附源码)
- linnux 流量控制模块tc_智能功率模块助力业界加速迈向基于碳化硅(SiC)的电动汽车...
- MATLAB加入螺旋相位板调制,连续型螺旋相位板设计方法与流程
- Python语言学习:python语言的特点、入门、基础用法之详细攻略
- 各种快速幂(qaq)
- MapReduce 2 中一些基础数据类型
- STM32+华为云IoTDA,带你设计一个属于自己的动态密码锁
- 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?
- C++之安装boost库
- 基于HTML5 WebGL 与 GIS 的智慧机场大数据可视化分析
- 第二十八篇 -- 学习第五十一天打卡20190819
- 【数字电路抢救】2 逻辑函数的代数化简 3逻辑表达式的化简
- Python3 微信支付(小程序支付)V3接口
- 关于Git使用详细教程
- C++的学习心得和知识总结(十八)|基于EasyX实现 2048游戏 项目(C/C++版)
- 2021-01-09:Microsoft Word2019 提示:很抱歉此功能看似已中断,并需要修复。请使用Windows控制面板中的“程序和功能”选项修复Microsoft Office
- 标准机构发布物联网安全测试指南
- CoppeliaSim添加ROS自定义消息类型
- 用python玩转数据第一周答案_用Python玩转数据_答案
- selenium模拟geetest极验滑动验证
热门文章
- 百度网盘Linux版放出deb包客户端:新增支持Ubuntu 18.04 LTS
- c语言怎么打开已经保存的文件,保存打开文件之后,怎么也不能在显示函数中出来。。...
- 开启灯光就是近光吗_科目三考前必看!夜间灯光语音模拟+超全项目操作
- 线上每课时20元 北京上海义务教育阶段学科类校外培训指导价公布
- 成立仅一年的天猫好房,凭什么让55万人排队领钱?
- 三星成功开发LPDDR5X DRAM 将扩大超高速数据服务市场
- 中兴通讯携手ACCYOURATE发布“YouCare”5G智慧T恤
- 不用再更换整机了,苹果官方可修复iPhone 12系列破裂后盖玻璃
- 阿里巴巴牵手上汽集团:成立汽车科技公司
- 中芯国际人事变动:蒋尚义回归 传梁孟松要走