C语言操作SQL数据库

1.打开/创建数据库的C语言接口

  • int sqlite3_open(const char *filename, sqlite3 **ppDb)
  • 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
  • int sqlite3_close(sqlite3*)
  • 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完 成。
  • 如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。
  • const char *sqlite3_errmsg(sqlite3*);通常用来返回最近调用的API接口的错误信息
  • int sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.
下面的 C 代码段显示了如何使用 sqlite3_open 连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
#include <stdio.h>
#include <sqlite3.h>

int main(int argc,char **argv)
{
	sqlite3* pd;
	int ret;
	if(argc < 2){
		printf("ought to %s xxx.db\n",argv[0]);
		return -1;
	}
	if((ret=sqlite3_open(argv[1],&pd))==SQLITE_OK){//第二个参数是一个二级指针
		printf("open succeed %s\n",argv[1]);
	}else{
		printf("error:%s  ret = %d\n",sqlite3_errmsg(pd),ret);

	}
	sqlite3_close(pd);
	printf("close");
}

执行结果,这里显示打开了数据库

2.创建表的C接口

1、函数介绍

sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
  • sqlite3 是打开的数据库对象
  • sqlite_callback 是一个回调
  • data 作为回调函数的第一个参数
  • errmsg 将被返回用来获取程序生成的任何错误
  • sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止

数据库中有n条数据回调函数就会调用n次,注意return 0;得返回0,经过验证返回其他的只会调用一次

sqlite3_exec的最后一个参数errmsg返回的是错误信息,这里我们直接传递一个char型的指针,经过验证这里不会发生段错误,sqlite3_exec函数会自动给空指针或野指针分配内存空间。

 2、回调函数介绍

typedef int (*sqlite3_callback)(void*,int,char**, char**);
函数原型
int callback ( void * arg , int column_size , char * column_value [], char * column_name [])
参数分析:
  • void *arg:是sqlite3_exec函数的第四个参数
  • column_size:数据库的字段 数
  • column_value[]:列的值
  • column_name:字段名字

函数原型也可以是

typedef int(*sqlite_callback)(void* para, int columenCount, char** columnValue, char** columnName);

  • para : 由sqlite3_exec传入的参数指针,或者说是指针参数
  • columnCount: 查询到的这一条记录由多少个字段(多少列)
  • columnValue : 该参数是双指针,查询出来的数据都保存在这里,它是一个1维数组,每一个元素都是一个char*,是一个字段内容,所以这个参数就可以不是单字节,而是可以为字符串等不定长度的数值,用字符串表示,以’\0’结尾
  • columnName : 该参数是双指针,语columnValue是对应的,表示这个字段的字段名称

这里使用二级指针上面使用指针数据,其实都一样,网上说使用这个回调函数必须static的,但是在C语言中我尝试不是也可以。

代码示例:查询数据库表中的内容

#include <stdio.h>
#include <sqlite3.h>
//typedef int(*sqlite_callback)(void* para, int columenCount, char** columnValue, char** columnName);
int callback(void *para,int columenCount,char** columnValue,char** columnName)
{	
	printf("para = %s\n",(char*)para);
	for(int i =0;i<columenCount;i++){
		printf("%-8s",columnName[i]);
	}
	printf("\n");
	for(int i =0;i<columenCount;i++){
		printf("%-8s",columnValue[i]);
	}
	printf("\n");
	
	return 0;
}
int main(int argc,char **argv)
{
	sqlite3* pd;
	char *p = "happy";
	int ret;
	if(argc < 2){
		printf("ought to %s xxx.db\n",argv[0]);
		return -1;
	}
	if((ret=sqlite3_open(argv[1],&pd))==SQLITE_OK){//第二个参数是一个二级指针
		printf("open succeed %s\n",argv[1]);
	}else{
		printf("error:%s  ret = %d\n",sqlite3_errmsg(pd),ret);

	}
	//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
	sqlite3_exec(pd,"select * from stu;",callback,p,NULL);//最后一个参数可以设置为NULL

	sqlite3_close(pd);
	printf("close");
}

 运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/519128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java(7)之跳转语句

1、break跳转语句 说到break其实也不是跳转&#xff0c;它更像是一个终结语句&#xff0c;常用于在循环语句需要停止出现例如 while&#xff08;&#xff09;{ if&#xff08;&#xff09;{ break&#xff1b; }} 这样的形式或者 switch&#xff08;&#xff09;{ case…

水离子雾化壁炉如何实现火焰的虚实变化?

水离子雾化壁炉通过调节水雾的密度和电子控制器的设置来实现火焰的虚实变化。具体实现方法如下&#xff1a; 调节水雾密度&#xff1a; 超声波振动器可以调节水分子的雾化效果&#xff0c;从而控制水雾的密度。增加水雾的密度会使火焰看起来更实&#xff0c;而减少水雾的密度则…

Pytoch安装记录

使用pycharm 1、CUDA的安装 官网&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 选择对应的版本 选择对应的版本进行下载&#xff1a; 有3个多G cuda的安装需要注意&#xff0c;如果没有安装vs&#xff0c;则需要选择自定义安装&#xff0c;在自定义的安装中取消 安…

HTML常用标签-最基础的标签

