Linux下使用SQLite3基本功能

Linux下使用SQLite3基本功能

版权声明:

本文为
博主原创文章

,遵循 CC 4.0 BY-SA 版权协议

转载请附上原文出处链接和本声明

前言

Linux下使用SQLite3基本功能
为了便于更好阅读理解文章,在观看本文章之前,您需要了解什么是数据库,尤其是RDBMS,以及什么是计算机编程语言。

SQLite不需要实际的服务器来运行,应用程序无需与服务器通信到客户端/服务器架构,而是集成到SQLite中。

注意:SQLite不能很好地支持多个用户,如果有两个用户同时尝试写入,那么数据库将会被短暂锁定,功能受限。另外,SQLite不能处理一次大量数据,一旦超过最大容量,其性能将会降低。

linux下安装使用 SQLite3 >>>

; 介绍

什么是表:表是数据库最基本的组成对象,用来组织和存储数据。表由行和列组成,每个列包含特定类型的数据信息,一个列就是一个字段。一个数据库可以包含一个或多个表。

以excel为例:下面两张图分别代表了两种表(为表取了名字:学生信息、公民信息)

Linux下使用SQLite3基本功能

Linux下使用SQLite3基本功能

一个数据库可以包含一个或多个表

Linux下使用SQLite3基本功能

在Linux环境下使用SQLite3 创建了一个数据库,库内创建了一个表(学生信息)

下方写了详细的注释 >>> //注释

linux@ubuntu:~/SQL/第一个数据库$ ls
linux@ubuntu:~/SQL/第一个数据库$ sqlite3 我的一个数据库.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.

sqlite> create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite>
sqlite> .database
seq  name             file

0    main             /home/linux/SQL/第一个数据库/我的一个数据库.d
sqlite>
sqlite>
sqlite> .tables
学生信息
sqlite>
sqlite>
sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite>
sqlite> .quit
linux@ubuntu:~/SQL/第一个数据库$ ls
我的一个数据库.db

一、使用语句命令SQLite

1、SQLite3 常见命令

.help :显示帮助信息
.quit :退出SQLite3

.database:显示当前打开的数据库文件

sqlite> .database
seq  name             file

0    main             /home/linux/SQL/第一个数据库/我的一个数据库.d

.tables :显示数据库中所有的表名

sqlite> .tables
学生信息

.schema :查看表的结构

sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);

命令扩展(由菜鸟教程提供)>>>

2、创建一个数据库表

create table 表的名字(字段1名 其数据类型,字段2名 其数据类型,…);
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);

sqlite> create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>

3、数据类型

Linux下使用SQLite3基本功能

; 4、插入一列表

Insert into 表的名字 values(参数1,参数2,…);

sqlite> insert into 学生信息 values(1,'小李','男',80);
sqlite>
sqlite> select * from 学生信息;
1|小李|男|80

5.0、显示数据

5.1、显示指定表的 全部数据

select 显示区域 from 要显示的表;


sqlite>
sqlite> select * from 学生信息;
1|小李|男|80
2|小王|男|70
3|小张|女|90
sqlite>

5.2、显示指定表的 指定数据

where指定从一个表或多个表中获取数据的条件

sqlite> select * from 学生信息 where 性别 = '女';
3|小张|女|90
sqlite>
sqlite> select * from 学生信息 where 成绩 >= 80;
1|小李|男|80
3|小张|女|90
sqlite>

6、修改数据

update 表名 set 需要修改的字段 = 修改值 where 指定要统一修改的列表;

sqlite> select * from 学生信息;
1|小李|男|80
2|小王|男|70
3|小张|女|90
sqlite>
sqlite> update 学生信息 set 成绩 = 100 where 姓名 = '小李';
sqlite>
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
3|小张|女|90
sqlite>

7、删除指定的数据列表

delete from 表名称 where 要删除列表中的任意一个字段;

sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
3|小张|女|90
sqlite>
sqlite> delete from 学生信息 where 学号 = 3;
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
sqlite>

8、表名主键字段的关键字

Linux下使用SQLite3基本功能

sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
2|小王|男|70
sqlite>
sqlite> delete from 学生信息 where 学号 = 2;
sqlite> select * from 学生信息;
1|小李|男|100
sqlite>

可以看到当存在相同内容的列表时,一旦删除其中一个另外一个也会一起删除

从根本上避免这个问题,设置一个不可重复的字段
当一个字段设置为 primary key时,表内同属字段的值就不能重复

