首页 > 数据库 >Sqlite3数据库基本使用

Sqlite3数据库基本使用

时间:2024-06-20 22:27:44浏览次数:28  
标签:基本 语句 name 数据库 sqlite3 student sql Sqlite3

文章目录

一、基本概念

数据:能够输入计算机并能被计算机程序识别和处理的信息集合
数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合
DBMS:位于用户与操作系统之间的一层数据管理软件,用于操纵和管理数据库

二、安装

在线安装:
sudo apt-get install sqlite3 安装数据库软件
sudo apt-get install libsqlite 安装数据库的函数库
离线安装
sudo dpkg -i sqlite3_3.22.0-1ubuntu0.4_amd64.deb 离线安装数据库软件
sudo dpkg -i libsqlite3-dev_3.22.0-1ubuntu0.4_amd64.deb 离线安装数据库的函数库

  • 注:离线安装包可以从官网获取 https://www.sqlite.org/

验证是否安装好
输入sqlite3,进入下面的界面说明安好了
在这里插入图片描述

三、使用

(一)系统命令

不同的数据库的系统命令不一样,取决于数据库的开发者

.help      查看帮助手册
.exit      退出数据库程序
.quit      退出数据库程序  使用  .q  也可以
.open      打开数据库文件
.tables    列出数据库中所有的数据表
.schema    查看表结构(建表语句)
.headers on|off  查询的结果是否显示表头信息  on 显示 off  不显示

注意:sqlite3数据库需要先打开数据库文件再操作,否则所有的操作都是在内存上的,数据不会被保存在硬盘,当数据库程序退出时,数据就丢了。

打开数据库文件的方式:
方式1:先使用sqlite3命令进入到sqlite3数据库的终端
然后在终端上使用.open 数据库文件名 的方式打开数据库文件
方式2:也可以直接使用 sqlite3 数据库文件名 的方式打开数据库文件并进入数据库的终端

数据库文件名只要符合命名规范即可,但是一般我们书写时都以.db结尾方便识别。

(二)关系型数据库表

在这里插入图片描述

  1. 一个数据库文件中,可以有多个数据表,且每个数据表的结构可以不一样

(三)sql语句

  1. 只要是关系型数据库,sql语句都通用
  2. sql语句不能以 “.” 开头,结尾要加 “;
  3. sql语句中关键字不区分大小写,但是一般写成大写,方便区分
  4. sql语句中的字符串需要用单引号或者双引号引起来
  5. sql语句中的转义字符是单引号"'"

1. 建表语句

新创建的数据库文件中是没有数据表的,需要自己创建

	//注意:新创建的数据库文件中是没有数据表的 需要我们自己创建
	CREATE TABLE 表名(字段名1 字段类型1, 字段名2 字段类型2, ...);
		字段类型:
			整形   INT 或者 INTEGER
			字符串 CHAR 或者 TEXT
	例如:
	CREATE TABLE student(id INT, name CHAR, score INTEGER);

2. 插入语句

	//sql语句中的字符串需要用 单引号 或者 双引号 引起来
	//这种插入方式必须从左到右给每个字段都赋值
	INSERT INTO student VALUES(1001, "zhangsan", 98);
	
	//如果只想给指定的字段赋值 可以用下面的用法
	INSERT INTO student(id, name) VALUES(1003, "wangwu");

3. 查询语句

	//查询所有记录的所有字段的内容
	//其中 * 表示 所有字段
	SELECT * FROM student;
	
	//查询表中所有记录的 name 和 score 字段
	SELECT name,score FROM student;
	
	//查询表中所有name='zhangsan' 的记录的所有字段
	SELECT * FROM student WHERE name='zhangsan';
	
	//多个条件 可使用 AND 或者 OR 连接
	// AND 并且     OR  或者
	//查询表中所有 name='zhangsan'并且score=98 的记录的所有字段
	SELECT * FROM student WHERE name='zhangsan' AND score=98;
	
	//查询表中所有name="zhangsan"的记录的 id 字段
	SELECT id FROM student WHERE name="zhangsan";
	
	//对查询结果可以排序
	// ORDER BY 字段名    根据哪个字段排序
	// ASC  升序   DESC  降序    不写时 默认是升序
	//查询表中所有name="zhangsan"的记录的所有字段 且结果根据成绩降序排序
	SELECT * FROM student WHERE name="zhangsan" ORDER BY score DESC;

