0
点赞
收藏
分享

微信扫一扫

【Linux SQLite数据库】一、SQLite交叉编译与移植

Villagers 2024-08-10 阅读 40

目录

学习内容:

 数据库简介

数据库的分类

相关名词

sqlite3特点:

数据库中各种单位的关系

数据库语言的划分

软件安装

 库的使用

 编程使用

函数接

学习产出:


学习目标:

1.了解数据库的类型

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

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


学习内容:

 数据库简介

 数据库的分类

按数据关系分类

关系型数据库;SQL struct query language 

非关系型数据库:芒果db

按功能强弱分类

大型数据库:ORACLE

中型数据库: MYSQL(支持linux和window)/MSSQL(只支持window) 

小型数据库:SQLITE
注意:以上举例均为关系型数据库  

相关名词

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

sqlite3特点:

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

数据库中各种单位的关系

库
{
    表
    {
        字段,字段,字段;//记录
        字段,字段,字段;//记录
    }
    表
    {
        字段,字段,字段;//记录
        字段,字段,字段;//记录
        字段,字段,字段;//记录
    }
}

 以上为方便理解的表达,并非规范形式。字段是数据库中的最小单位,若干字段组成一条记录,若干记录组成一张表格,若干表格组成一个数据库。

数据库语言的划分

ddl 建表语言

 data defination language 建表
dml 

新增 修改 删除一行 data modifty 
dq

 查询 data query language    查询  select 

软件安装

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
操作数据库
sqlite3_get_table()
sqlite3_exec();
fun

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

关闭数据库
sqlite3_close

学习产出:

字典查询

#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;
}
举报

相关推荐

0 条评论