Sqlite3数据库

数据库软件

     关系型数据库:
        Mysql   (开源,中型数据库)
        Oracle     (大型数据库)
        SqlServer
        Sqlite  (小型,嵌入式,手机,相机)
    非关系型数据库:
        Redis
        NoSQL

1.数组、链表、文件、数据库


    数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失)
    文件、数据库: 外存存放数据的方式(代码运行结束、关机数据不会丢失)

    文件:数据量很小         处理效率很低
    数据库:数据量很大       处理数据(增删改查)效率高

        DB                数据库 select update database
        DBMS           数据库管理系统
        MIS               管理信息系统
        OA                 办公自动化


sqlite3      www.sqlite.org  www.kernal.org   GNU    的开源软件
    特点:
          1、开源  C语言开发
          2、代码量少 1万行左右,总大小10M以内
          3、绿色软件无需安装
          4、文件型数据库,可以移动。
          5、数据容量最大 2T   

安装sqlite数据库:


    1.让虚拟机能够上网
    2.apt-get工具集配置好
    3.sudo apt-get install sqlite3 

       sudo apt-get install libsqlite3-dev   软件开发包

       gcc test.c -lsqlite3 -lpthread

        验证是否安装成功:
        sqlite3 --version
        sqlite3 --help
    4.启动sqlite3 
        sqlite3 
    5.输入.quit退出 

SQL语言  

struct query langluage 结构化查询语言  只能用在关系型数据库

不区分大小写。大小写都可以用

一些常用的sql命令

        .help查看

  •   .database 列出当前库和系统中那个文件在关联
  •   .tables    列出当期数据库中的所有表  (类似 ls)
  •   .schema xxx  查看指定表的结构:
  •    .dump user   ===>导出数据库
  •    .headers on  显示表头的标签
     

1.CREATE TABLE 语句用于创建数据库中的表。

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

)

创建名为 "Person" 的表。

该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

空的 "Persons" 表类似这样:

Id_P

LastName

FirstName

Address

City

 

 

 

 

 


删除一个表:
        drop table  表名;
        eg:drop table user; 

 

插入时间列 int int;
    unicode

datetime就是一个数据类型

创建表的时候就给时间 弄一列


    CREATE TABLE user1(id int,name char,age int,dt datetime);'2022-07-01 19:00:00'

    insert into user1 values (2,'张三',23,datetime('now','+8 hours'));

自动增长列
sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime); “主键”  给每行取个编号  主键 的信息不能重复  ,用主键查询速度更快

sqlite> insert into user3 (NULL,'李四',23,datetime('now'));  之后这个元素填NULL 他就会自动填入


    

2.增——INSERT INTO 语句用于向表格中插入新的行。

INSERT INTO 表名称 VALUES (1, 2,....)

insert into 表名 (字段名称)values(值)

   向表中增加数据:
       insert into 表名 (字段名称 ) values (值名称);
       eg:insert into user (id,age) values (1,10);

       insert into user values(3,"wang",11);
       insert into user (age) values ( 12);

出现 ...>         

        说明一行没有输入完    只有结尾写上 ;  才会算输入一行

 原表:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');

插入后:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Gates

Bill

Xuanwumen 10

Beijing

在指定的列中插入数据:

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Gates

Bill

Xuanwumen 10

Beijing

Wilson

 

Champs-Elysees

 


 3.删——DELETE 语句用于删除表中的行。

DELETE FROM 表名称 WHERE 列名称 =

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Fred

Zhongshan 23

Nanjing

DELETE FROM Person WHERE LastName = 'Wilson';

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

删除所有行 

DELETE FROM table_name

4.改——修改表中的数据

        update 表名 set 表字段 = 值  满足条件:


       eg: update user set id = 1 where name = 'li';
       update user set id = 1 where name = "li" and passwd = "123";
       update user set id = 2 where name = "li" or  name = "zhao";

5.查——看表中的数据

 select 列名 from 表名  条件;
       eg:select * from user ;    查看user中所有的内容
               select id from user;
               select id,name from user where not  age <30
                        select id,name from user      where name   like '三一'   % _ 通配符

               select *from user where age>20 or age<50 order by age desc ;  排序

order by 排序

默认 asc 升序 从小到大

        desc 逆序 从大到小

数据库维护命令:

1、数据的导出:
        sqlite3 xxx.db .dump > xxx.sql
    //将数据库名称为xxx的数据库整体导出到脚本中。

2、数据的导入:
        sqlite3 xxx.db < xxx.sql

3、可视化工具安装:
    sudo apt-get install sqlitebrowser 

C语言 调用数据库

sqlite3 数据库编程接口:

1、需要的头文件
        sqlite3.h

2、编译过程
        -lsqlite3

3、编程框架:
打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库

sqlite3.h

1 打开数据库: sqlite3_open


    int sqlite3_open(char * path,sqlite3 ** db);
    功能:打开指定path路径+文件名称的数据库,并将
          打开的地址指向db变量的句柄。
    参数:path 要打开的数据库路径+名称
          db  要打开的数据库地址指针
    返回值:成功  0
            失败  -1;

2 关闭数据库: sqlite3_close


    int sqlite3_close(sqlite3 *db);
    功能:关闭指定的数据库
    参数:要关闭的数据库地址
    返回值:成功  0
            失败  -1;

3 数据库操作:sqlite_exec

执行sql语句的操作
    int sqlite3_exec(
        sqlite3*,                                  /* An open database */
        const char *sql,                           /* SQL to be evaluated */
        int (*callback)(void*,int,char**,char**),  /* Callback function */
        void *,                                    /* 1st argument to callback */
        char **errmsg                              /* Error msg written here */
    );
    功能:
        执行一条SQL语句
    参数:
        sqlite3*: 数据库句柄
        sql: 要执行的SQL语句字符串首地址
        callback: 只有在select时才会使用,其余调用时传递NULL
        void*: 给回调函数的传参
        errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)
    返回值:
        成功返回SQLITE_OK
        失败返回错误码 
    查询操作:sqlite3_get_table();  select 

    int sqlite3_get_table(sqlite3 *db,char *sql,
                    char *** rest,int *nrow,int *ncol,
                    char ** errmsg);

    功能:在db数据库上执行sql查询语句,并将执行的
          结果集返回到rest地址上,同时返回查询的行和列。
    参数:db 要执行查询语句的数据库
          sql  要执行的select查询语句
          rest 查询的结果集是一个三级指针
          nrow 查询的结果的行数
          ncol 查询的结果的列数
          errmsg 如果执行有错误,则存储错误。
    返回值:成功 0
            失败 非0;

    


向数据库的表中插入一行数据:

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


int main(int argc, const char *argv[])
{
	sqlite3 *db;
	int ret = sqlite3_open("./text1.db",&db);
	if(SQLITE_OK != ret)
	{
		fprintf(stderr,"open error:%s\n",sqlite3_errmsg(db));
		sqlite3_close(db);
		return 1;
	}

	char sql_cmd[] = "insert into user values(7,'LUBU',22);";
	char *errmsg;
	ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);
	if(SQLITE_OK != ret)
	{
		fprintf(stderr,"open error:%s\n",errmsg);
		sqlite3_free(errmsg);
		sqlite3_close(db);
		return 1;
	}

	return 0;
}

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值