Sqlite3数据库

学习目标:

1.了解数据库的类型

2.学会使用数据库的增删查改操作

3.通过C语言实现数据库的增删查改操作


学习内容:

 数据库简介

 sqlite3   mysql mssql

SQL struct query language 关系型数据库    非关系 芒果db
ddl  data defination language 建表
dml 新增 修改 删除一行 data modifty 
dql 查询 data query language    查询  select 

数据库
sun
solaris  gnu
1、分类: 大型    中型     小型
 ORACLE   MYSQL/MSSQL   SQLITE  DBII powdb
关系型数据库        
2、名词:
DB 数据库 select update database
DBMS 数据库管理系统
MIS     管理信息系统
OA      办公自动化
3、嵌入式数据库:
sqlite3    www.sqlite.org  www.kernal.org
GNU   
特点:
  1、开源  C语言开发
  2、代码量少 1万行左右,总大小10M以内
  3、绿色软件无需安装
  4、文件型数据库,可以移动。
  5、数据容量最大 2T   

插入时间列 int int;

软件安装

sudo apt-get install sqlite3 //sqlite3管理工具
sudo apt-get install libsqlite3-dev//sqlite3开发库
sudo apt-get install sqlitebrowser //可视化工具
sqlite3 --version//查看sqlite3版本信息
whereis sqlite3//查看可执行文件位置

 库的使用

 1、库的打开

sqlite3 test.db  

===>用sqlite3 来打开一个名称为test.db的本地数据库。

出现如下提示符:表明数据库管理系统启动。

 

  2、库的创建

touch  xxx.db//或 sqlite3 xxx.db

 3、输入输出

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

 4、创建表格

create table user(id int  ,name char,age int);//创建一个user表

create table 表名 (表字段 类型,表字段 类型,。。。。);

  5、插入数据

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

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

   6、查询数据

  select * from user ;//查询user表的所有信息
  select id from user;/查询user表的id信息
  select id,name from user where age <30//查询user表中年龄小于30岁的ID,name信息 

select 列名 from 表名  where从句:条件;

   7、修改数据

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";

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

     8、删除数据

delete from user ;  ///删除表中所有数据
delete from user where id  = 1; ///删除id=1 的数据;
delete from user where id =1 and name = "zhang";
delete from user where id = 1 or id  = 2;

delete from 表名  满足条件:

    9、删除表格

drop table user;//删除user表   

drop table  表名;

    10、约束主键

CREATE TABLE users (
    id INTEGER PRIMARY KEY,//使用PRIMARY KEY约束将其设置为主键
    username TEXT NOT NULL//使用NOT NULL约束确保它不能为空。
);

    11、自动增长列 

sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime); 

 插入时间列 int int;
unicode

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'));

   12、help命令

出现所有相关的系统维护命令,都是以 "."开头。
.database  列出当前库和系统中那个文件在关联
.tables    列出当期数据库中的所有表
.schema xxx 列出当前指定的xxx表结构
.dump user   ===>导出数据库

   13、库的结束

.q//退出sqlite3

 编程使用

 打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库

函数接口

打开数据库
 sqlite3_open

函数原型:int sqlite3_open(char * path,sqlite3 ** db);
功能:打开指定path路径+文件名称的数据库,并将打开的地址指向db变量的句柄。
参数:path 要打开的数据库路径+名称;

           db  要打开的数据库地址指针
返回值:成功  0;失败  -1;

操作数据库
sqlite3_get_table()

函数原型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;

sqlite3_exec();

函数原型:int sqlite3_exec(sqlite3 *db,char *sql,callback fun,void * arg,char ** errmsg);
功能:在db数据库上执行sql 非查询语句。并将结果返回。
参数:db 要执行sql的数据库
          sql  要执行的非查询sql语句。
          fun  如果该函数要执行查询语句,则该回调函数用来回收查询的结果。
          arg  回调函数的参数,如果没有回调函数则该参数为NULL;
          errmsg  执行过程中的错误信息。
返回值:执行成功  0;失败  非0 ;

fun

int fun(void *arg ,int f_num,char ** f_value,char ** f_name)
功能:该函数用于sqlite3_exec执行select语句的结果集返回数据。
参数:arg 由sqlite3_exec传入的参数
  f_num 执行该命令所返回测结果集的字段个数。
  f_value 查询结果集中的字段的值。
  f_name  查询结果集中的字段的名称。
返回值:成功 0;失败 非0

注意:该回调函数必须有返回值,否则可能导致查询异常。 

关闭数据库
sqlite3_close

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


学习产出:

字典查询

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
//#define DEBUG
int show(void*arg ,int col ,char**result ,char**title)
{

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


    char * errmsg;
    int flag = 0;
    char sql_cmd[256]={0};

    strcpy(sql_cmd,"CREATE TABLE if not exists dict(id INTEGER PRIMARY KEY ASC, word char , mean text);");
    ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"exec sqlcmd cmd  %s error: %s\n",sql_cmd,errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db); 
        return  1;
    }

    bzero(sql_cmd,sizeof(sql_cmd));
    strcpy(sql_cmd,"delete from dict");
     ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);// (void*)0
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"exec sqlcmd cmd  %s error: %s\n",sql_cmd,errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db); 
        return  1;
    }

    FILE* fp = fopen("/home/linux/dict.txt","r");
    if(NULL == fp)
    {
        perror("fopen");
        exit(1);
    }

    while(1)
    {
        char buf[512]={0};
        
        if(NULL == fgets(buf,sizeof(buf),fp))
            break;
        char* word = strtok(buf," ");
        char * mean =strtok(NULL,"\r");
        bzero(sql_cmd,sizeof(sql_cmd));
        sprintf(sql_cmd,"insert into dict values(NULL,\"%s\",\"%s\");",word,mean);
        ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);// (void*)0
        if(SQLITE_OK != ret)
        {
            fprintf(stderr,"exec sqlcmd cmd  %s error: %s\n",sql_cmd,errmsg);
            sqlite3_free(errmsg);
            sqlite3_close(db); 
            return  1;
        }
    }
    sqlite3_close(db);
    return 0;
}

注:本博客仅供学习和参考;参考资料《mysql必知必会》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值