4. 更新语句

	//把所有id=1005的记录的 score 字段的值都改成100
	UPDATE student SET score=100 WHERE id=1005;
	
	//一次该多个字段时  中间用 逗号 分隔
	UPDATE student SET score=80,name='lihua' WHERE id=1007;
	
	//注意:即使没有满足条件的记录 语句执行也不会报错 只不过没有现象发生
  • 注:即使没有满足条件的记录,语句执行也不会报错,只不过没有现象发生

5. 删除语句

	//删除表中所有 name="zhangsan" 或者 id=1003 的所有记录
	DELETE FROM student WHERE name='zhangsan' OR id=1003;
	
	//注意:即使没有满足条件的记录 语句执行也不会报错 只不过没有现象发生
  • 注:即使没有满足条件的记录,语句执行也不会报错,只不过没有现象发生

6. 删除表

	DROP TABLE 表名;

7. 对列的操作(一般不会用到)

添加一列
	ALTER TABLE student ADD COLUMN sex CHAR;

删除一列
	sqlite3 不允许直接删除一列
	1)先创建一张新表
		CREATE TABLE temp AS SELECT id,name FROM student;
	2)删除原来的旧表
		DROP TABLE student;
	3)对新表重命名
		ALTER TABLE temp RENAME TO student;

8. 主键

主键 PRIMARY KEY 

	CREATE TABLE student(id INT PRIMARY KEY, name TEXT, score INT);

创建表时,可以指定一个字段为主键,然后在插入过程中,主键必须保持唯一,如果插入重复的主键的记录,会报错:主键冲突

9. 其他命令

//同时插入多条数据,以','分隔
INSERT INTO student VALUES(1003, "qw", 90),(1004, "we", 89),(1005, "er", 30); 

//从第0行开始查找,查找2行
select * from student limit 0,2;

//查找所有以zhang开头的记录
select * from student where name like "zhang%";

//求和
select sum(score) from student;

四、常用的API接口函数

使用sqlite3数据的函数 编码时 需要加头文件 #include <sqlite3.h>
编译时,需要连接sqlite3数据库的库 -lsqlite3

(一)API接口函数

1. 打开和关闭数据库文件

int sqlite3_open(const char *filename,/* Database filename (UTF-8) */
                     sqlite3 **ppdb       /* OUT: SQLite db handle */  );
    功能:
        打开一个数据库  存在就直接打开  不存在就新建并打开
    参数:
        filename  数据库文件的路径和名字
        ppdb      操作数据库的指针,句柄。
    返回值:
        成功 SQLITE_OK
        失败 error_code

int sqlite3_close(sqlite3 *db);
    功能:关闭一个数据库

2. 获取错误信息描述

const char *sqlite3_errmsg(sqlite3 *db);
    功能:获取数据库句柄db对应的最后一次错误信息描述

3. 执行sql语句

	int sqlite3_exec(sqlite3 *db, const char *sql, 
				int (*callback)(void *, int, char **, char **),
				void *arg, char **errmsg);
	功能:
		执行一条sql语句
	参数:
		db			数据库的句柄指针
		sql			将要被执行sql语句
		callback	回调函数,只有在查询语句时,才会使用回调函数
		arg			为callback 传参的,只有在查询语句时,才给回调函数传参
		errmsg		错误信息的地址
						如果使用了 需要手动调用 sqlite3_free 来释放空间 防止内存泄漏
	返回值:
		成功 SQLITE_OK
		出错 errcode 错误码
		
补充:
	释放sqlite3_exec第五个参数占用的空间
	    void sqlite3_free(void *p);

sqlite3_exec 函数的回调函数 callback

	int callback(void *arg, int ncolumn, char **f_value, char **f_name)
	功能:
		得到查询结果
	参数:
		arg			为回调函数传递参数使用的
		ncolumn		记录中包含的字段的数目
		f_value		包含每个字段值的指针数组
		f_name		包含每个字段名称的指针数组
	返回值:
		成功 0
		出错 非0
  • 注:
  • 程序中写sql语句,结尾无需加分号,因为字符串结尾有\0来标识字符串结束。
  • IF NO EXISTS 标识如果存在就使用,不报错;
CREATE TABLE IF NOT EXISTS student(id INT PRIMARY KEY, name CHAR, score INT)

4. 查询数据库的函数

