sqlite数据库方法类使用说明-检查列字段是否存在、添加列、删除列

DuckDB向量化执行与AI原生支持实战指南 DuckDB是一种嵌入式列式分析数据库,其核心在于向量化执行引擎与零依赖架构。它通过SIMD指令(如AVX-512)实现批量数据处理,显著提升CPU缓存利用率和计算吞吐;结合列存设计,大幅降低I/O开销,尤其适合宽表与中等规模数据分析场景。在AI工程中,DuckDB原生支持向量相似度计算(cosine_distance、HNSW索引),无需外部扩展即可构建轻量RAG向量库,并兼容SQL与Python链式API,降低LLM+数据层集成门槛。本文聚焦DuckDB在向量检索、NL2SQL、边缘部署等真实AI工作流 阅读详情

本文主要演示sqlite开源项目中的数据库方法类使用说明。本项目旨在分享知识和经验,欢迎广大网友一起加入到开源项目中一起分享贡献知识和经验。

线上测试代码:

/******************************************************************************
  > File Name		: samples_addfield.cpp
  > Author			: Wseldom
  > Mail			: 3235459847@qq.com
  > Created Time	: Fri 01 Dec 2023 03:06:27 PM CST
******************************************************************************/
#include "./samples_addfield.hpp"
#include "sqlite/sqlite.h"

#define	RUN_TO_HERE printf ("run to here(%d)\n", __LINE__);



int samples_addfield (int argc, char** argv)
{
	if (argc < 2) {
		printf ("请输入一个参数以指定数据库文件名!\n");
		return -1;
	}
	sql::sqlite db(argv[1]);
	db.exec ("create table if not exists employee("
		"ID INTEGER PRIMARY KEY  AUTOINCREMENT, "
		"NAME           TEXT    NOT NULL UNIQUE, "
		"AGE            INT     NOT NULL, "
		"ADDRESS        CHAR(50)"
	");");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(1, '张三', 18, '珠海');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '李四', 21, '广州');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '啊五', 32, '深圳');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '小哀', 23, '珠海');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '刘五', 18, '深圳');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '柯南', 43, '广州');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '苏周', 51, '广州');");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS) VALUES(NULL, '啊二', 21, '珠海');");
	printf ("检查表中字段。\n");
	if (db.check_field ("employee", "SALARY") == E_SQLITE_FALSE) {
		printf ("表employee中不存在字段SALARY,添加字段SALARY,并设置默认值为10000.\n");
		db.exec (SQLCMD_ADD_COLUMN ("employee","SALARY REAL DEFAULT 10000"));
	} else {
		printf ("表employee中已存在字段SALARY.\n");
	}
	RUN_TO_HERE
	printf ("再次检查表中字段。\n");
	RUN_TO_HERE
	if (db.check_field ("employee", "SALARY") == E_SQLITE_FALSE) {
		printf ("表employee中不存在字段SALARY.\n");
	} else {
		printf ("表employee中已存在字段SALARY.\n");
	}
	RUN_TO_HERE
	sql::query* query;
	query = db.query ("select * from employee limit 1;");
	RUN_TO_HERE
	if (query) {
		query->begin ();
		do {
			printf ("ID=%ld,NAME=%s,AGE=%ld,ADDRESS=%s,SALARY=%f\n"
				, query->get_number ("ID", 0)
				, query->get_string ("NAME", "未知")
				, query->get_number ("AGE", 0)
				, query->get_string ("ADDRESS", "地址")
				, query->get_float ("SALARY", 5000)
			);
		} while (query->next () > 0);
		delete query;
	}
	return 0;
}

首先创建表employee,表中不包含字段SALARY,然后插入一些数据;
然后调用方法check_field检查字段SALARY是否灿在,若不存在则新增此字段,并且设置默认值为10000;若存在则提示已存在。插入后重新检查字段是否存在,并且查询一条记录打印其值,看默认值是否生效。执行结果如下:
在这里插入图片描述
注意“sqlite err info:query aborted”并非查询错误,此日志是因为check_field检查到字段存在时在回调函数中返回非0导致查询终止而形成的日志。

接下来是删除表中字段的例程。

