SQLLite创建数据表

2023-11-13

// SQLIteTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#pragma warning(disable:4996)
#include <iostream>
#include<stdio.h> 
#include<string.h>
#include "../Sqlite/sqlite3.h"
using namespace std;


static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
	int i;
	for (i = 0; i < argc; i++) {
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
	}
	printf("\n");
	return 0;
}

void main()
{

	sqlite3 *db;
	char *zErrMsg = 0;
	int  rc;
	char *sql;

	rc = sqlite3_open("test.db", &db);

	if (rc) {
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		exit(0);
	}
	else {
		fprintf(stderr, "Opened database successfully\n");
	}

	sql = "CREATE TABLE COMPANY("  \
		"ID INT PRIMARY KEY     NOT NULL," \
		"NAME           TEXT    NOT NULL," \
		"AGE            INT     NOT NULL," \
		"ADDRESS        CHAR(50)," \
		"SALARY         REAL );";

	/* Execute SQL statement */
	rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	else {
		fprintf(stdout, "Table created successfully\n");
	}

	sqlite3_close(db);

}

这里介绍一下sqlite3_exec函数,它的功能就是执行一条sql 语句的函数,它的函数原型

int sqlite3_exec(
  sqlite3* ppDb,                             /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

第1个参数是前面open函数得到的数据库指针。 第2个参数constchar*sql是一条sql 语句,以\0结尾。 第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。 第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。 第5个参数char** errmsg 是错误信息。注意是指针的指针。

sqlite3里面有很多固定的错误信息。执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接cout<<errmsg得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。 说明:通常,sqlite3_callback 和它后面的void*这两个位置都可以填NULL。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

exec 的回调

typedef int(*sqlite3_callback)(void*,int,char**,char**); 你的回调函数必须定义成上面这个函数的类型。

下面给个简单的例子: //sqlite3的回调函数 //sqlite 每查到一条记录,就调用一次这个回调

int LoadMyInfo(void* para,intn_column,char** column_value,char** column_name);

//para是你在sqlite3_exec 里传入的void*参数通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),

//然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据

//n_column是这一条记录有多少个字段(即这条记录有多少列) //char** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组)

//每一个元素都是一个char*值,是一个字段内容(用字符串来表示,以\0结尾)  //char** column_name 跟column_value是对应的,表示这个字段的字段名称

参考:

https://www.cnblogs.com/zxc2man/p/7463470.html

https://www.runoob.com/sqlite/sqlite-c-cpp.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLLite创建数据表 的相关文章

  • arm基础知识

    目录 arm基础知识 谈谈对嵌入式的理解 计算机基本理论 计算机的组成 指令的解析 编译原理 ARM相关知识介绍 1 认识ARM ARM含义 架构 内核 SOC ARM的发展历史 指令集 ARM公司产品分布 ARM体系结构 ARM v8 A
  • 机器学习笔记:李宏毅ChatGPT Finetune VS Prompt

    1 两种大语言模型 GPT VS BERT 2 对于大语言模型的两种不同期待 2 1 专才 2 1 1 成为专才的好处 Is ChatGPT A Good Translator A Preliminary Study 2023 Arxiv
  • 华为OD机试 - 英文输入法(Java)

    题目描述 主管期望你来实现英文输入法单词联想功能 需求如下 依据用户输入的单词前缀 从已输入的英文语句中联想出用户想输入的单词 按字典序输出联想到的单词序列 如果联想不到 请输出用户输入的单词前缀 注意 英文单词联想时 区分大小写 缩略形式

随机推荐

  • requests库学习

    requests库学习 requests快速上手 http 2 python requests org zh CN latest user quickstart html Requests库是用来发送HTTP请求 接收HTTP响应的一个Py
  • ES使用中遇到的坑

    1 ES分页超过10000条报错 es 默认采用的分页方式是 from size 的形式 是一种逻辑上的分页 在深度分页的情况下 采用from to方式进行分页效率会非常的低 例如以下查询 1 GET student doc search
  • 记一次在k8s集群搭建的Harbor私有仓库无法提供服务之镜像迁移恢复实践

    本章目录 记一次在k8s集群搭建的Harbor私有仓库无法提供服务之镜像迁移恢复实践 描述 Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器 通过添加一些企业必需的功能特性 例如安全 标识和管理等 扩展了开源
  • 内网隧道代理技术(十七)之 NPS的使用

    NPS的介绍和使用 NPS介绍 nps是一款轻量级 高性能 功能强大的内网穿透代理服务器 目前支持tcp udp流量转发 可支持任何tcp udp上层协议 访问内网网站 本地支付接口调试 ssh访问 远程桌面 内网dns解析等等 此外还支持
  • [752]压力测试工具-ab工具

    在学习ab工具之前 我们需了解几个关于压力测试的概念 吞吐率 Requests per second 概念 服务器并发处理能力的量化描述 单位是reqs s 指的是某个并发用户数下单位时间内处理的请求数 某个并发用户数下单位时间内能处理的最
  • JS进阶第三篇:开发中对数组及对象的判断方法

    系列文章传送门 JS进阶第一篇 手写call apply bind JS进阶第二篇 函数参数按值传递 文章目录 JS判断数组 1 通过instanceof运算符判断 2 通过constructor判断 3 通过数组自带的isArray方法判
  • ESP32-C3 应用 篇(实例二、通过蓝牙将传感器数据发送给手机,手机端控制 SK6812 LED)

    ESP32 C3 蓝牙部分我们学习了GATT 本文尝试使用蓝牙做一个简单的小应用 目录 前言 一 整体框架 二 数据传输部分 2 1 添加温湿度驱动组件 2 2 传感器数据传输程序 再次说明 ESP GATTS READ EVT 事件 2
  • Git版本控制器的基本使用

    摘要 Git 是一个分布式版本控制软件 最初本是为了更好的管理Linux内核开发而被林纳斯 托瓦兹开发 后来因为项目开发中版本控制的强烈需求 而git也日趋成熟 最终成为了一个独立的版本控制软件 git 分布式 版本控制 目录 关于git
  • 正则表达式匹配第一个单个字符

    匹配单字符 数字 d表示0 9的数字 只匹配一个 import re result re match r d 3python print result result re match r d python3 print result 运行结
  • ipsec.secrets

    IPSEC SECRETS 5 strongSwan IPSEC SECRETS 5 NAME ipsec secrets secrets for IKE IPsec authentication DESCRIPTION The file
  • 多元共进|科技促进艺术发展,助力文化传承

    科技发展助力文化和艺术的传播 融合传统与创新 碰撞独特魅力 一起来了解 2023 Google 开发者大会上 谷歌如何依托科技创新 推动艺术与文化连接 传承和弘扬传统文化 自 2011 年成立以来 谷歌艺术与文化致力于提供体验艺术和文化的新
  • 使用OpenResty搭建简单的文件服务器

    前言 前几天使用nginx nginx upload module python 回调处理程序 搭建了一个简单的文件服务器 网上很多人都建议使用Lua去扩展nginx的功能 所以琢磨了下如何使用Lua语言去对nginx去做功能扩展 网上查阅
  • 网络上的学习笔记 Hadoop

    1 如今有10个文件夹 每个文件夹都有1000000个url 如今让你找出top1000000url 1 运用2个job 第一个job直接用filesystem读取10个文件夹作为map输入 url做key reduce计算个url的sum
  • 【弹性分布式EMA】在智能电网中DoS攻击和虚假数据注入攻击(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 FDIA攻击 1 2 DoS攻击 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述
  • Java 正则提取短信签名

    使用java 正则表达式提取短信签名 import java util regex Matcher import java util regex Pattern public class ExtractSmsSignature 匹配中括号内
  • 安装ESXi

    1 简介 ESXi是vmware推出的一款优秀的服务器级别的虚拟机 它与我们常用的虚拟机不同的是 日常使用的虚拟机是需要依赖于一个操作系统的 比如在window上使用vmware 或者linux上使用virtualbox 而ESXi不依赖于
  • 【多模态】1、几种多模态 vision-language 任务和数据集介绍

    文章目录 一 Phrase Grounding 1 1 概念介绍 1 2 常用数据集介绍 1 3 评估指标 二 Referring Expression Comprehension REC 2 1 概念介绍 2 2 常用数据集介绍 三 Vi
  • cmd相关命令

    查看本地端口占用问题并进行处理 1 查看所有的端口及相关信息 命令 netstat ano 2 找到对应的端口对应的PID 输入指令找到对应的进程 tasklist findstr 7676 7676表示pid 3 杀掉该进程 再次启动就O
  • 爬虫实例十二 沪深证券股票全站数据爬取

    先上代码 import requests from lxml import etree import openpyxl import time import random 新建workbook对象 wb openpyxl Workbook
  • SQLLite创建数据表

    SQLIteTest cpp 此文件包含 main 函数 程序执行将在此处开始并结束 pragma warning disable 4996 include