切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
Sqlite
对Sqlite数据库C API的简单封装
对Sqlite数据库C API的简单封装
2020-06-11
Sqlite
前端之家
前端之家
收集整理的这篇文章主要介绍了
对Sqlite数据库C API的简单封装
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
301
_0@1. 头
文件
@H_
301
_0@
#pragma once #include <string> #include <sstream> using namespace std; #include "
sql
ite/
sql
ite3.h" #pragma comment(lib,"
sql
ite/
sql
ite3.lib") class CResultSet { public: friend class C
sql
iteMgr; public: CResultSet(); ~CResultSet(); public: int GetColumnNum(); // 获得结果数目 int GetRecordCount(); public: int GetInt(int row,int column); string GetString(int row,int column); private: //
获取
对应行列的结果 char * GetAt(int row,int column); private: char **szResult; int nRow; int nColumn; }; class C
sql
iteMgr { public: C
sql
iteMgr(string filename); ~C
sql
iteMgr(); public: int Execute(const char *
sql
); int Execute(string
sql
); CResultSet * ExecuteQuery(string
sql
); public: void FreeResultSet(CResultSet *rs); public: void Begin(); void Commit(); void Rollback(); private: void print_error(char *error); private:
sql
ite3 *m_conn; };
@H_
301
_0@2. 源
文件
@H_
301
_0@
#include "stdafx.h" #include "
sql
iteMgr.h" CResultSet::CResultSet() { } CResultSet::~CResultSet() { ::
sql
ite3_free_table(szResult); } int CResultSet::GetColumnNum() { return nColumn; } int CResultSet::GetRecordCount() { return nRow; } int CResultSet::GetInt(int row,int column) { return atoi(GetAt(row,column)); } string CResultSet::GetString(int row,int column) { return string(GetAt(row,column)); } char * CResultSet::GetAt(int row,int column) { return szResult[(row + 1) * nColumn + column]; } C
sql
iteMgr::C
sql
iteMgr(string filename) { int nRet = ::
sql
ite3_open(filename.c_str(),&m_conn); if (nRet !=
sql
ITE_OK) { print_error("
sql
ite3_open fail"); } } C
sql
iteMgr::~C
sql
iteMgr() { ::
sql
ite3_close(m_conn); } int C
sql
iteMgr::Execute(const char *
sql
) { char *error_msg = NULL; int nRet = ::
sql
ite3_exec(m_conn,
sql
,(char **) &error_msg); if (nRet !=
sql
ITE_OK) { print_error(error_msg); return -1; } return nRet; } int C
sql
iteMgr::Execute(string
sql
) { return Execute(
sql
.c_str()); } CResultSet * C
sql
iteMgr::ExecuteQuery(string
sql
) { char *error_msg = NULL; CResultSet *pRs = new CResultSet; int nRet = ::
sql
ite3_get_table(m_conn,
sql
.c_str(),&pRs->szResult,&pRs->nRow,&pRs->nColumn,(char **) &error_msg); if (nRet !=
sql
ITE_OK) { print_error(error_msg); return NULL; } return pRs; } void C
sql
iteMgr::FreeResultSet(CResultSet *rs) { if (rs != NULL) { delete rs; rs = NULL; } } void C
sql
iteMgr::Begin() { Execute("BEGIN TRANSACTION"); } void C
sql
iteMgr::Commit() { Execute("COMMIT TRANSACTION"); } void C
sql
iteMgr::Rollback() { Execute("ROLLBACK TRANSACTION"); } void C
sql
iteMgr::print_error(char *error) { char szError[128]; memset(szError,128); sprintf(szError,"
sql
ite error: %s/n",error); OutputDebugStringA(szError);
sql
ite3_free(error); }
@H_
301
_0@3. 测试
代码
@H_
301
_0@
#include <vector> #include <string> using namespace std; #include "
sql
iteMgr.h" #include "Tools.h" struct cRecord { int id; string name; int age; }; int _tmain(int argc,_TCHAR* argv[]) {
sql
iteMgr mgr("test.db"); if (false) { mgr.Execute("create table test([id] integer primary key autoincrement,[name] text,[age] int);"); char buf[256]; memset(buf,256); for (int i = 0; i < 100; ++i) { sprintf(buf,"insert into test(name,age) values(/"tom%d/",%d)",i + 1,i + 20); mgr.Execute(buf); } } else { ResultSet *rs = mgr.ExecuteQuery("select id,name,age from test"); vector<cRecord> records; for (int i = 0; i < rs->GetRecordCount(); ++i) { cRecord record; record.id = rs->GetInt(i,0); record.name = CTools::utf8_2_ansi(rs->GetString(i,1).c_str()); record.age = rs->GetInt(i,2); records.push_back(record); } mgr.FreeResultSet(rs); } return 0; }
原文链接:https://www.f2er.com/sqlite/202839.html
上一篇:sqlite 二进制字段
下一篇:sqlite的时间默认值设定
猜你在找的Sqlite相关文章
SQLite学习笔记
安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压...
作者:前端之家 时间:2021-01-12
windows上如何安装Sqlite
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Wi...
作者:前端之家 时间:2020-11-05
【Android数据存储】SQLite使用实例(附源码)
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 ...
作者:前端之家 时间:2020-08-07
SQLite数据库管理
作者:前端之家 时间:2020-08-07
SQLite3常用命令
作者:前端之家 时间:2020-08-07
加密你的SQLite
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite 这么娇小可爱,不多了解点都不行啊
(点击上方蓝字,快速关注我们) 作者:空之境界 网址:http://supermao.cn/sqlitezhe-yao-...
作者:前端之家 时间:2020-08-07
SQLITE3 使用总结
SQLITE3 使用总结 投稿:hebedich 字体:[ 增加 减小] 类型:转载 时间:2014-08-19 Sql...
作者:前端之家 时间:2020-08-07
编程分类
MySQL
MsSQL
Oracle
Sqlite
Postgre SQL
Mariadb
MongoDB
NoSQL
HBase
JDBC
最新文章
• SQLite学习笔记
• windows上如何安装Sqlite
• 【Android数据存储】SQLit
• SQLite数据库管理
• SQLite3常用命令
• 加密你的SQLite
• 加密你的SQLite
• SQLite这么娇小可爱,不多
• SQLite这么娇小可爱,不多
• SQLite 这么娇小可爱,不多
热门标签
更多 ►
undo日志
persistent-c
mysql-error-
postal-code
sql-match-al
mysql-5.6
mysql-8.0
database-tri
安装路径
系统错误
data_dir
丢失文件
主从同步
sql_mode
数据库目录
匿名用户
character_se
ID归零
数据库位置
查询表
重复字段
查询字段
截断日志
SUSPECT
7391
Remote Serve
Linked Serve
玄学问题
登录不上
开启远程访问