当前位置: 首页 > news >正文

网络编程(学习)2024.9.4

目录

数据库的概念

数据库分类

常用的数据库

sqlite

sqlite基础

sqlite有以下特性

sqlite3相关函数

sqlite3案例

数据库的概念

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库分类

常用的数据库

大型数据库 :Oracle

中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 

小型数据库 :mySQL是一个小型关系型数据库管理系统。开放源码 

sqlite

sqlite基础

SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。

sqlite有以下特性

零配置一无需安装和管理配置; 
储存在单一磁盘文件中的一个完整的数据库; 
数据库文件可以在不同字节顺序的机器间自由共享; 
支持数据库大小至2TB(1024G = 1TB);足够小,全部源码大致3万行c代码,250KB; 
比目前流行的大多数数据库对数据的操作要快;


在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库 

sqlite3相关函数

头文件:#include <sqlite3.h>
编译:gcc sqlite1.c -lsqlite3

1.int sqlite3_open(char  *path, sqlite3 **db);

功能:打开sqlite数据库,如果数据库不存在则创建它
        path: 数据库文件路径
        db: 指向sqlite句柄的指针
返回值:成功返回SQLITE_OK,失败返回错误码(非零值)

2.int sqlite3_close(sqlite3 *db);

功能:关闭sqlite数据库
返回值:成功返回SQLITE_OK,失败返回错误码

返回值:返回错误信息

3.int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**),  void *arg, char **errmsg );

功能:执行SQL操作
        db:数据库句柄
        sql:要执行SQL语句
        callback:回调函数(满足一次条件,调用一次函数,用于查询)再调用查询sql语句的时候使用回调函数打印查询到的数据
        arg:传递给回调函数的参数
        errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码

回调函数:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);

功能:select:每找到一条记录自动执行一次回调函数
        para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)
        f_num:记录中包含的字段数目
        f_value:包含每个字段值的指针数组(列值)
        f_name:包含每个字段名称的指针数组(列名)
返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调

4.不使用回调函数执行SQL语句(只用于查询)
int sqlite3_get_table(sqlite3 *db, const  char  *sql, char ***resultp,  int *nrow,  int *ncolumn, char **errmsg);

功能:执行SQL操作
        db:数据库句柄
        sql:SQL语句
        resultp:用来指向sql执行结果的指针
        nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))
        ncolumn:每条记录包含的字段数目
        errmsg:错误信息指针的地址

返回值:成功返回SQLITE_OK,失败返回错误码

5.返回sqlite3定义的错误信息
char *sqlite3_errmsg(sqlite3 *db);

sqlite3案例

#include <sqlite3.h>
#include <stdio.h>// int flag = 0;
// int callback(void *arg, int num, char **shuju, char **biaoti)
// {
//     if (flag == 0)
//     {
//         for (int i = 0; i < num; i++)
//         {
//             printf("%s ", biaoti[i]);
//         }
//         printf("\n");
//         flag = 1;
//     }
//     for (int i = 0; i < num; i++)
//     {
//         printf("%s ", shuju[i]);
//     }
//     printf("\n");//     return 0;
// }int main(int argc, char const *argv[])
{// 1.打开或创建数据库sqlite3 *db = NULL;if (sqlite3_open("./stu.db", &db) != 0){printf("打开或创建数据库失败:%s", sqlite3_errmsg(db));return -1;}printf("打开或创建数据库成功\n");// 2.创建一个表char *errmsg = NULL;if (sqlite3_exec(db, "create table stu(id int primary key,name char,score float);", NULL, NULL, &errmsg) != 0){printf("cteate失败%s\n", errmsg);}printf("创建表成功\n");// 3.向表中插入数据char sql[128];int num;int id;char name[32];float score;printf("请输入要插入学生信息的数量:");scanf("%d", &num);for (int i = 0; i < num; i++){printf("请输入学生的学号 姓名 成绩\n");scanf("%d %s %f", &id, name, &score);sprintf(sql, "insert into stu values(%d,'%s',%f);", id, name, score);if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0){printf("insert失败%s\n", errmsg);sqlite3_close(db);return -1;}printf("sql语句:%s\n", sql);printf("插入数据成功\n");}// 4.查询// 1.使用sqlite3_exec函数// if (sqlite3_exec(db, "select * from stu;", callback, NULL, &errmsg) != 0)// {// printf("select失败%s\n", errmsg);// sqlite3_close(db);// return -1;// }// printf("数据查询成功\n");// 2.使用sqlite3_get_table函数char **Result = NULL;int lie, hang;if (sqlite3_get_table(db, "select * from stu;", &Result, &hang, &lie, &errmsg) != 0){printf("select失败%s\n", errmsg);sqlite3_close(db);return -1;}int k = 0;for (int i = 0; i < hang + 1; i++){for (int j = 0; j < lie; j++){printf("%s ", Result[k++]);}printf("\n");}printf("数据查询成功\n");// 5.关闭数据库sqlite3_close(db);return 0;
}

http://www.mrgr.cn/news/22741.html

相关文章:

  • 打造专业级PPT:用Python-pptx精准编辑图表属性
  • 【Python】PyPandoc:批量文件格式转换
  • 9月9日听IoT讲座
  • stack,queue的模拟实现,deque的模拟实现和小知识点的杂糅
  • PID控制算法(二)
  • 【脊线图】:附Origin详细画图流程
  • 优化销售流程,领先市场趋势!企元数智赠送小程序合规分销系统!
  • 《语文新读写》是知网收录吗?语文新读写编辑部查询
  • How to handle the response OpenAI Text-To-Speech API in Node.js?
  • 基于单片机的盲人智能水杯系统(论文+源码)
  • 声音克隆工具CosyVoice
  • 极狐GiLab 17.3 重点功能解读 升级指南
  • 基于微信小程序+Java+SSM+Vue+MySQL的考研论坛
  • ESP32 UDP 05
  • SpringBoot集成MyBatis-Plus
  • 电商数据API接口|唯品会商品详情数据的接入说明【附测试实例】
  • 并网光伏发电对电网电能质量的影响和治理方案
  • 解决:web of science文献检索点不动,只能用作者检索的情况
  • 还不会数据恢复?试试这4款软件吧!
  • 一、java基础面试题