/******************************************************************************
  > File Name		: samples_delfield.cpp
  > Author			: Wseldom
  > Mail			: 3235459847@qq.com
  > Created Time	: Fri 01 Dec 2023 03:59:25 PM CST
******************************************************************************/
#include "./samples_delfield.hpp"
#include "sqlite/sqlite.h"




int samples_delfield (int argc, char** argv)
{
	if (argc < 2) {
		printf ("请输入一个参数以指定数据库文件名!\n");
		return -1;
	}
	sql::sqlite db(argv[1]);
	db.exec ("create table if not exists employee("
		"ID INTEGER PRIMARY KEY  AUTOINCREMENT, "
		"NAME           TEXT    NOT NULL UNIQUE, "
		"AGE            INT     NOT NULL, "
		"ADDRESS        CHAR(50), "
		"SALARY         REAL"
	");");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(1, '张三', 18, '珠海', 2500.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '李四', 21, '广州', 6800.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '啊五', 32, '深圳', 16500.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '小哀', 23, '珠海', 13000.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '刘五', 18, '深圳', 4500.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '柯南', 43, '广州', 20500.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '苏周', 51, '广州', 22500.0);");
	db.exec ("INSERT INTO employee(ID,NAME,AGE,ADDRESS,SALARY) VALUES(NULL, '啊二', 21, '珠海', 12500.0);");


	printf ("删除字段SALARY");
	db.exec ("create table temp as select ID,NAME,AGE,ADDRESS from employee where 1 = 1;");
	db.exec ("drop table employee;");
	db.exec (SQLCMD_RENAME_TABLE("temp", "employee"));

	if (db.check_field ("employee", "SALARY") == E_SQLITE_FALSE) {
		printf ("表employee中已不存在字段SALARY.\n");
	} else {
		printf ("表employee中存在字段SALARY.\n");
	}

	sql::query* query = NULL;
	query = db.query ("select * from employee;");
	if (query == NULL) {
		printf ("查询失败或未查询到数据!\n");
		return -1;
	}
	if (query->size () <= 0) {
		delete query;
		printf ("未查询到数据!\n");
		return -1;
	}
	printf ("总共查询到%d条记录,记录如下:\n", query->size ());
	query->begin ();
	do {
		printf ("ID:%ld, name:%s, age:%ld, address:%s, salary:%f\n"
		, query->get_number ("ID", 0)
		, query->get_string ("name", "")
		, query->get_number ("age", 0)
		, query->get_string ("address", "")
		, query->get_float ("salary", 0)
		);
	} while (query->next () > 0);
	delete query;
	return 0;
}

执行结果如下:
在这里插入图片描述

SQLite 添加列时,判断该列是否存在 一、应用场景 最近在项目中使用了SQLite,设计表时不合理,后期需要添加新的字段。 当添加该字段时,需要先判断该列是否存在。如果不存在,则使用 ALTER 添加该字段。 二、代码实现 // 不能重复插入 String ADD_COLUMNS_PRINCIPAL = "ALTER TABLE project ADD COLUMN principal TEXT"; String ADD_COLUMNS_PHONE = "ALTER TABLE project ADD COLUMN phone TEXT"; R 阅读详情

相关推荐

检查主 SQLite 数据库,确保所有表都存在

在使用 SQLite 数据库时,有时候需要确保数据库中的所有表都存在,以避免在后续的操作中出现错误。通过以上代码,我们可以轻松地检查主 SQLite 数据库中的所有表是否存在。需要注意的是,以上代码假设数据库文件已经存在并且是有效的 SQLite 数据库文件。如果你尝试连接一个不存在的数据库文件,将会创建一个新的数据库文件。在连接时,我们需要提供数据库文件的路径作为参数,如果文件不存在,则会创建一个新的数据库文件。现在,我们可以执行一个 SQL 查询来获取数据库中的所有表的信息。接下来,我们可以使用。

PixelLogic的博客 476

Sqlite检查表、字段是否存在,不存在则新增

有些时候我们可能需要在代码中检测某个表或某个表中某个字段是否存在,不存在的情况下通过代码去添加它,该怎么去判断呢 下边一块看一下:

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 8885

内核工作FAST‘25 Artifact Evaluation流程记录

