SQlite3数据库相关相关命令

目录

    • 1)系统命令 以 '.' 开头
    • 2)sql语句 以 ';'结尾
      • 1. 创建表格
      • 2. 插入数据
      • 3. 查看数据库记录
      • 4. 删除信息
      • 5. 更新数据
      • 6. 增加一列
      • 7. 删除一列 (sqlite3 不支持直接删除一列)
    • 3)sqlite3 数据库 C语言 API
      • 1. 打开数据库
      • 2. 关闭数据库
      • 3. 错误信息
      • 4. 执行一条sql语句
      • 5. 查询回调函数
      • 6. 查询函数
    • 学生信息实例

1)系统命令 以 ‘.’ 开头

.help 帮助手册
.exit  退出
.table  查看当前数据库的有的表格名
.databases 
.schema  查看表的结构属性

2)sql语句 以 ';'结尾

1. 创建表格

create table <table-name> (id integer, age integer, name char, score float);

2. 插入数据

insert into <table-name> values(1001, 15, zhangsan, 89);// 标准插入
insert into <table-name> values (id, age, name) values(1002, 18, lisi);//按列名插入

3. 查看数据库记录

select * from <table-name>; //查看全部
select * from <table-name> were age = 15;//按列名的信息 age=15 的查看
select * from <table-name> were age = 15 and name = lisi;//按多个列名的信息查看
select * from <table-name> were age = 15 or name = lisi;//age = 15 或 name = lisi满足一个条件就输出
select name, id from <table-name>;//指定字段查询
select * from <table-name> where score >= 90 and score <= 100;//查询score[90,100] 之间的信息

4. 删除信息

delete from <table-name> where id = 1005 and name = 'zhangsan';//删除id=1005和name=‘张三’的信息(同时满足)
delete from <table-name> where id = 1005 or name = 'zhangsan';//删除id=1005或name=‘张三’的信息(有一个条件满足就执行)

5. 更新数据

update <table-name> set name = 'wangwu' where id = 1002;//将id是1002的行信息中的name全部改成 'wangwu';

6. 增加一列

alter table <table-name> add column score float;//在<table-name>表名后面添加一列名: score属性为:float

7. 删除一列 (sqlite3 不支持直接删除一列)

1-- 创建一张新表create table <new-table-name> as select id, name, score from <table-name>;//从<table-name>表名中选择指定的列(id,name,score)为基础创建<new-table-name>新的表
2-- 删除原有的表drop table <table-name>;
3-- 将新表的名字改成原有的旧表的名字alter table <new-table-name> rename to <table-name>;//将<table-name>新表明改成<table-name>旧表明

3)sqlite3 数据库 C语言 API

1. 打开数据库

   int sqlite3_open (const char *filename,   /* Database filename (UTF-8) */sqlite3 **ppDb          /* OUT: SQLite db handle */);功能:打开数据库参数:filename  数据库名称ppdb      数据库句柄返回值:成功为0 SQLITE_OK ,出错 错误码

2. 关闭数据库

 int sqlite3_close(sqlite3* db);功能:关闭数据库参数:返回值:成功为0 SQLITE_OK ,出错 错误码

3. 错误信息

 const char *sqlite3_errmsg(sqlite3*db);功能:得到错误信息的描述

4. 执行一条sql语句

   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

5. 查询回调函数

查询回调函数:
int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name),  /* Callback function */
功能:查询语句执行之后,会回调此函数
参数:arg   接收sqlite3_exec 传递来的参数ncolumns 列数f_value 列的值得地址f_name   列的名称
返回值:0

6. 查询函数

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 */
);功能:不需要回调函数的查询函数
参数:db  数据库句柄zSql 存放sqlite3的语句pazResult  存放表中的数据pnRow 行pnColumn 列pzErrmsg 错误信息

小知识:如果结构体中定义的是一级指针,那么你要定义变量取地址的形式,如果是二级指针函数,你要定义一级指针取地址的形式

学生信息实例

