⭐❤️sqlite数据库使用大全❤️⭐

基础sql语句

在这里插入图片描述

创建表:create

语句,每个表都可以通过 primary key 手动设置主键,每个表只能有一个主键,设置为 主键的列数据不可以重复。
语法:create table 表名称 (列名称 1 数据类型, 列名称 2 数据类型, 列名称 3 数据类型, …);

修改表:

alter 语句
在已有的表中添加或删除列以及修改表名。 语法: (添加、删除-sqlite3 暂不支持、重命名)
语法:alter table 表名 add 列名 数据类型;
语法: (alter 修改表名) alter table 表名 rename to 新表名;

删除表:

drop table 语句
drop table 表名称;

插入新行:

insert into 语句(全部赋值) 给一行中的所有列赋值。
语法:insert into 表名 values (列值 1, 列值 2, 列值 3,列值 4, …); 注意: 当列值为字符串时要加上‘’号。

插入新行:insert into 语句部分赋值) 给一行中的部分列赋值
语法: insert into 表名 (列名 1, 列名 2, …) values (列值 1, 列值 2, …);

修改表中的数据:

update 语句 使用 where 根据匹配条件,查找一行或多行,根据查找的结果修改表中相应行的列值(修改哪一列由 列名指定)。
语法:update 表名 set 列 1 = 值 1 [, 列 2 = 值 2, …] [匹配条件]; 匹配:where 子句 where 子句用于规定匹配的条件

删除表中的数据:

delete 语句 使用 where 根据匹配条件,查找一行或多行,根据查找的结果删除表中的查找到的行。
语法:delete from 表名 [匹配条件]; 注意:当表中有多列、多行符合匹配条件时会删除相应的多行

查询:

select 语句(基础) 用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
语法:
1、select * from 表名 [匹配条件];
2、select 列名 1[, 列名 2, …] from 表名 [匹配条件]; 提示:星号(*)是选取所有列的通配符

in

in 允许我们在 where 子句中规定多个值。
匹配条件语法: where 列名 in (列值 1, 列值 2, …)
例:
1、select * from 表名 where 列名 in (值 1, 值 2, …);
2、select 列名 1[,列名 2,…] from 表名 where 列名 in (列值 1, 列值 2, …)

and

and 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是与的关系)。
匹配条件语法: where 列 1 = 值 1 [and 列 2 = 值 2 and …]
例:1、select * from 表名 where 列 1 = 值 1 [and 列 2 = 值 2 and …];
2、select 列名 1[, 列名 2, …] from 表名 where 列 1 = 值 1 [and 列 2 = 值 2 and …];

or

or 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是或的关系)。
匹配条件语法: where 列 1 = 值 1 [or 列 2 = 值 2 or …]
例:1、select * from 表名 where 列 1 = 值 1 [or 列 2 = 值 2 or …];
2、select 列名 1[,列名 2,…] from 表名 列 1 = 值 1 [or 列 2 = 值 2 or …];

between and

操作符 between A and B 会选取介于 A、B 之间的数据范围。这些值可以是数值、文本或者日期。
注意:不同的数据库对 between A and B 操作符的处理方式是有差异的。
(1)有些数据库包含 A 不包含 B。
(2)有些包含 B 不包含 A。
(3)有些既不包括 A 也不包括 B。
(4)有些既包括 A 又包括 B。
匹配条件语法: where 列名 between A and B
例:1、select * from 表名 where 列名 between A and B;
2、select 列名 1[,列名 2,…] from 表名 where 列名 between A and B;
注: 匹配字符串时会以 ascii 顺序匹配。

not

not 可取出原结果集的补集。
匹配条件语法:where 列名 not in 列值等
例:
1、where 列名 not in (列值 1, 列值 2, …)
2、 where not (列 1 = 值 1 [and 列 2 = 值 2 and …])
3、where not (列 1 = 值 1 [or 列 2 = 值 2 or …])
4、where 列名 not between A and B
5、where 列名 not like 列值 在终端下输入:

order by

order by 语句
根据指定的列对结果集进行排序。 默认按照升序对结果集进行排序,可使用 desc 关键字按照降序对结果集进行排序。 例:升序select * from 表名 order by 列名; 降序select * from 表名 order by 列名 desc;

事务

事务(Transaction)可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。此类事务通常会持续执行下 去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。不过在数据库关闭或发生错误时,事务处理也会回滚。
以下是启动一 个事务的简单语法: 在 SQLite 中,默认情况下,每条 SQL 语句自成事务。
begin:开始一个事务,之后的所有操作都可以取消
commit:使 begin 后的所有命令得到确认。
rollback:取消 begin 后的所有操作。
例:sqlite->begin; sqlite->delete from persons;

数据分组 group by

分组数据,以便能汇总表内容的子集,常和聚集函数搭配使用。例如查询每个班级中的人数、平均分
select 列名 1[, 列名 2, …] from 表名 group by 列名

过滤分组 having

除了能用 group by 分组数据外,还可以包括哪些分组,排除哪些分组。例如:查看班级平均分大于 90 的班级 通过 having
语法: select 函数名(列名 1)[, 列名 2, …] from 表名 group by 列名 having 函数名 限制值

安装sqilte3数据库

SQLite 是一个开源的、内嵌式的关系型数据库,第一个版本诞生于 2000 年 5 月,目前最高版本为 SQLite3。
下载地址:http://www.sqlite.org/download.html 学习网站:http://www.runoob.com/sqlite/sqlite-tutorial.html
安装方法(ubuntu12.04 下):
字符界面sudo apt-get install sqlite3
图形界面sudo apt-get install sqliteman