在我们的paper中,复现需要用到傲腾持久化内存,因此,需要AE Reviewer访问到内网服务器中。我们的思路是购买云服务器,将其作为跳板机,内网服务器通过SSH反向代理与公网服务器建立隧道,AE Reviewer通过隧道访问内网服务器。我们在AE过程中使用。然后,把一切复现需要的代码环境,在chroot里面配置完成。

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 1215

Sqlite中判断表、字段是否存在的方法

sqlite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息。 sqlite_master表数据字段: type:  类型,取值一般为table, view name:     tbl_name:   表名 rootpage: sql:创建表或者视图的sql语句,可以从该sql语句中判

wuyou1336的博客 7万+

后向投影算法(BPA)-SAR成像算法系列(二)

SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。

yjh_2019的博客 1万+

从零到一:华为iMaster NCE-Campus部署中的Euler OS与FusionInsight深度解析

本文深入解析华为iMaster NCE-Campus部署中Euler OS与FusionInsight的关键技术要点,包括RAID配置、网络绑定技术、安装避坑指南及性能调优方案。通过实战经验和详细配置示例,帮助工程师提升部署效率与系统稳定性,确保华为企业级解决方案的高效运行。

f6g7h8i9j的博客 548

sqlite判断表中是否已经存在某个字段

select * from sqlite_master 查询结果: 该表中name即为表名,sql为创建该表的sql语句,可用sql中是否包含该字段来判断: select count(*) from sqlite_master where name='Formular' and sql like '%ntype%' Formular为表名,ntype为字段名 ...

bureau123的博客 3237

ICS v9.5 OverbyteIcsWSocket.pas 整体架构分析

核心架构:OverbyteIcsWSocket.pas 是 Internet Component Suite (ICS) 的基础网络组件单元,提供跨平台 Winsock API 封装,支持TCP/UDP 客户端/服务器,DNS 解析和Raw Socket。在 v9.5 中,SSL/TLS 代码已分离至 OverbyteIcsSslBase.pas 等单元,使核心单元更精简,专注于非加密 socket 操作。

sonadorje的专栏 993

【SQLite】SQLite3约束总结

约束是在数据库表中的某列字段上强制执行的规则,用以限制插入表中的数据类型,确保数据库中的数据的准确性和可靠性约束分为列级约束和表级约束,前者适用于列,后者应用于整个表。 什么是约束 NOT NULL 约束 DEFAULT约束 UNIQUE约束 PRIMARY KEY约束 CHECK约束 删除约束

XY_Mckevince的博客 2880

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)新增用户和用户角色权限

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)查看用户权限、新增用户和用户角色权限。

念兮为美 7479

银行监管报送系统介绍(十五):金融审计平台

金审平台主要包括基础、财务、结算、信贷和中间业务五大板块,主要服务于审计署对中国银行的各项审计任务,同时也可为行内审计、稽核检查、数据分析、总分行提供基础数据服务,为实现基础数据共享提供了有力的数据保障。2019年1月某全国性股份制商业银行收到审计署2019-23号文,文中指出为进一步提高审计数据质量,审计署审计组派员前往9家重点商业银行,就完善标准化数据的相关情况与各银行有关部门进行讨论协商。关于数据报送频率及报送内容:数据从2019年4月开始,按月报送,即于每月25日之前报送上月数据;

银行信息系统应用架构详解 2053

小白也能看懂的Qwen3-30B-A3B:128个专家、激活仅3B参数的高效MoE架构全解析

Qwen3-30B-A3B 是一款总参数 300 多亿、每个 token 仅激活约 3B 参数的高效 MoE(混合专家)大语言模型。本文带你读懂它的 128 个专家如何分工、Top-8 路由机制如何省算力,以及 W4A8 量化如何把整个模型压缩到约 30GB 硬盘空间,新手也能一次看懂。 ## 📦 先认识它:这个仓库里装的是什么 这个仓库是 **Qwen3-30B-A3B-Instruct-

gitblog_00996的博客 177

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1669

Keystone 8.0 大版本升级全解析:Prisma 7 / Next.js 16 运行时革新与 Admin UI 重构

