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

数据库_SQLite3

下载

1、更新软件源:

sudo apt-get update

2、下载SQLite3:

sudo apt-get install sqlite3

3、验证:

sqlite3启动数据库,出现以下界面代表运行正常。输入 .exit 可以退出数据库

4、安装sqlite3的库

sudo apt-get install libsqlite3-dev,之后编译c代码时需要加上 -l sqlite3

5、打开数据库

sqlite3 <数据库文件名>

命令

回车可以换行输入,但本命令并不结束。输入 " ; " 后,本命令结束

1、以.开头的命令

.help:显示所有以.开头的命令

.exit:退出sqlite3

.table:显示当前已存在的表格

.headers on:开启显示表头

.mode column:查询时以列的形式显示结果

2、SQL语句

2.1 创建表格

语法:

CREATE TABLE table_name (
  column_1 data_type constraints,
  column_2 data_type constraints,
  ...,
  column_n data_type constraints
);

CREATE TABLE:创建表格的语句

table_name:表格的名字

column_1:表格的第一个参数

data_type:参数类型

data_type值含义
INTEGER整型 int
TEXT存储大量文本
REAL双精度浮点数

constraints:参数约束

constraints值含义
PRIMARY KEY主键,这具有唯一性的特点
NOT NULL非空,这代表该参数必须填写
AUTOINCREMENT自动增加

示例:

创建一个名为“students”的学生信息表。该表将包含以下列:ID,姓名,年龄,性别和成绩。

CREATE TABLE students (
    ID INTERGER PRIMARY KEY NOT NULL,
    name TEXT NOT NULL,
    age INTEGER NOT NULL,
    gender TEXT NOT NULL,
    score REAL NOT NULL
);

students:表格名为students 

ID:第一个参数是ID

INTERGER:参数类型是int型

PRIMARY KEY:主键,这具有唯一性的特点

NOT NULL:非空,这代表该参数必须填写

2.2 删除表

语法: 

DROP TABLE table_name

table_name:要删除的表的名字

示例:

DROP TABLE students;

2.3 插入数据

语法: 

INSERT INTO table_name (column_1, column_2, ..., column_n)
VALUES (value_1, value_2, ..., value_n);

table_name:表名

column_1:第一个参数的名字,与创建表时的名字一致

value_1:第一个参数的值

示例:

向students表中插入一条数据,ID=1,name=张三,age=18,gender=男,score=90.0

INSERT INTO students (ID, name, age, gender, score)
    values(1,'张三', 18, '男', 90.0);

2.4 查询数据

语法:

//查询
SELECT column_1, column_2, ..., column_n 
FROM table_name;
//条件查询
SELECT column1, column2 FROM table_name WHERE condition;

column_1:参数名,写*代表全部参数

table_name:表名

示例:

查询 students表中的全部参数

SELECT * FROM students;

2.5 更新表格

语法: 

UPDATE table_name
SET column_1 = value_1, column_2 = value_2, ..., column_n = value_n
WHERE condition;

table_name:表名

column_1 = value_1:将参数column_1的值更新为value_1

condition:条件,只有满足条件时更新这个内容

示例:

将表students中id=1的内容更新为名字=no哈哈,分数=50 

UPDATE students
SET name = 'no哈哈',score = 50
WHERE id = 1;

2.6 删除数据

 语法: 

DELETE FROM table_name WHERE condition;

table_name: 表名

condition:条件,只有满足条件时删除这个内容

示例:

删除表students中id = 1的数据 

DELETE FROM students WHERE id = 1;

3、常用API

3.1 打开数据库 

int sqlite3_open(
    const char *filename,   /* 数据库文件的路径 */
    sqlite3 **ppDb          /* 用于存储数据库连接的指针 */
);

返回值:成功返回SQLITE_OK

filename:数据库文件的路径,当filename不存在时,会自动创建一个数据库文件。

ppDb:用于存储数据库连接的指针

3.2 关闭数据库

int sqlite3_close(sqlite3 *db);

返回值:成功返回SQLITE_OK

db:sqlite3_open传入的参数ppDb

3.3 打印错误

const char *sqlite3_errmsg(sqlite3 *db);

返回值:错误信息,没有错误时不打印信息。

db:sqlite3_open传入的参数ppDb

3.4 执行SQL语句

int sqlite3_exec(
    sqlite3 *db,                                /* 数据库连接 */
    const char *sql,                            /* 要执行的 SQL 语句 */
    int (*callback)(void*,int,char**,char**),   /* 回调函数 */
    void *arg,                                  /* 传递给回调函数的参数 */
    char **errmsg                               /* 用于存储错误消息的指针 */
);

返回值:成功返回SQLITE_OK 

db:sqlite3_open传入的参数ppDb

sql:sql语句

callback:执行查询语句时会用到该函数,其余时候写NULL即可。参数含义如下:

参数含义
void*sqlite3_exec中的arg参数值
int查询结果所返回的列数,有多少个字段就有多少列
char**(第一个)每个字段的值
char**(第二个)每个字段的名称

注意:callback函数必须return 0,否则会报错query aborted

3.5 释放空间 

void sqlite3_free(void *p);

功能与free一样,释放malloc申请的空间。

sqlite3_exec的参数errmsg实际上申请了一个空间,使用之后应该调用sqlite3_free释放空间。

实验代码

使用c语言,编程实现"SQL语句"章节的相关功能。

具体代码实现如下:

