数据库:SQLite的基本命令和使用

1. 数据库安装

1. 测试数据库是否安装

sqlite3  -version 

2. 数据库安装命令

将压缩包拿到虚拟机路径下

1. tar xf sqlite-autoconf-3460000.tar.gz

2. cd sqlite-autoconf-3460000

3. ./configure

4. make

5. sudo make install

3. 图形化工具的安装

sudo apt-get install sqlitebrowser

2. 数据库的概念

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。

3. 常用的数据库

大型数据库 :Oracle

中型数据库 :Server是微软开发的数据库产品,主要支持windows平台

小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据)

MySQLSQLite区别:MySQL和SQLite是两种不同的数据库管理系统,它们在多个方面有所不同。

1. 性能和规模:MySQL通常用于大型应用程序和网站,它可以处理大量数据和高并发访问。SQLite则更适合于小型应用程序或移动设备,因为它是一个轻量级的数据库引擎,不需要独立的服务器进程,可以直接访问本地文件。

2. 部署和配置:MySQL需要单独的服务器进程来运行,需要配置和管理数据库服务器。而SQLite是一个嵌入式数据库,可以直接嵌入到应用程序中,不需要单独的服务器进程。

3. 功能和特性:MySQL提供了更多的功能和高级特性,比如存储过程、触发器、复制和集群支持等。SQLite则是一个轻量级的数据库引擎,功能相对较少,但对于简单的数据存储和检索已经足够。

4. 跨平台支持:SQLite在各种操作系统上都能够运行,而MySQL需要在特定的操作系统上安装和配置数据库服务器。

总之,MySQL适用于大型应用程序和网站,需要处理大量数据和高并发访问,而SQLite适用于小型应用程序或移动设备,对性能和规模要求没有那么高。

4. SQLite基础

SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。

SQLite有以下特性:

1. 零配置一无需安装和管理配置

2. 储存在单一磁盘文件中的一个完整的数据库

3. 数据库文件可以在不同字节顺序的机器间自由共享

4. 支持数据库大小至2TB(1024G = 1TB);//嵌入式足够

5. 足够小,全部源码大致3万行c代码,250KB

6. 比目前流行的大多数数据库对数据的操作要快

操作方式:

手动:使用sqlite3工具,手工输入命令,命令行输入

代码:利用代码编程,调用接口

5. 基本语句的基本使用

1. 创建一个新的数据库:sqlite3  库名.db

2. sqlite3 系统命令

.help 查看所有支持的命令

.quit 退出

.tables  查看有哪些表

.schema  stu  查看表结构

3. SQL 命令(对数据库进行增删改查)

SQL命令是以 “;” 结尾

1创建一个表

create table stu(id int,name char,score float);

create table stu1(id int primary key, name char, score float);

注:把id字段设置为主键(在表中唯一)

2 删除一个表

drop table <table_name> ;

3》 向表里面插入数据

insert into <table_name> values(value1, value2,…);

insert into stu values(1,'xiaomingx',99.9);

//只插入部分字段 id name score

insert into stu(id,name) values(4,'xiaoming')

4 查找数据
查询表中所有记录

select * from <table_name>;

(*表示查询所有的值)

按指定条件查询表中记录

select * from <table_name> where <expression>;

select * from stu where id=2;

select * from stu where id=2 and name='lisi';

select * from stu where id=1 or name='zhangsan';

select score from stu where name='LiSi' or id=3; //满足条件的某列

select name,score from stu where name='LiSi' or id=3;

select * from stu limit 5; //只查询前n条记录

select * from stu order by id desc; //按id从大到小进行排序

5 修改(更新)数据

update <table_name> set <f1=value1>, <f2=value2>… where <expression>;

update stu set id=10 where id=1;

6 增加字段

alter table <table> add column <field> <type> default …;

alter table stu add column class int default 1;(表示添加了一列class,默认值为1)

7 删除字段(在数据库当中其实不支持直接删除一个字段(及一列))

如果就想删除一列,那么需要三步骤

1)创建一个student表,从stu表当中复制id,name,score

2) drop table stu;   //删除原有的stu表

3) alter table student rename to stu;    //重命名

8》删除一行

操作完以后可以图形化界面修改东西,然后在命令行去查看的时候就被修改了。

6. sqlile3编程

头文件:#include <sqlite3.h>

编译:gcc sqlite.c -lsqlite3

7. 函数接口

7.1 打开数据库

int sqlite3_open(char  *path, sqlite3 **db);
功能:打开sqlite数据库,如果数据库不存在则创建它
参数:path: 数据库文件路径
     db: 指向sqlite句柄的指针