`@keystone-6/core@8.0.0` 是 Keystone(基于 Node.js、GraphQL 与 React 构建的无头 CMS)的一次重大版本发布:它全面重构了 Admin UI(改用 `@keystar/ui` 设计系统),将运行时与数据库栈升级到 Prisma 7、Next.js 16、Apollo Server/Client 5/4 与 Express 5,并重构了字段级访

gitblog_00165的博客 202

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 387

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Airtable被收购后怎么办?备份迁移与开源替代方案解析

无代码/低代码平台正在重塑企业数字化方式,但商业并购带来的不确定性也让依赖者需要更谨慎。Airtable 被 Bending Spoons 以约22亿美元收购,引发对数据安全、定价策略和技术选型的广泛关注。本文从无代码数据库的基础概念出发,解析 Airtable 的核心设计如 Base、Field 与自动化,并重点围绕 API 数据备份、迁移流程以及 NocoDB、Baserow 等开源替代方案展开实操演示。无论你是个人开发者还是企业团队,都可通过本文建立“数据可控、备份常态化、架构不绑定”的工程思维,从容

weixin_33811539的博客 369

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

模板驱动的零代码文档自动化:业务人员自助生成合同与报表

文档自动化是企业提升运营效率的基础能力,其核心在于解耦内容与格式——通过预定义模板固化结构、预留动态字段注入数据,实现确定性输出。相比AI生成易引发合规风险、代码定制推高维护成本,模板驱动方案以可视化编辑、强类型字段、极简条件逻辑为特征,兼顾法律严谨性与业务敏捷性。它天然适配合同、发票、报告等高频标准化文档场景,支持与CRM、ERP等系统对接,让市场、销售、法务等非技术人员自主完成文档生产。本文深入解析Sqribble如何以‘模板即契约’理念重构文档工作流。

weixin_30700977的博客 449

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# 中 SQLite 查询数据库表中字段(列)是否存在的方法

C# 中 SQLite 查询数据库表中字段是否存在的方法

^@^lemon tea^@^ 2004

C# SQLite数据库完整性检查、数据修复、数据管理、数据导出、数据可视化

C# SQLite数据库完整性检查、数据修复、数据管理、数据导出、数据可视化

WK攻城狮的博客 1428

sqlite 判断表字段是否存在

/// &lt;summary&gt; /// 判断表中某个字段是否存在 /// &lt;/summary&gt; /// &lt;param name="fieldName"&gt;字段名&lt;/param&gt; /// &lt;param name="tableName"&gt;表名&lt;/param&gt; /// &lt;returns&a

大米的博客 3111

sqlite 判断表是否存在, 判断某列是否存在 -- c++

SQLite官网:http://www.sqlite.org cppsqlite下载地址:https://github.com/lmmir/CppSQLite3 1. sqlite 判断表是否存在 //第三方库 cppsqlite3 CppSQLite3DB db; db.open("..."); if ( !db.tableExists("表名") ) //判断表存在 { return 0; } 2. sqlite 判断某列是否存在 // sqlite_master 为sqlite 自建隐藏.

heyuye110 3543

sqlite判断表或者字段是否存在

如何判断sqlite中的数据库表或者字段是否存在,方法是通过sqlite_master表。 sqlite_master表结构如下: CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT ); type  --类型,如:table name--

飞龙在天 1万+

Sqlite判断字段存在

判断表存在的方法很简单,网上很多: SELECT COUNT(*) FROM sqlite_master where type=table and name=%s" % tname; 那么判断字段是否存在, 或者说如何判断表的版本是否最新就只需要:select * from sqlite_master where tbl_name=tblContactList; 

Happin的专栏 4313

SQLite 判断表存在/删除表/创建表及if not exist插入数据

Select '001','张三' where not exists(select 1 from Users where UserID = '001')drop table if exists Users;--表Users已存在,则删除。values('001','张三')2、创建表(表Users不存在则创建)3、插入不存在的记录。

GuoGuoABC 5071

SQLite数据库的增删查改

SQLite增删查改

m0_55074196的博客 1403
上一篇: sqlite方法类使用说明-blob数据类型读写操作
下一篇: sqlite数据库之事务处理
pioneer_t
博客等级 码龄8年 36粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值