1.代码实例

  • 代码说明
    本例主要说明如何对数据表进行插入、更新和删除操作。
  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 测试数据说明
    测试表为Student表,其基本结构和建立方法参考上一篇: SQLite学习笔记(四)– 数据表的定义、修改与删除(C++实现)
    测试表的内容如下:

  • 具体代码

#include <iostream>
#include <Windows.h>
using namespace std;//sqlite3头文件
#include "sqlite3.h"
//sqlite3库文件
#pragma comment(lib,"sqlite3.lib")//函数功能:将utf8字符转gb2312字符
//参数:    const char* utf8[IN]                   -- UTF8字符
//返回值:  char*                                  -- gb2312字符
char* U2G(const char* utf8)
{int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);wchar_t* wstr = new wchar_t[len + 1];memset(wstr, 0, len + 1);MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);char* str = new char[len + 1];memset(str, 0, len + 1);WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);if (wstr) delete[] wstr;return str;
}//unicode字符转utf8
//函数功能:将gb2312字符转换为utf8字符
//参数:    const char* gb2312[IN]                   -- gb2312字符
//返回值:  char*                                    -- UTF8字符
char* G2U(const char* gb2312)
{int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);wchar_t* wstr = new wchar_t[len + 1];memset(wstr, 0, len + 1);MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);char* str = new char[len + 1];memset(str, 0, len + 1);WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);if (wstr) delete[] wstr;return str;
}//函数功能:删除Student表中数据
//参数:    sqlite3 *db[IN]                         --数据库操作句柄
//返回值:  bool                                    --函数执行成功,则返回true;否则返回false
bool DeleteStudent(sqlite3 *db)
{bool bRet = false;int rc;char sql[3000];char *pErrMsg = 0;sprintf_s(sql, "DELETE FROM Student WHERE Sno='%s';","1802");rc = sqlite3_exec(db, sql, NULL, 0, &pErrMsg);if (rc != SQLITE_OK){cout << "操作发生失败,失败原因:" << pErrMsg << endl;;sqlite3_free(pErrMsg);bRet = false;}else{bRet = true;}return bRet;
}//函数功能:向Student表中更新数据
//参数:    sqlite3 *db[IN]                         --数据库操作句柄
//返回值:  bool                                    --函数执行成功,则返回true;否则返回false
bool UpateStudent(sqlite3 *db)
{bool bRet = false;int rc;char sql[3000];char *pErrMsg = 0;sprintf_s(sql, "UPDATE Student Set Sage=%d WHERE Sno='%s';",18, "1804");rc = sqlite3_exec(db, sql, NULL, 0, &pErrMsg);if (rc != SQLITE_OK){cout << "操作发生失败,失败原因:" << pErrMsg << endl;;sqlite3_free(pErrMsg);bRet = false;}else{bRet = true;}return bRet;return true;
}//函数功能:向Student表中插入数据
//参数:    sqlite3 *db[IN]                         --数据库操作句柄
//返回值:  bool                                    --函数执行成功,则返回true;否则返回false
bool InsertStudent(sqlite3 *db)
{bool bRet = false;int rc;char sql[3000];char *pErrMsg = 0;sprintf_s(sql, "INSERT INTO Student VALUES(  \'%s','%s','%s',%d);","1804",G2U("赵六"),G2U("男"),19);rc = sqlite3_exec(db, sql, NULL, 0, &pErrMsg);if (rc != SQLITE_OK){cout << "操作发生失败,失败原因:" << pErrMsg << endl;;sqlite3_free(pErrMsg);bRet = false;}else{bRet = true;}return bRet;
}//函数功能:使用查询表方式查询学生数据
//参数:    sqlite3 *db[IN]                         --数据库操作句柄
//返回值:  bool                                    --函数执行成功,则返回true;否则返回false
bool SelectStudent_QueryTable(sqlite3 *db)
{bool bRet = false;int rc;char sql[3000];char *pErrMsg = 0;sprintf_s(sql, "SELECT * FROM 'Student';");string m_SqlCommand(sql);char** pResult;int nRow;int nCol;int nResult = sqlite3_get_table(db,m_SqlCommand.c_str(),&pResult, &nRow, &nCol, &pErrMsg);if (nResult != SQLITE_OK){//注意,执行失败,需要清理错误码的内存空间sqlite3_free(pErrMsg);return false;}int nIndex = nCol;int cnt = 0;for (int i = 0; i<nRow; i++){       for (int j = 0; j<nCol; j++){cout << U2G(pResult[j]) << ":" << U2G(pResult[nIndex]) << "  ";++nIndex;}cout << endl;}sqlite3_free_table(pResult);return true;
}int main()
{sqlite3 *pDataBase = NULL;                           //打开数据库//如果路径不含中文,可以不用转码。不过保险起见,建议全部转码。int iRet = sqlite3_open(G2U("E:\\sqlite数据库\\testSQLite.db"), &pDataBase);if (iRet){cout << "数据库打开失败,失败原因:" << sqlite3_errmsg(pDataBase) << endl;   }else{cout << "数据库打开成功!" << endl;cout << "原始数据:" << endl;//以查询表方式查询数据SelectStudent_QueryTable(pDataBase);//插入一条记录InsertStudent(pDataBase);cout << endl << "插入一条记录后数据:" << endl;SelectStudent_QueryTable(pDataBase);//修改年龄UpateStudent(pDataBase);cout << endl << "修改年龄后数据:" << endl;SelectStudent_QueryTable(pDataBase);//删除数据DeleteStudent(pDataBase);cout << endl << "删除一条记录后数据:" << endl;SelectStudent_QueryTable(pDataBase);//关闭数据库iRet= sqlite3_close(pDataBase);if (0 == iRet){cout << "数据库关闭成功!" << endl;}}getchar();return 0;
}
  • 输出结果

栏目导航
上一篇:SQLite学习笔记(六)– 数据查询功能两种实现方式(下)_查询表方式(C++实现)
下一篇:SQLite学习笔记(八)– BLOB数据的插入与查询(C++实现)

SQLite学习笔记(七)-- 数据插入、更新和删除(C++实现)相关推荐

  1. JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询

    JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技 ...

  2. sqlite学习笔记5:插入数据,查询数据和删除数据

    曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREA ...

  3. SQLite学习笔记(八)-- BLOB数据的插入与查询(C++实现)

    1.什么是BLOB数据 BLOB (binary large object)即二进制大对象,是一种可以存储二进制文件的容器.在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型.常见的BLO ...

  4. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])

    MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...

  5. 2010年SQLite学习笔记之一

    2010年SQLite学习笔记之一 一.            如何获取SQLite最新版本 官方站点:http://www.sqlite.org/ 从http://www.sqlite.org/网站 ...

  6. Sqlite学习笔记(四)SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  7. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法

    本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...

  8. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  9. Vue -- 指令【学习笔记】(持续更新)

    Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...