sqlite> create table 学生信息(学号 integer primary key,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite> insert into 学生信息 values(1,'小李','男',100);
sqlite> insert into 学生信息 values(1,'小王','男',70);
Error: UNIQUE constraint failed: 学生信息.学号
sqlite>
sqlite> select * from 学生信息;
1|小李|男|100
sqlite>
sqlite> insert into 学生信息 values(2,'小王','男',70);
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
sqlite>

9、删除一个数据库表

drop table 要删除的表名;

sqlite> create table 学生信息(学号 integer ,姓名 text,性别 text,成绩 integer);
sqlite> create table 公民信息(姓名 text,性别 text,电话 integer,地址 text);
sqlite>
sqlite> .tables
公民信息  学生信息
sqlite>
sqlite> drop table 公民信息;
sqlite>
sqlite> .tables
学生信息
sqlite>

二、使用SQLite提供的API编写C

SQLite3数据库针对不同的语言提供了相应的编程接口

C语言 SQLite3数据库 相关库文件
#include

1、int sqlite3_open()创建一个数据库表

int sqlite3_open(const char *filename, sqlite3 **ppDb)

函数功能
打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

形参一:const char *filename

形参二: sqlite3 ppDb
返回参数**:

    sqlite3 * sql_db;
    char * errmsg;

    if (SQLITE_OK != sqlite3_open("学生信息.db",&sql_db))
    {

        fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
        return -1;
    }

2、int sqlite3_exec()写入操作数据库内的数据

int sqlite3_exec(sqlite3 * db,const char * sql,int( callback)(void,int,char ,char ),void * arg,char ** errmsg)

函数功能:
一站式查询执行函数,使用该函数可以直接利用C代码实现SQLite3内,对其表、列表的 增删改查

形参一:sqlite3 * db
打开的数据库(数据库的地址)

形参二:const char * sql
SQLite 标准语句

形参三:int( callback)(void,int,char ,char
回调函数

形参四:void * arg
给回调函数传递的第一个参数

形参五:char errmsg
获取错误信息存放的地址,内部存放的字符串即为错误信息;
出现错误信息后记得使用 ==sqlite3_free()==将其内存释放;
返回参数**:
成功返回 0
失败返回错误码

标准代码

    sqlite3 *   sql_db;
    char *      errmsg;
    char *      file_name = "学生信息.db";

    if (SQLITE_OK != sqlite3_open(file_name ,&sql_db))
    {

        fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
        return -1;
    }

    char * create_table = "insert into 学生信息 values(1,'小李','男',100);";

    if (SQLITE_OK != sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg))
    {

        fprintf(stderr,"数据库操作错误\n%s\n",errmsg);

        sqlite3_free(errmsg);

        return -1;
    }

进阶代码


    typedef struct
    {
        int     id;
        char *  name;
        char *  gender;
        int     sock;
    }student;

    student S = {1,"小李","男",100};

    sqlite3 * sql_db;
    char * errmsg;

    if (SQLITE_OK != sqlite3_open(file_name ,&sql_db))
    {

        fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
        return -1;
    }

    char statement[1024] = {0};

    sprintf(statement,"insert into 学生信息 values(%d,'%s','%s',%d);",S.id,S.name,S.gender,S.sock);

    if (SQLITE_OK != sqlite3_exec(sql_db,statement,NULL,NULL,&errmsg))
    {

        fprintf(stderr,"数据库操作错误\n%s\n",errmsg);

        sqlite3_free(errmsg);

        return -1;
    }

sqlite3_exec 在数据库内创建一个表


    char * create_table = "create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);";

    sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);

sqlite3_exec 插入一列表


    char * create_table = "insert into 学生信息 values(1,'小李','男',80);";

    sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);

sqlite3_exec 修改数据


    char * create_table = "update 学生信息 set 成绩 = 100 where 姓名 = '小李';";

    sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);

sqlite3_exec 删除指定的数据列表


    char * create_table = "delete from 学生信息 where 学号 = 3;";

    sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);

sqlite3_exec 删除一个数据库表


    char * create_table = "drop table 学生信息;";

    sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);

3、sqlite3_get_table() 读取数据库内的数据

int sqlite3_get_table(sqlite3 * db,const char *zSql,char ***pazResult,int * pnRow,int * pnColumn,char ** pzErrmsg)

函数功能
获取数据库内的数据:表的结构、表的内容、行、列

形参一:sqlite3 * db
打开的数据库(数据库的地址)

形参二:const char *zSql
SQLite 标准语句

形参三:char ***pazResult
获取到的表的内容的首地址

形参四:int * pnRow
获取到的表的 总行数

形参五:int * pnColumn
获取到的表的 总列数

形参六:char pzErrmsg
获取错误信息存放的地址,内部存放的字符串即为错误信息;
出现错误信息后记得使用 ==sqlite3_free()==将其内存释放;
返回参数**:
成功返回 0
失败返回错误码

    char * look = "select * from 学生信息";
    char ** paz_result;

    int hang;
    int lie;

    if (SQLITE_OK != sqlite3_get_table(sql_db,look,&paz_result,&hang,&lie,&errmsg))
    {

        fprintf(stderr,"数据库操作错误\n%s\n",errmsg);

        sqlite3_free(errmsg);

        return -1;
    }

    printf("一共有%d行,每行参数%d个(列)\n",sum,lie);
    printf("参数分别为:");
    for (int temp = 0; temp < lie; temp++)
    {
        printf("%s\t",paz_result[temp]);
    }
    printf("\n\n详细信息\n");

    int i,j,index = 0;
    for ( i = 0; i  hang; i++)
    {
        for ( j = 0; j < lie; j++)
        {
            printf("%s\t",paz_result[index]);
            index ++;
        }
        printf("\n");
    }

Original: https://blog.csdn.net/qq_50894278/article/details/126352992
Author: David_无霸哥
Title: Linux下使用SQLite3基本功能

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816726/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球