SQLite学习笔记(七)-- 数据插入、更新和删除(C++实现)
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++实现)相关推荐
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPOL进行查询 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技 ...
- sqlite学习笔记5:插入数据,查询数据和删除数据
曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREA ...
- SQLite学习笔记(八)-- BLOB数据的插入与查询(C++实现)
1.什么是BLOB数据 BLOB (binary large object)即二进制大对象,是一种可以存储二进制文件的容器.在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型.常见的BLO ...
- MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
MySQL 8--学习笔记03(插入.更新.删除 数据 [DML语句]) 一.插入数据 1.1 插入所有字段.插入部分字段 1.2 同时插入多条记录(批量插入) 1.3 将查询结果插入到表中 二.更新 ...
- 2010年SQLite学习笔记之一
2010年SQLite学习笔记之一 一. 如何获取SQLite最新版本 官方站点:http://www.sqlite.org/ 从http://www.sqlite.org/网站 ...
- Sqlite学习笔记(四)SQLite-WAL原理(转)
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...
- Vue -- 指令【学习笔记】(持续更新)
Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...
最新文章
- 通过7个函数解密区块链(附代码)
- Linux之不删除指定文件夹,其他都删(文件和文件夹)
- 学习方法之05六步法则,考上清华北大的路径
- php速度为什么快,为什么 === 的速度比 == 快?
- C. Memory and De-Evolution 逆向思维
- 关于vs2008改变工程路径
- 利用sql循环语句实现基本的数据累加和阶乘
- XML 是一种元语言, 可以用它来描述其他语言。
- 专利申请要准备哪些资料
- 群体智能:新一代AI的重要方向
- 微信搜索刷关键词推广方法
- 【托业】【跨栏】REVIEW2
- 送外卖送快递很丢人吗,为什么有些人看不起他们
- latex 1图加标题_数学公式编辑工具——LaTeX简介
- Flutter学习总结(二)开发语言Dart学习
- mac 上的一些软件
- psd网站模板转换html,PSD网页模板怎么用?急将psd网页模版转换为html的详细讲解?...
- 【C++ Primer】第18章 用于大型程序的工具 (3)
- ADC外部触发方式中, TIM2_CC2事件 TIM3_TRGO事件 分别只什么事件呢? 怎么实现的(原理)?
- JVM学习02——内存加载过程(类加载器)