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  128int 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://xiahunao.cn/news/2814031.html

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

相关文章

Unity开发一个FPS游戏

在之前的文章Unity 3D Input System的使用-CSDN博客中,我介绍了如何用Input System来实现一个FPS游戏的移动控制,这里将进一步完善这个游戏。 以下是游戏的演示效果: fps_demo 添加武器模型 首先是增加主角玩家的武器,我们可以在网上搜索到很多免费的3D资源,例如在以下网…

基于springboot+html实现的衣物捐赠平台

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | thymeleaf | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 注册 03. web页-首页 04. web页-捐赠衣服 05. web页-论坛交流…

【小沐学QT】QT学习之OpenGL开发笔记

文章目录 1、简介2、Qt QOpenGLWidget gl函数3、Qt QOpenGLWidget qt函数4、Qt QOpenGLWindow5、Qt glut6、Qt glfw结语 1、简介 Qt提供了与OpenGL实现集成的支持&#xff0c;使开发人员有机会在更传统的用户界面的同时显示硬件加速的3D图形。 Qt有两种主要的UI开发方…

计算机网络:路由协议

路由协议简介 路由协议是计算机网络中不可或缺的一部分&#xff0c;它们负责确定数据包从源地址到目的地址的最佳路径。想象一下&#xff0c;如果你是一个数据包&#xff0c;路由协议就像是地图或导航工具&#xff0c;指导你如何到达目的地。 目录 路由协议简介 工作原理简化…

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

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

【从零开始学习重要知识点 | 第一篇】快速了解什么是幂等性以及常见解决方案

前言&#xff1a; 当我们在设计和实现分布式系统时&#xff0c;幂等性是一个非常重要的概念。幂等性可以简单地理解为&#xff1a;对于同一操作&#xff0c;不论执行多少次&#xff0c;产生的影响都是相同的。这个概念在分布式系统中非常重要&#xff0c;因为在这种环境下&…

Adobe Premiere Pro 引入AI提升对话音质;Stable Diffusion:AI图像生成简介

&#x1f989; AI新闻 &#x1f680; Adobe Premiere Pro 引入AI提升对话音质 摘要&#xff1a;Adobe公司最近发布了一项更新&#xff0c;为其视频编辑软件Premiere Pro&#xff08;22.4版本&#xff09;新增了一个名为Enhance Speech的功能&#xff0c;通过AI技术自动调节对…

GSVA -- 学习记录

文章目录 1.原理简介2. 注意事项3. 功能实现代码实现部分 4.可视化5.与GSEA比较 1.原理简介 Gene Set Variation Analysis (GSVA) 基因集变异分析。可以简单认为是样本数据中的基因根据表达量排序后形成了一个rank list&#xff0c;这个rank list 与 预设的gene sets&#xff…

Nginx反向代理ip透传与负载均衡

前言 上篇介绍了nginx服务器单向代理和动静分离等相关内容&#xff0c;可参考Nginx重写功能和反向代理-CSDN博客&#xff0c;这里就ip透传和负载均衡对nginx反向代理做进一步了解。 目录 一、客户端ip透传 1. 概述 2. 一级代理 2.1 图示 2.2 操作过程 3. 二级代理 3.…

maven的私服

什么是maven的私服就是把自己写的工具类共享给别人这样大家都能用到你写的工具类不用重复写提示效率 maven的上传与下载示意图 1.什么是发行版本&#xff1f;发行版本指定的是功能稳定可以共大家使用的版本 2.什么是快照版本&#xff1f;快照版本指定的是指正在开发的版本 3…

Spring与SpringBoot入门

Spring入门 要使用Spring最起码需要引入两个依赖: <!-- Spring Core&#xff08;核心&#xff09; --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.20</version>…

PostgreSQL中int类型达到上限的一些处理方案

使用int类型作为表的主键在pg中是很常见的情况&#xff0c;但是pg中int类型的范围在-2147483648到2147483647&#xff0c;最大只有21亿&#xff0c;这个在一些大表中很容易就会达到上限。一旦达到上限&#xff0c;那么表中便没办法在插入数据了&#xff0c;这个将会是很严重的问…

网络安全之内容安全

内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 IAE引擎 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行识别。&#xff08;应用…

Unity2023.1.19_Embedded Browser-ZFBrowser插件

Unity2023.1.19_Embedded Browser-ZFBrowser插件 官方说明文档可以仔细看一下&#xff1a; ZFBrowser Documentation (zenfulcrum.com) ZFBrowser插件的简单直接使用&#xff1a; 导入插件包资源&#xff0c;遵循常规导包原则即可&#xff1b; 抓取包文件夹下的预制体组件…

【Docker】安装及相关的命令

目录 一 Docker简介 1.1 是什么 1.2 优缺点 1.3 应用场景 1.4 安装 二 命令 2.1 Docker基本命令 2.2 Docker镜像命令 2.3 Docker容器命令 一 Docker简介 1.1 是什么 Docker是一个开源的应用容器引擎&#xff0c;它基于Go语言实现&#xff0c;并利用操作系统本身已有的…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下&#xff0c;POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

禁止safari浏览器网页双击缩放功能

普通浏览器 普通浏览器&#xff0c;只需要增加meta标签禁止缩放功能就行了 <meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0;" name"viewport" /> user-scalableno或0 //禁止双指缩放页面initial-scale1.0…

【Java设计模式】四、适配器模式

文章目录 1、适配器模式2、举例 1、适配器模式 适配器模式Adapter Pattern&#xff0c;是做为两个不兼容的接口之间的桥梁目的是将一个类的接口转换成客户希望的另外一个接口适配器模式可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 最后&#xff0c;适配器…

CSS3技巧37:JS+CSS3 制作旋转图片墙

开学了就好忙啊&#xff0c;Three.js 学习的进度很慢。。。 备课备课才是王道。 更一篇 JS CSS3 的内容&#xff0c;做一个图片墙。 其核心要点是把图片摆成这个样子&#xff1a; 看上去这个布局很复杂&#xff0c;其实很简单。其思路是&#xff1a; 所有图片放在一个 div.…

人工智能之Tensorflow程序结构

TensorFlow作为分布式机器学习平台&#xff0c;主要架构如下&#xff1a; 网络层&#xff1a;远程过程调用(gRPC)和远程直接数据存取(RDMA)作为网络层&#xff0c;主要负责传递神经网络算法参数。 设备层&#xff1a;CPU、GPU等设备&#xff0c;主要负责神经网络算法中具体的运…