从本篇开始&#xff0c;我们围绕HTML原生标签开始&#xff0c;围绕整个前端三剑客进行&#xff0c;将进行一个大致的介绍和案例展示&#xff0c;没有啥技术含量&#xff0c;只是把学习前端的时候&#xff0c;案例全部展示出来&#xff0c;作为一个实时记录&#xff0c;或者说回…

《QT实用小工具·十三》FlatUI辅助类之各种炫酷的控件集合

1、概述 源码放在文章末尾 FlatUI辅助类之各种炫酷的控件集合 按钮样式设置。文本框样式设置。进度条样式。滑块条样式。单选框样式。滚动条样式。可自由设置对象的高度宽度大小等。自带默认参数值。 下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; #ifnd…

c/c++ | socket tcp client server

突然想着&#xff0c;花一个socket tcp 客户-服务通信 这应该是很经典的流程了吧 感觉还是要训练这种随手画图的能力&#xff0c;毕竟文字的描述还是不及图片强烈 参考01

c# wpf style 简单试验

1.概要 wpf style 用来控制控件的样式 2.代码 <Window x:Class"WpfApp2.Window5"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…

测开——Java、python、SQL、数据结构面试题整理

一、Java 1.Java中finally、final、finalize的区别 1.性质不同 &#xff08;1&#xff09;final为关键字; &#xff08;2&#xff09;finalize()为方法; &#xff08;3&#xff09;finally为为区块标志,用于try语句中; 2. 作用 &#xff08;1&#xff09;final为用于标识…

springboot项目引入swagger

1.引入依赖 创建项目后&#xff0c;在 pom.xml 文件中引入 Swagger3 的相关依赖。回忆一下&#xff0c;我们集成 Swagger2 时&#xff0c;引入的依赖如下&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2&…

“人性化设计”技术概要

本文是由《埃森哲技术愿景 2024&#xff1a;“人性化设计”技术将通过提高生产力和创造力来重塑行业并重新定义领导者》这个文章来翻译解读的。原文地址如下&#xff0c;大家可以自行下载&#xff1a; 下载地址 其实看到这篇文章的时候&#xff0c;联想到这些年机器人的市场发展…

51之定时器与中断系统

目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先&#xff0c;我们需要来了解一下什么…

C++:赋值运算符(17)

赋值也就是将后面的值赋值给变量&#xff0c;这里最常用的就是 &#xff0c;a1那么a就是1&#xff0c;此外还包含以下的赋值运算 等于int a 1; a10 a10加等于int a 1; a1;a2-减等于int a 1; a-1;a0*乘等于int a 2; a*5;a10/除等于int a 10; a/2;a5%模等于int a 10; a%…

佑雅的小布谷数据平台获取token如何实现

小博股数据开放平台是面向全部用户的股票数据开放平台&#xff0c;通过调用接口可以获取股票的历史数据。在调用之前需要进行下面的准备工作&#xff0c;第一步注册&#xff1a; 用户在注册之后&#xff0c;登录点击头像进入个人中心&#xff0c;在功能模块的最下方有一个创建应…

nodejs实现TCP端口转发并截包的小工具

近期我正致力于开发一个基于 Go-CQHTTP 的 QQ 机器人应用程序项目&#xff0c;该项目现已成功实现了 Go-CQHTTP 的容器化部署&#xff0c;利用 Docker 技术确保其运行环境的一致性与便捷性。随着项目推进&#xff0c;接下来的工作重心转向部署配套的签名服务器&#xff08;qsig…

达梦disql登录数据库显示“未连接”

问题&#xff1a;达梦数据库在使用disql登录时&#xff0c;显示“未连接”。 指定了IP和端口号还是连接异常。 [dmdbatest ~]$ disql sysdba/Dameng123 disql V8 SQL> select * from v$instances; 未连接 SQL> exit [dmdbatest ~]$ disql sysdba/Dameng123localhost:52…

猜数字游戏

猜数字游戏 前些年清北的博士到中小学任教&#xff0c;曾经成为新闻热点。有一种声音是&#xff0c;国家为了培养这些博士生&#xff0c;提供了很好的资源和机会&#xff0c;他们本来应该做科学研究的&#xff0c;却去教中小学生&#xff0c;把学到的东西浪费了。我倒是觉得&a…

Poster:DoS 攻击的纵向分析

ABSTRACT 拒绝服务 (DoS) 攻击已成为当今数字世界中经常发生的情况。通过下载和僵尸网络服务提供易于使用的攻击软件&#xff0c;这些软件可以在暗网中廉价租用&#xff0c;使对手能够进行此类攻击&#xff0c;而无需全面了解这些技术。为了调查这一威胁&#xff0c;我们对 201…

申请代码签名证书详解

目录 那么什么是代码签名证书呢&#xff1f; 那么为什么非要部署代码签名不可呢&#xff1f; 代码签名证书是如何让软件“安全化”呢&#xff1f; 不同类型的代码签名证书&#xff1a; OV代码签名证书和EV代码签名证书的区别 背景&#xff1a;代码签名证书是使得软件开发商…

chabot项目介绍

项目介绍 整体的目录如下所示&#xff1a; 上述的项目结构中出了model是必须的外&#xff0c;其他的都可以根据训练的代码参数传入进行调整&#xff0c;有些不需要一定存在data train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象&#xff0c;list的每条数据表…