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

数据库概念介绍

数据库安装

  • 首先将本地的三个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里面要把表头去掉,表结构如下:
    在这里插入图片描述

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

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

相关文章

My个人网页。

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>花花的个人网页</title> <style>bod…

Github 2024-02-25开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-25统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2TypeScript项目2非开发语言项目1HTML项目1C项目1Dart项目1 Python - 100天…

【OnlyOffice】 桌面应用编辑器,版本8.0已发布,PDF表单、RTL支持、Moodle集成、本地界面主题

ONLYOFFICE桌面编辑器v8.0是一款功能强大、易于使用的办公软件&#xff0c;适用于个人用户、企业团队和教育机构&#xff0c;帮助他们高效地处理文档工作并实现协作。无论是在Windows、macOS还是Linux平台上&#xff0c;ONLYOFFICE都能提供无缝的编辑和共享体验。 目录 ONLYOFF…

Stable Diffusion 模型分享:【Checkpoint】YesMix(动漫、2.5D)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四下载地址模型介绍 条目内容类型大模型基础模型SD 1.5来源

完全分布式运行模式

完全分布式运行模式 分析&#xff1a;之前已经配置完成 ​ 1&#xff09;准备3台客户机&#xff08;关闭防火墙、静态ip、主机名称&#xff09; ​ 2&#xff09;安装JDK ​ 3&#xff09;配置环境变量 ​ 4&#xff09;安装Hadoop ​ 5&#xff09;配置环境变量 ​ 6&am…

Qt开发 入门

Qt开发 入门 Qt Hello World程序 使用"按钮”实现 纯代码方式实现 &#xff08;1&#xff09;创建工程 剩下的直接下一步即可 &#xff08;2&#xff09;编写代码&#xff0c;widget.cpp #include "widget.h" #include "ui_widget.h"#include &…

Sui在AIBC Eurasia奖项评选中被评为2024年度最佳区块链解决方案

自2023年主网上线以来&#xff0c;经历了爆炸性增长的Layer1区块链Sui在2月25–27日迪拜举办的第二届AIBC Eurasia活动中获得“2024最佳区块链解决方案奖”&#xff08;Best Real World Application Award 2024&#xff09;。这个盛大的活动以世界级的参与者和往届获奖者而闻名…

MATLAB中的makeweight函数

W makeweight(dcgain,[freq,mag],hfgain) W makeweight(dcgain,[freq,mag],hfgain,Ts) W makeweight(dcgain,[freq,mag],hfgain,Ts,N) W makeweight(dcgain,wc,hfgain,___) W makeweight(dcgain,wc,hfgain&#xff0c;___)表示增益交叉频率wc。该语法相当于将…

华为大数据平台-FusionInsight MRS

1、产品定位 (1) 关于华为的大数据平台&#xff0c;本人之前用过FusionInsight HD版本&#xff0c;近期也在用MRS结合MPP和治理平台做湖仓一体的开发&#xff0c;其实MRS是在HD基础上进行的升级、改版&#xff0c;MRS是集成一些开源的大数据组件&#xff0c;有自己的运维和安全…

【已解决】用ArcGIS处理过的数据在QGIS中打开发生偏移怎么办?| 数据在ArcGIS中打开位置正常,在QGIS中偏移

1. 问题描述 栅格或者矢量数据用ArcGIS打开时位置正确&#xff08;可以和其他数据对应上&#xff09;。但是用QGIS打开后发现位置不对 2. 问题的原因 因为该数据用了ArcGIS自定义的坐标系&#xff0c;QGIS不支持&#xff0c;识别有误。因此在数据QGIS中的坐标系参数有误&a…

4. client-go 编程式交互

Kubernetes 系统使用 client-go 作为 Go 语言的官方编程式交互客户端库&#xff0c;提供对 Kubernetes API Server 服务的交互访问。Kubernetes 的源码中已经集成了 client-go 的源码&#xff0c;无须单独下载。client-go 源码路径为 vendor/k8s.io/client-go。 开发者经常使用…

Mistral发布语言大模型Mistral Large;法国新星Mistral挑战 OpenAI 霸主地位

&#x1f989; AI新闻 &#x1f680; Mistral发布语言大模型Mistral Large 摘要&#xff1a;Mistral Large 是 Mistral AI 公司最新发布的旗舰语言模型&#xff0c;具备顶尖水平的推理能力。它主要被设计用于处理复杂的多语言推理任务&#xff0c;比如文本理解、转换和代码生…

Flink应用场景

1、介绍 (1) Apache Flink 功能强大&#xff0c;支持开发和运行多种不同种类的应用程序。它的主要特性包括&#xff1a;批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架…

C++:list容器(非原生指针迭代器的实现)

本章是STL容器 list 的模拟实现。 之前已经使用 C语言 对带头双向循环链表 进行实现&#xff0c;详见数据结构: 线性表(带头双向循环链表实现), 相较于之前的实现&#xff0c;C 下多了对迭代器以及模板等相关语法特性。下面将着重讲解这些新知识。 文章目录 一. list 的基本框架…

新火种AI|微软扶持下一个OpenAI?Mistral AI新模型对标GPT-4,上线即挤爆

作者&#xff1a;一号 编辑&#xff1a;美美 OpenAI的大金主微软&#xff0c;还想缔造“下一个OpenAI”。 周一晚间&#xff0c;成立仅9个月的Mistral AI正式发布了最强力的旗舰模型Mistral Large。和此前他们所推出的一系列模型不同&#xff0c;Mistral AI本次发布的版本性…

c语言经典测试题7

1.题1 int main() {int count 0;int x -1;while (x){count;x x >> 1;}printf("%d", count);return 0; } 上述代码的运行结果是什么呢&#xff1f; 我们来分析一下&#xff1a;我们知道在vs中右移操作符的规则是&#xff0c;右边抛弃&#xff0c;左边由符…

什么是智能合约

前言&#xff1a;在介绍智能合约的前提下&#xff0c;需要先介绍一下区块链 一.什么是区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本&#xff0c;具有下列典型特征&#xff1a; 去中心化&#xff1a;简单来说&#xff0c;在网络上一个或多个服务器瘫…

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样&#xff0c;就看第二个维度的数值&#xff0c;今天才知道&#xff0c;它是只看最后一个维度的数值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

GCN,R-GCN,岭回归,SVR,随机森林,Adaboost

图卷积神经网络(graph convolutional network, GCN),它将卷积神经网络拓展到图结构形式 中&#xff0c;GCN因可以很好地融合图结构数据的结构特征和属性特征并且有较好的组合泛化能力而被广泛使用。 关系图卷积神经网络(relational-graph convolutional network, R-GCN)&#…

排序算法2:选择排序、堆排序、归并排序

选择排序&#xff1a;简单选择排序、堆排序 一、简单选择排序 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef int ElemType; typedef struct{ElemType *elem; //整形指针,申请的堆空间的起始地址存入elem int TableLen; //存储动态数组…