Linux中数据库sqlite3的基本命令的使用

news2025/1/23 6:14:56

数据库概念介绍

数据库安装

  • 首先将本地的三个sqlite3安装包移动到共享文件夹然后在移动到自己创建的文件夹中如下:
    在这里插入图片描述
  • 然后对安装包进行解压如下:
    sudo dpkg -i  *.deb
    
  • 检查是否安装成功
    sqlite
    

数据库命令

  • 系统命令 , 都以’.'开头
    .exit
    .quit
    .table 查看表
    .schema 查看表的结构
  • sql语句, 都以‘;’结尾
    1-- 创建一张表
    create table stuinfo(id integer, name text, age integer, score float);
    2-- 插入一条记录
    insert into stuinfo values(1001, ‘zhangsan’, 18, 80);
    insert into stuinfo (id, name, score) values(1002, ‘lisi’, 90);
    3-- 查看数据库记录
    select * from stuinfo;
    select * from stuinfo where score = 80;
    select * from stuinfo where score = 80 and name= ‘zhangsan’;
    select * from stuinfo where score = 80 or name=‘wangwu’;
    select name,score from stuinfo; 查询指定的字段
    select * from stuinfo where score >= 85 and score < 90;
    4-- 删除一条记录
    delete from stuinfo where id=1003 and name=‘zhangsan’;
    5-- 更新一条记录
    update stuinfo set age=20 where id=1003;
    update stuinfo set age=30, score = 82 where id=1003;
    6-- 删除一张表
    drop table stuinfo;
    7-- 增加一列
    alter table stuinfo add column sex char;
    8-- 删除一列
    create table stu as select id, name, score from stuinfo;
    drop table stuinfo;
    alter table stu rename to stuinfo;
  • 数据库设置主键:
    create table info(id integer primary key autoincrement, name vchar);
  • sqlite3函数接口
  • int sqlite3_open(
    const char filename, / Database filename (UTF-8) */
    sqlite3 *ppDb / OUT: SQLite db handle */
    );
    • 功能:打开数据库
    • 参数:filename 数据库名称
      ppdb 数据库句柄
    • 返回值:成功为0 SQLITE_OK ,出错 错误码
      int sqlite3_close(sqlite3* db);
    • 功能:关闭数据库
    • 参数:
    • 返回值:成功为0 SQLITE_OK ,出错 错误码
      const char sqlite3_errmsg(sqlite3db);
    • 功能:得到错误信息的描述
    • int sqlite3_exec(
      sqlite3* db, /* An open database /
      const char sql, / SQL to be evaluated /
      int (callback)(void arg,int,char
      ,char**), /* Callback function /
      void * arg, /
      1st argument to callback */
      char *errmsg / Error msg written here */
      );
  • 功能:执行一条sql语句
  • 参数:db 数据库句柄
    sql sql语句
    callback 回调函数,只有在查询时,才传参
    arg 为回调函数传递参数
    errmsg 错误消息
  • 返回值:成功 SQLITE_OK
  • 查询回调函数:
    int (callback)(void arg,int ncolumns ,char** f_value,char** f_name), /* Callback function */
  • 功能:查询语句执行之后,会回调此函数
  • 参数:arg 接收sqlite3_exec 传递来的参数
    ncolumns 列数
    f_value 列的值得地址
    f_name 列的名称
  • 返回值:0,
  • int sqlite3_get_table(
    sqlite3 db, / An open database */
    const char zSql, / SQL to be evaluated */
    char **pazResult, / Results of the query */
    int pnRow, / Number of result rows written here */
    int pnColumn, / Number of result columns written here */
    char *pzErrmsg / Error msg written here */
    );
    void sqlite3_free_table(char **result);
    查询
  • 学生管理系统案例代码如下:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sqlite3.h>
    
    #define  DATABASE  "student.db"
    #define  N  128
    
    int do_insert(sqlite3 *db)
    {
    	int id;
    	char name[32] = {};
    	char sex;
    	int score;
    	char sql[N] = {};
    	char *errmsg;
    
    	printf("Input id:");
    	scanf("%d", &id);
    
    	printf("Input name:");
    	scanf("%s", name);
    	getchar();
    
    	printf("Input sex:");
    	scanf("%c", &sex);
    
    	printf("Input score:");
    	scanf("%d", &score);
    
    	sprintf(sql, "insert into stu values(%d, '%s', '%c', %d)", id, name, sex, score);
    
    	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    	{
    		printf("%s\n", errmsg);
    	}
    	else
    	{
    		printf("Insert done.\n");
    	}
    
    	return 0;
    }
    int do_delete(sqlite3 *db)
    {
    	int id;
    	char sql[N] = {};
    	char *errmsg;
    
    	printf("Input id:");
    	scanf("%d", &id);
    
    	sprintf(sql, "delete from stu where id = %d", id);
    
    	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    	{
    		printf("%s\n", errmsg);
    	}
    	else
    	{
    		printf("Delete done.\n");
    	}
    
    	return 0;
    }
    int do_update(sqlite3 *db)
    {
    	int id;
    	char sql[N] = {};
    	char name[32] = "zhangsan";
    	char *errmsg;
    
    	printf("Input id:");
    	scanf("%d", &id);
    
    	sprintf(sql, "update stu set name='%s' where id=%d", name,id);
    
    	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    	{
    		printf("%s\n", errmsg);
    	}
    	else
    	{
    		printf("update done.\n");
    	}
    
    	return 0;
    }
    
    
    int callback(void *arg, int f_num, char ** f_value, char ** f_name)
    {
    	int i = 0;
    
    	for(i = 0; i < f_num; i++)
    	{
    	//	printf("%-8s %s", f_value[i], f_name[i]);
    		printf("%-8s", f_value[i]);
    	}
    
    	printf("++++++++++++++++++++++");
    	putchar(10);
    
    	return 0;
    }
    
    int do_query(sqlite3 *db)
    {
    	char *errmsg;
    	char sql[N] = "select count(*) from stu where name='zhangsan';";
    
    	if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)
    	{
    		printf("%s", errmsg);
    	}
    	else
    	{
    		printf("select done.\n");
    	}
    }
    
    int do_query1(sqlite3 *db)
    {
    	char *errmsg;
    	char ** resultp;
    	int nrow;
    	int ncolumn;
    
    	if(sqlite3_get_table(db, "select * from stu", &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
    	{
    		printf("%s\n", errmsg);
    		return -1;
    	}
    	else
    	{
    		printf("query done.\n");
    	}
    
    	int i = 0;
    	int j = 0;
    	int index = ncolumn;
    
    	for(j = 0; j < ncolumn; j++)
    	{
    		printf("%-10s ", resultp[j]);
    	}
    	putchar(10);
    
    	for(i = 0; i < nrow; i++)
    	{
    		for(j = 0; j < ncolumn; j++)
    		{
    			printf("%-10s ", resultp[index++]);
    		}
    		putchar(10);
    	}
    
    return 0;
    }
    
    int main(int argc, const char *argv[])
    {
    	sqlite3 *db;
    	char *errmsg;
    	int n;
    	
    	if(sqlite3_open(DATABASE, &db) != SQLITE_OK)
    	{
    		printf("%s\n", sqlite3_errmsg(db));
    		return -1;
    	}
    	else
    	{
    		printf("open DATABASE success.\n");
    	}
    
    	if(sqlite3_exec(db, "create table if not exists stu(id int, name char , sex char , score int);",
    				NULL, NULL, &errmsg) != SQLITE_OK)
    	{
    		printf("%s\n", errmsg);
    	}
    	else
    	{
    		printf("Create or open table success.\n");
    	}
    
    	while(1)
    	{
    		printf("********************************************\n");
    		printf("1: insert  2:query  3:delete 4:update 5:quit\n");
    		printf("********************************************\n");
    		printf("Please select:");
    		scanf("%d", &n);
    
    		switch(n)
    		{
    			case 1:
    				do_insert(db);
    				break;
    			case 2:
    				do_query(db);
    			//	do_query1(db);
    				break;
    			case 3:
    				do_delete(db);
    				break;
    			case 4:
    				do_update(db);
    				break;
    			case 5:
    				printf("main exit.\n");
    				sqlite3_close(db);
    				exit(0);
    				break;
    			default :
    				printf("Invalid data n.\n");
    		}
    
    	}
    
    
    
    
    	return 0;
    }
    
    注:query1中的话为啥index++,因为API里面要把表头去掉,表结构如下:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表

Excel导出 EasyExcel官方文档 官方文档本身写的非常详细&#xff0c;我就是根据官方文档内的写Excel里web中的写实现的导出 后端 对象 需要写一个实体类 其中涉及到一些用到的EasyExcel的注解 ColumnWidth(20) 列宽设为20&#xff0c;自定义的&#xff0c;放在实体类上面是…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘报错解决

安装labelme出错了 根据爆栈的提示信息&#xff0c;我在cmd运行以下命令之后一切正常了&#xff0c;解决了问题&#xff01; pip install urllib31.26.6参考网址&#xff1a;ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compile…

智慧物流之道:数据可视化引领全局监控

在智慧物流的背景下&#xff0c;数据可视化催生了物流管理的全新范式。首先&#xff0c;通过数据可视化&#xff0c;物流企业可以实现对整个供应链的全景式监控。下面我就可以可视化从业者的角度&#xff0c;简单聊聊这个话题。 首先&#xff0c;图表和地图的直观展示使决策者能…

Rust使用calamine读取excel文件,Rust使用rust_xlsxwriter写入excel文件

Rust使用calamine读取已存在的test.xlsx文件全部数据&#xff0c;还读取指定单元格数据&#xff1b;Rust使用rust_xlsxwriter创建新的output.xlsx文件&#xff0c;并写入数据到指定单元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust读取excel文件*/ use cala…

mac/windows git ssh 配置多平台账号(入门篇)

目录 引子多账号多平台配置git一、.ssh文件夹路径1.1 mac 系统1.2 windows 系统 二、生成new ssh2.1 mac系统2.2 windows 系统 三、配置 config四、验证五、用ssh方式拉取远程仓库代码 引子 push代码到github仓库时&#xff0c;提示报错。 Push failed Remote: Support for pa…

力扣5. 最长回文子串(双指针、动态规划)

Problem: 5. 最长回文子串 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;双指针 1.我们利用双指针从中间向两边扩散来判断是否为回文串&#xff0c;则关键是找到以s[i]为中心的回文串&#xff1b; 2.我们编写一个函数string palindrome(string &s, in…

project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, string

家人们&#xff0c;遇到了一个新的报错 于是从网上找了各种方法&#xff0c;有说把开发者工具关闭重启的&#xff0c;有说开发者工具下载重新下载的&#xff0c;有说开发者工具路径安装得在C盘的&#xff0c;均没有效果 解决方法&#xff1a; 1、运行项目&#xff0c;在开发者…

基于springboot的4S店车辆管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件 #知识点&#xff1a; 1、PHP-MYSQL-SQL注入-二次注入&利用条件 2、PHP-MYSQL-SQL注入-堆叠注入&利用条件 3、PHP-MYSQL-SQL注入-带外注入&利用条件 演示案例&#xff1a…

分布式锁的应用与疑惑

文章目录 一、为什么需要用分布式锁二、Redis实现分布式锁三、Zookeeper实现分布式锁 一、为什么需要用分布式锁 集群下&#xff0c;普通的锁&#xff0c;无法解决问题 集群下&#xff0c;保证安全需要使用分布式锁 二、Redis实现分布式锁 Redisson内部封装的RedLock实现分…

Linux系统--nginx

1.Nginx(engine-x)由俄罗斯开发者Igor Sysoev开发&#xff0c;最初于2004年发布&#xff0c;主要用于解决C10K问题&#xff08;即同时处理上万个并发连接&#xff09;。其设计目标是实现高并发、低延迟以及高效利用硬件资源。Nginx不仅是一个静态内容服务器&#xff0c;还支持动…

Bert-as-service 学习

pip3 install --user --upgrade tensorflow 安装遇到的问题如下&#xff1a; pip3 install --user --upgrade tensorflow 1052 pip uninstall protobuf 1053 pip3 uninstall protobuf 1054 pip3 install protobuf3.20.* 1055 pip3 install open-clip-torch2.8.2 1…

SQL注入漏洞解析-less-8(布尔盲注)

我们来看一下第八关 当我们进行尝试时&#xff0c;他只有You are in...........或者没有显示。 他只有对和错显示&#xff0c;那我们只能用对或者错误来猜他这个数据库 ?id1%27%20and%20ascii(substr(database(),1,1))>114-- ?id1%27%20and%20ascii(substr(database(),1,…

解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发

先来看最后的效果 问题 用过国际化i18n的朋友都知道&#xff0c;天下苦国际化久矣&#xff0c;尤其是中文为母语的开发者&#xff0c;在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码&#xff0c;根本不知道自己写了啥 &#xff08;如上图&#xff0c;你看得出…

飞天使-学以致用-devops知识点1-安装gitlabharbor

文章目录 rpm 安装gitlab页面配置配置secretsecret 查看信息-chatgpt回复 为项目配置webhook,等jenkins部署完毕后在配置卸载 harbor配置secret所有k8s集群节点安装信任 http rpm 安装gitlab # 下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitla…

HP笔记本电脑如何恢复出厂设置?这里提供几种方法

要恢复出厂设置Windows 11或10的HP笔记本电脑,你可以使用操作系统的标准方法。如果你运行的是早期版本,你可以使用HP提供的单独程序清除计算机并重新安装操作系统。 恢复出厂设置运行Windows 11的HP笔记本电脑​ 所有Windows 11计算机都有一个名为“重置此电脑”的功能,可…

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意&#xff1a; ①only a…

【k8s配置与存储--持久化存储(PV、PVC、存储类)】

1、PV与PVC 介绍 持久卷&#xff08;PersistentVolume&#xff0c;PV&#xff09; 是集群中的一块存储&#xff0c;可以由管理员事先制备&#xff0c; 或者使用存储类&#xff08;Storage Class&#xff09;来动态制备。 持久卷是集群资源&#xff0c;就像节点也是集群资源一样…

13.云原生之常用研发中间件部署

云原生专栏大纲 文章目录 mysql主从集群部署mysql高可用集群高可用互为主从架构互为主从架构如何实现主主复制中若是两台master上同时出现写操作可能会出现的问题该架构是否存在问题&#xff1f; heml部署mysql高可用集群 nacos集群部署官网文档部署nacoshelm部署nacos redis集…

Windows系统x86机器安装(麒麟、统信)ARM系统详细教程

本次介绍在window系统x86机器上安装国产系统 arm 系统的详细教程。 注:ubuntu 的arm系统安装是一样的流程。 1.安装环境准备。 首先,你得有台电脑,配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决win7补丁更新问题)。…