查询数据库的函数
	int sqlite3_get_table(sqlite3 *db, const char *zSql,
					char ***pazResult, int *pnRow, 
					int *pnColumn, char **pzErrmsg);
	功能:
		查询数据库,它会创建一个新的内存区域来存放查询的结果信息
	参数:
		db			数据库操作句柄
		sql			数据库的sql语句
		pazResult	查询的结果
		nRow		行数--不包含字段名
		nColumn		列数
		errmsg		错误消息 
				//和前面一样 如果使用了 要记得使用 sqlite3_free 释放空间
	返回值:
		成功 0
		出错 errcode

释放 sqlite3_get_table 函数产生的结果集
    void sqlite3_free_table(char **result)

(二)使用sqlite3数据库实现学生管理系统

标签:基本,语句,name,数据库,sqlite3,student,sql,Sqlite3
From: https://blog.csdn.net/weixin_44254079/article/details/139792758

相关文章

  • 学习MySQL数据库:理解与实践
    学习MySQL数据库:理解与实践MySQL是一款开源的关系型数据库管理系统,广泛应用于各类应用程序中,从个人项目到大型企业解决方案。在本文中,我将分享我在学习和使用MySQL过程中的一些心得体会,希望能为初学者提供一些有价值的信息和技巧。1.MySQL的选择与简介MySQL作为开源数据......
  • MySQL数据库基础
    1.数据库概论无论是传统的软件,还是互联网网站,或者是移动端的应用,都要处理数据。数据库技术研究如何有效地管理和存取大量的数据资源。随着计算机技术的不断发展,数据库技术已成为计算机科学的重要分支。今天,数据库技术不仅应用于事务处理,还进一步应用于情报检索、人工智能、专......
  • 强大的多数据库客户端工具:DataGrip【送源码】
    今天给大家带来的工具是:DataGrip介绍DataGrip是jetbrains开发的一款关系数据库和NoSQL数据库的多数据库客户端工具,可以30天免费试用,后续使用需要购买。DataGrip还是一款强大的跨平台工具,支持多种操作系统,比如Windows、macOS、Linux等。特性配合智能查询控制台,提供强......
  • 腾讯云部署的java服务,访问阿里云的mysql数据库,带宽异常偏高,可能是什么原因
    个人名片......
  • Oracle系列---【数据库账号频繁被锁定,如何定位到是哪台服务器器导致的?】
    1.问题描述接审计要求,已上线的数据库的密码属于弱口令,需要更改成严格的,但是服务又不能停机,这种情况下,只能在原有用户名上新增代理用户,这里不能用新建用户的方案,因为用户间不能共用schema,所以只能用新增代理用户的方案。切换到代理用户的过程中发现,"ORA-28000:Theaccountisl......
  • Swagger的基本使用(快速入门)
    目录一、环境配置(1)导入依赖:(一般导入依赖都会报错,所以大家也可以借鉴一下这篇文章:swagger配置报错)(2)启动类添加注解二、Swagger配置介绍(1)基本配置 (2)设置扫描的包三、Swagger常用注解(1)@Api(2)@ApiOperation(3)@ApiParam(4)@ApiModel(5)@ApiIgnore(6)@ApiImplicitParam在使......
  • 记录一下麒麟3.0内网安装python通过jdbc连接达梦6数据库
    麒麟3.0基于RedHat4.1.2-42,此版本可以编译python3.8.3,但是内网无法安装libffi-dev,导致无法安装JPype1和JayDeBeApi,所以改用python2.7.181、安装python2.7.18https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz#解压tar-zxvfPython-2.7.18.tgz#切换到新的目......
  • java insert数组到postgres数据库
    数组格式在数据库中并不是常用操作,比较常用的是字符串存储后,使用时再进行数据加工.这里记录下直接操作postgresinsert数组的数据操作.表结构CREATETABLEschema.table( report_rowsjsonNULL, series_varcharNULL)实际存在两种数组结构:1字符串数组2json数组.js......
  • 达梦数据库
    试玩地址:https://eco.dameng.com/tour/达梦数据库检查数据库版本及服务状态查看达梦数据库运行状态,build_version是小版本SELECT*FROMv$instance;SELECTstatus$as状态FROMv$instance;查看达梦数据库版本SELECTbanneras版本信息FROMv$version;SELECT*......
  • 5.24实验三 数据库完整性、安全性实现
    实验三 数据库完整性、安全性实现一、实验目的:使学生加深对数据库安全性和完整性的理解,并掌握SQLServer中有关用户、角色及操作权限的管理方法,学会创建和使用规则、缺省和触发器以及存储过程。二、实验要求:通过实验对数据进行完整性控制、安全性维护。三、实验步骤:......