最新文章

  1. 通过7个函数解密区块链(附代码)
  2. Linux之不删除指定文件夹,其他都删(文件和文件夹)
  3. 学习方法之05六步法则,考上清华北大的路径
  4. php速度为什么快,为什么 === 的速度比 == 快?
  5. C. Memory and De-Evolution 逆向思维
  6. 关于vs2008改变工程路径
  7. 利用sql循环语句实现基本的数据累加和阶乘
  8. XML 是一种元语言, 可以用它来描述其他语言。
  9. 专利申请要准备哪些资料
  10. 群体智能:新一代AI的重要方向
  11. 微信搜索刷关键词推广方法
  12. 【托业】【跨栏】REVIEW2
  13. 送外卖送快递很丢人吗,为什么有些人看不起他们
  14. latex 1图加标题_数学公式编辑工具——LaTeX简介
  15. Flutter学习总结(二)开发语言Dart学习
  16. mac 上的一些软件
  17. psd网站模板转换html,PSD网页模板怎么用?急将psd网页模版转换为html的详细讲解?...
  18. 【C++ Primer】第18章 用于大型程序的工具 (3)
  19. ADC外部触发方式中, TIM2_CC2事件 TIM3_TRGO事件 分别只什么事件呢? 怎么实现的(原理)?
  20. JVM学习02——内存加载过程(类加载器)

热门文章

  1. 老程序员的经验:应该怎么培养编程思维?
  2. 分享申请IDP账号的过程,包含duns申请的分享
  3. 我的春招实习总结:已拿字节,快手,美团Offer
  4. 讯wifi_新讯随身wifi怎么样?新讯wifi靠谱吗?
  5. 一条 Select 语句 在 Postgresql 中的执行链路
  6. FPGA——1位全加器和4位全加器的实现
  7. 关于python使用Onenbsp;Classamp;nbs…
  8. Director类的使用
  9. position属性详解
  10. 有介质的高斯定理详细证明(电偶极子模型)以及例题讲解