SQLite C 编程(用代码来进行数据库的编写)

打开、关闭数据库函数

 int sqlite3_open(char *db_name,sqlite3 **db); 
 功能:打开数据库。
  参数:db_name:数据库文件名,若文件名包含 ASCII 码表范围的之外的字符,则其必需是(UTF-8)编码。
   sqlite3:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。 
   返回值:成功返回 SQLITE_OK,失败返回非 SQLITE_OK。
 
 
   int sqlite3_close(sqlite3 *db); 
   功能:关闭数据库、释放打开数据库时申请的资源。 
   参数:db:数据库的标识。 返回值:成功返回 SQLITE_OK。 
   失败返回非 SQLITE_OK。

注意:sqlite3 使用了两个库:pthread、dl,故链接时应加上 -lpthread 和 -ldl

SQL 语句的执行(回调)

sqlite3_exec 函数:
 int sqlite3_exec(sqlite3 *db, const char *sql, exechandler_t callback, void *arg, char **errmsg); 功能:执行 sql 指向的 SQL 语句,若结果集不为空,函数会调用函数指针 callback 所指向的函数。
 参数:
 db:数据库的标识。 
 sql:SQL 语句(一条或多条),以’;’结尾。
 callback:是回调函数指针,当这条语句执行之后,sqlite3 会去调用你提供的这个函数。
 arg:当执行 sqlite3_exec 的时候传递给回调函数的参数。 
 errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。
 打印错误信息方法:printf("%s\n", errmsg);

在这里插入图片描述

回调函数指针

## 回调函数指针: 
typedef int (*exechandler_t)(void *para, int n_column, char **column_value, char **column_name); 
功能:此函数由用户定义,当 sqlite3_exec 函数执行 sql 语句后,结果集不为空时 sqlite3_exec 函数会自动调 用此函数,每次调用此函数时会把结果集的一行信息传给此函数。
 参数:
 para:sqlite3_exec 传给此函数的参数,para 为任意数据类型的地址。
 n_column:结果集的列数。
  column_value:指针数组的地址,其存放一行信息中各个列值的首地址。 
 column_name:指针数组的地址,其存放一行信息中各个列值对应列名的首地址。
 返回值:若为非 0 值,则通知 sqlite3_exec 终止回调。

SQL执行语句的函数(非回调)

sqlite3_get_table 函数: 
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);
 功能:执行 sql 指向的 SQL 语句,函数将结果集相关的数据的地址保存在函数的参数中。
  参数:
  db:数据库的标识。 sql:SQL 语句(一条或多条),以’;’结尾。
   resultp:指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每 一行各列的值。
   nrow:结果集的行数(不包含列名)。
   ncolumn:结果集的列数。
   errmsg:错误信息。 

获取非回调结果集的函数

  sqlite3_free_table 函数: 
  void sqlite3_free_table(char **resultp); 
  功能:释放 sqlite3_get_table 分配的内存。
   参数:结果集数据的首地址

简单的SQL代码的编写

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

/*功能:此函数由用户定义,当 sqlite3_exec 函数执行 sql 语句后,结果集不为空时 sqlite3_exec 函数会自动调 用此函数,每次调用此函数时会把结果集的一行信息传给此函数。
 参数:
 para:sqlite3_exec 传给此函数的参数,para 为任意数据类型的地址。
 n_column:结果集的列数。
  column_value:指针数组的地址,其存放一行信息中各个列值的首地址。 
 column_name:指针数组的地址,其存放一行信息中各个列值对应列名的首地址。
 返回值:若为非 0 值,则通知 sqlite3_exec 终止回调。*/
 int result_back(void *para, int n_column, char **column_value, char **column_name)
{
    int i = 0;
    printf("para = %d\n", *(int *)para);
    printf("n_column =%d \n", n_column);
    for (i = 0; i< n_column;i++)
    {
        printf("column_name=%s\tcolumn_value=%s\n", column_name[i], column_value[i]);
    }
    return 0 ;
}

int main()
{
    int i;
    char *myerrmsg = NULL;
    //数据库名字
    char *db_name = "ismyfirst.db";

    //数据库句柄
    sqlite3 *db_handele = NULL;
    if(SQLITE_OK!= sqlite3_open(db_name,&db_handele))
    {
        printf("open fail\n");
        return -1;
    }
     printf("open suceesee\n");

  if(SQLITE_OK!=sqlite3_exec(db_handele, "create table stu(id interger,score real);", result_back,NULL,&myerrmsg))
  {
      printf("%s\n", myerrmsg);
  }

    //传递给回调函数的值,回调函数的调用一般是在查询语句钟产生
  int test = 99;
      char buf[100] = {0};
      sprintf(buf, "select *from stu");
      if (SQLITE_OK != sqlite3_exec(db_handele, buf, result_back,&test, &myerrmsg))
      {
          printf("%s\n", myerrmsg);
      }
// }

    if (SQLITE_OK != sqlite3_close(db_handele))
    {
        printf("close fail\n");
        return -1;
    }
    printf("close success\n");
    return 0;
}

在这里插入图片描述
进行了一些简单的容错,如果这张表创建过 了就不会创建了。

文本处理函数

常用的文本处理函数:
length() 返回字符串的长度
lower() 将字符串转换为小写
upper() 将字符串转换为大写
语法:select 函数名(列名) from 表名;

聚集函数

用于检索数据,以便分析和报表生成
avg() 返回某列的平均值
count() 返回某列的行数
max() 返回某列的最大值
min() 返回某列的最小值
sum() 返回某列值之和
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔动山霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值