返回值:成功返回SQLITE_OK(0),失败返回错误码(非零值)

7.2 返回错误信息

char  *sqlite3_errmsg(sqlite3 *db);
功能:  获取错误信息
返回值:返回错误信息
使用:   fprintf(stderr,"sqlite3_open failed %s\n",sqlite3_errmsg(db));

7.3 关闭数据库

int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回SQLITE_OK,失败返回错误码

7.4 执行sql语句接口

int sqlite3_exec(
  sqlite3 *db,                   /* An open database */
  const char *sql,               /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *arg,                      /* 1st argument to callback */
  char **errmsg                /* Error msg written here */
);

功能:执行SQL操作
参数:db:数据库句柄
    sql:要执行SQL语句
    callback:回调函数(满足一次条件,调用一次函数,用于查询)
        再调用查询sql语句的时候使用回调函数打印查询到的数据
    arg:传递给回调函数的参数
    errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码
回调函数:
typedef int (*sqlite3_callback)(void *para, int f_num, 
         char **f_value, char **f_name);

功能:select:每找到一条记录自动执行一次回调函数
参数:para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)
    f_num:记录中包含的字段数目
    f_value:包含每个字段值的指针数组(列值)
    f_name:包含每个字段名称的指针数组(列名)
返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调
不使用回调函数执行SQL语句(只用于查询)
int sqlite3_get_table(sqlite3 *db, const  char  *sql, 
   char ***resultp,  int *nrow,  int *ncolumn, char **errmsg);

功能:执行SQL操作
参数:db:数据库句柄
    sql:SQL语句
    resultp:用来指向sql执行结果的指针
    nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))
    ncolumn:每条记录包含的字段数目
    errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码

例子:

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

int callback(void *buf, int num, char **value, char **name);

int main(int argc, char const *argv[])
{
    sqlite3 *db;
    // 打开或创建数据库
    if (sqlite3_open("stu.db", &db) != SQLITE_OK)
    {
        fprintf(stderr, "open err:%s\n", sqlite3_errmsg(db));
        return -1;
    }
    printf("open okk\n");

    // 创建表
    char *errmsg = NULL;
    if (sqlite3_exec(db, "create table if not exists stu (id int ,name string,score float)", NULL, NULL, &errmsg) != SQLITE_OK)
    {
        fprintf(stderr, "create err:%s\n", sqlite3_errmsg(db));
        fprintf(stderr, "create err:%s\n", errmsg);
        return -1;
    }

    printf("create okk\n");

    // 插入数据
    /*
    if(sqlite3_exec(db,"insert into stu values(1,'lihua',0)",NULL,NULL,&errmsg)!=SQLITE_OK)
    {
        fprintf(stderr, "insert err:%s\n", errmsg);
        return -1;
    }
    printf("insert okk\n");*/

    int num = 0;
    printf("请输入要输入的学生人数:");
    scanf("%d", &num);
    char sql[64] = {0};
    int id;
    char name[32] = {0};
    float score;
    for (int i = 0; i < num; i++)
    {
        printf("请输入学生信息:");
        scanf("%d %s %f", &id, name, &score);
        sprintf(sql, "insert into stu values(%d,'%s',%f)", id, name, score);
        if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
        {
            fprintf(stderr, "insert err:%s\n", errmsg);
            return -1;
        }
        printf("insert okk\n");
    }

    // 查找数据
    if (sqlite3_exec(db, "select * from stu where id=10", callback, "hello", &errmsg) != SQLITE_OK)
    {
        fprintf(stderr, "select err:%s\n", errmsg);
        return -1;
    }
    printf("select okk\n");

    // 专门用于查询的函数
    // char **result = NULL;
    // int row, column;
    // sqlite3_get_table(db, "select * from stu where id=10", &result, &row, &column, &errmsg);
    // printf("row:%d column:%d\n", row, column);
    // int k=0;
    // printf("aaaa:%s ", result[k++]);
    // for (int i = 0; i <= row; i++)
    // {
    //     for (int j = 0; j < column; j++)
    //         printf("%s ", result[k++]);
    //     putchar(10);
    // }

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

    return 0;
}

// 每查询到一条符合条件的数据,就调用一次此函数
int callback(void *buf, int num, char **value, char **name)
{
    static int a = 1;
    printf("******************** \n");
    printf("%d :%s \n", a++, (char *)buf);
    // num:列数
    // name:列名
    // value:查询到的值
    for (int i = 0; i < num; i++)
        printf("%s ", name[i]);
    putchar(10);
    for (int i = 0; i < num; i++)
        printf("%s ", value[i]);
    putchar(10);
    return 0; // 必须返回0,不然报错
}


如有问题请私信联系我,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值