#include <stdio.h>
#include <sqlite3.h>

/*
 * callback:sqlite3_exec的回调函数
 * param arg:sqlite3_exec函数中传入的arg参数的值
 * param argc:有多少个字段 (比如该代码中argc就是5) 
 * param argv:字段的值 (比如第一个ID的值就是1,2,3.....)
 * param azColName:字段的名字 (比如该代码中就是ID, name, age, gender,score这几个字段) 
 * */
int callback(void* arg,int argc,char** argv,char** azColName){
	int i;

	//printf("get callback,arg = %d,argc = %d\n",(int)arg,argc);

	for(i=0;i<argc-1;i++){
		printf("%s = %s\n",azColName[i], argv[i] ? argv[i] : "NULL" );
	}
	return 0; //这里必须返回0
}

int main(){
	sqlite3 *db;
	char* errmsg = NULL;
	char* sql_create = "CREATE TABLE students 	 ( 			\
				  		ID INTERGER PRIMARY KEY NOT NULL, 	\
				 		name TEXT NOT NULL, 				\
				  		age INTEGER NOT NULL, 				\
				  		gender TEXT NOT NULL, 				\
				  		score REAL NOT NULL 				\
				  		);";
	char* sql_insert = "INSERT INTO students (ID, name, age, gender, score) values(1,'张三', 18, '男', 90.0);\
						INSERT INTO students (ID, name, age, gender, score) values(2,'李四', 19, '女', 91.0);\
						INSERT INTO students (ID, name, age, gender, score) values(3,'王五', 20, '男', 92.0);\
						";
	char* sql_select = "SELECT * FROM students;";

	//1.打开数据库
	if(sqlite3_open("./mydatabase.db",&db) != SQLITE_OK){
		sqlite3_errmsg(db);
		return -1;
	}
	//2.执行sql语句
	if(sqlite3_exec(db,sql_create,NULL,NULL,&errmsg) != SQLITE_OK){
		printf("sqlite3_exec err:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}
	if(sqlite3_exec(db,sql_insert,NULL,NULL,&errmsg) != SQLITE_OK){
		printf("sqlite3_exec err:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}
	if(sqlite3_exec(db,sql_select,callback,NULL,&errmsg) != SQLITE_OK){
		printf("sqlite3_exec err:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}

	//3.关闭数据库
	sqlite3_close(db);

	return 0;
}

代码运行结果如下:

将资源导入数据库

可导入到数据库的文件:

sqlite3允许将.csv格式的文件导入到数据库,.csv文件是由excel文件生成。因此我们首先将英汉对照表写入到excel中,再将后缀改为.csv,之后再使用命令将.csv导入到数据库,这样就实现了获取数据库资源。

具体步骤:

1、在excel表中整理好英汉对应表

2、另存为excel表,另存为格式为.csv

3、验证.csv数据,.csv文件可以用记事本打开,数据显示如下:

数据没问题后,将windows下的.csv文件拷贝到linux下

4、将.csv的内容导入到数据库中

这里.csv文件名称改成了word,内容并没有改变

练习

1、联系人管理系统

实现功能:

数据库名为test.db,能够向数据库中增删改查联系人数据。

实现代码:

见绑定资源包

2、网络词典

项目功能总述:

该项目最终实现客户端输入一个英文单词后,命令行中打印其对应的中文意思。

选择UDP的原因:

在网络环境良好时,UDP的传输也比较可靠,并且处理速度比TCP更快。除此之外,因为客户端与服务器之间交互的数据量小,TCP的包头至少20个字节,UDP的包头只有8个字节,使用UDP传输包头占用的资源较小,更节省资源。

项目实现思路:

客户端向服务器发送一个单词信息,服务器接收后,在数据库中查询到该信息,并将中文部分发回到客户端。客户端接收到服务器发来的中文翻译后,将其打印在命令行中。

实现代码:

见绑定资源包


http://www.kler.cn/a/383639.html

相关文章:

  • 我用Cursor+DeepSeek做了个飞书文档一键同步插件,免费使用!
  • 掌握命令行参数的艺术:Python的`argparse`库
  • STM32F407寄存器点灯
  • ChatGPT之父:奥尔特曼
  • 黑马Java面试教程_P8_并发编程
  • MFC用List Control 和Picture控件实现界面切换效果
  • 防止事件冒泡和防止触发子元素
  • Oracle视频基础1.4.4练习
  • python数据结构基础(6)
  • elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法
  • 一元二次函数的最值公式
  • EV录屏好用吗?盘点2024年10款专业好用的录屏软件。
  • 【wxWidgets GUI设计教程 - 高级布局与窗口管理】
  • 【大模型系列】Video-XL(2024.10)
  • php rides限制访问频率
  • uniapp学习(010-2 实现抖音小程序上线)
  • 【ChatGPT】如何将ChatGPT的回答与外部数据进行结合
  • ThingsBoard规则链节点:Push to Edge节点详解
  • Yarn介绍 | 组成 | 工作流程
  • GESP4级考试语法知识(算法概论(三))
  • 加密通信的“军备竞赛”:科技的“猫鼠游戏”与永无止境的密码对抗
  • SpringSecurity6+OAuth2.0 从入门到熟练使用
  • 视频自动播放被浏览器阻止及其解决方案
  • 「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
  • 【神经网络加速】神经加速棒
  • Spring中@Autowired@Resource和@Inject注解区别