student.c

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
#include <stdlib.h>#define N 128
#define DATABASE "student.db"
int do_insert(sqlite3 *db);
int do_query(sqlite3 *db);
int do_query_1(sqlite3 *db);
int do_delete(sqlite3 *db);
int do_update(sqlite3 *db);int main (int argc, char *argv[]) {sqlite3 *db;char *errmsg;int n;//打开SQlite数据库文件.dbif (sqlite3_open(DATABASE, &db) != SQLITE_OK) printf("%s\n", errmsg);else printf("open DATABASE success.\n");//创建一张数据库的表格 stuif (sqlite3_exec(db, "create table stu(id integer, name char, sex char, score integer);", NULL, NULL, &errmsg) != SQLITE_OK) {printf("%s\n", errmsg);} else {printf("Create of 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);getchar();switch(n) {case 1:do_insert(db);//插入信息break;case 2://do_query(db);//查询do_query_1(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;
}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 callback(int* arg,int f_num ,char** f_value,char** f_name) {int i;for (i = 0; i < f_num; i++) {printf("%-8s", f_value[i]);}putchar(10);return 0;
}int do_query(sqlite3 *db)
{char sql[N] = {};char *errmsg;sprintf(sql, "select * from stu");if(sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK)printf("%s\n", errmsg);else printf("Query done.\n");return 0;
}int do_query_1(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);elseprintf("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 do_delete(sqlite3 *db)
{char sql[N] = {};char *errmsg;int id;printf("Invalid id:");scanf("%d", &id);getchar();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)
{char *errmsg;char sql[N] = {};char name[32] = "zhangsan";int id;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("Delete done.\n");return 0;
}

输出结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C\C++ 使用socket判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 使用socket判断ip是否能联通 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <cstdlib> #include <cstdio> #include &…

【产品设计】功能型小程序的前后台原型设计

最近公司基于目前招聘兼职老师的流程做了一款小程序。之所以选择做小程序的原因&#xff0c;一方面是因为项目功能比较简单&#xff0c;没必要开发一款独立的APP&#xff1b;另一方面是因为小程序开发起来比较方便&#xff0c;节约开发成本&#xff0c;用户使用起来也比较方便。…

JavaScript中的JSON

一&#xff1a;分类  简单值&#xff1a;字符串、数值、布尔值和 null 可以在 JSON 中出现&#xff0c;就像在 JavaScript 中一样。特殊 值 undefined 不可以。 对象&#xff1a;第一种复杂数据类型&#xff0c;对象表示有序键/值对。每个值可以是简单值&#xff0c;也可以…

STM32F4_FLASH模拟EEPROM

目录 前言 1. 内部FLASH简介 2. 内部FLASH写入过程 3. 内部FLASH库函数 4. FLASH的读写保护及解除 5. FLASH相关寄存器 6. 实验程序 6.1 main.c 6.2 STMFlash.c 6.3 STMFlash.h 前言 STM32F4本身并没有自带EEPROM&#xff0c;但是STM32F4具有IAP功能&#xff0c;也就…

操作系统进行设备控制的方式

一.I/O控制方式 上一篇的博客介绍了设备管理的一些概念基础知识点&#xff0c;其中I/O控制方式这一块没有详细说明。设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入/输出控制方式有4种&#xff0c;下面分别加以介绍。 二.程序直接控制…

Kotlin基础(五):类和接口

前言 本文主要讲解类和接口&#xff0c;主要包括类的声明、构造器、类成员、修饰符、类的继承、接口、抽象类。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 类的声明 在 Kotlin 中&#xff0c;类的声明使用关键字 class。下面是一个简单的类声明的示例&…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式&#xff1b; 全球预测模式、中尺度数值模式&#xff1b; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

【论文阅读】一些多轮对话文章的体会 ACL 2023

前言 本文是对昨天看到的ACL 2023三篇多轮对话文章的分享这三个工作都是根据一些额外属性控制输出的工作&#xff0c;且评估的方面比较相似&#xff0c;可以借鉴 方法 这几篇文章都不是做general任务的&#xff0c;倾向于通过一些额外信息&#xff0c;来做specific任务 【1】…

Linux的基本使用和web程序部署

注意&#xff1a;本文章不适合C学习者&#xff08;知识点远远不够&#xff09;&#xff0c;只适合Java学习者&#xff0c;学习简单的Linux命令 1.Linux的背景知识 1.1Linux是什么 Linux是一个操作系统&#xff0c;和Windows是“并列”的关系。经过多年的发展&#xff0c;Lin…

Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布 <!-- canvas元素默认是行内块元素 --> <divclass"model"style"background-color: #ff0000;"width"300"height"180" ></div>画布随窗口变化 // 画布跟随窗口变化 window.onresize fun…

Qt 项目架构之----MVC架构

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09;-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff08;视图&#x…

2023 Testing Expo倒计时-聚焦风丘9003展位

请点击此处&#xff0c;即可进行在线登记报名并了解更多信息&#xff01;