Sqlit(数据库)学习

简介: Sqlit(数据库)学习

数据库

数据


  • 能够输入计算机并能被计算机程序识别和处理的信息集合。

数据库


  • 数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合。

常用数据库


  • Oracle关系数据库产品目前市场占有率名列前茅。
  • server是微软开发的数据库,主要支持Windows平台。
  • MySQL是一个小型数据库,开发者为瑞典MySQL公司,是一款开源数据库。

基于嵌入式的数据库


  • 基于嵌入式Linux的数据库主要有sqlite、Firebird、Berkeley DB,extremeDB。
  • sqlite关系型数据库,体积小,支持ACID事务。

SQLITE基础


  • sqlite的源代码是C,且完全开放,属于一个轻量级的嵌入式数据库。
  • sqlite——零配置,无需安装和管理配置。
  • 存储在单一磁盘文件中的一个完整的数据库。
  • 数据库文件可以在不同字节顺序的机器间自由共享。
  • 支持数据库大小至2Tb。
  • 足够小,全部源代码大约3万行C代码,250kb。
  • 比目前流行的大多数数据库对数据的操作要快。

sqlite 安装

  • 下载 .deb安装文件进行安装。(本地安装)
  • sudo dpkg -i *.deb
  • 在线安装
  • sudo apt-get install sqlite3

sqlite 基本命令

  • sqlite3 student.db (创建一个名为student的sqlite数据库)
  • 系统命令,以 . 开头。
  • .help 帮助
  • .quit 退出
  • .exit 退出
  • .schema 查看表的结构
  • .databases 查看打开的数据库
  • sql命令

创建命令

* create table stu(id Integer, name char, score Integer); 创建一个stu表,并设置表内所含字段和类型,以分号结尾。


插入命令


  • insert into stu values(1002, “lisi”, 90); 插入数据。
  • select * from stu;查询表内所有字段数据。
  • insert into stu (name, score)values(1003, “wangwu”);部分字段插入数据。

查询命令


  • select from stu; 查询部分字段。
  • select * from stu where score=80;查询score=80的数据。
  • select * from stu where score=80 and id=1001;查询同时满足两个条件的数据。
  • select * from stu where score=80 or id=1001;查询满足两个条件任意一个的数据。

删除命令


  • delete from stu where name=“wangwu”;删除指定条件的数据。

修改数据命令


update stu set name=“wangwu” where id=1001;将id=1001的数据的name修改。

update stu set name=‘wangwu’ , score=88 where id=1001; 同时修改多个字段的数据。

修改表属性命令


  • alter table stu add column address char;添加char属性的address字段。(插入一列或者添加字段)

  • 不支持删除字段,所以需要通过创建新表格来完成删除字段操作。

  • create table stu1 as select id, name, score from stu;(创建一个新的表格,从原有表格中提取指定字段数据)
  • drop table stu;(删除原有表格)
  • alter table stu1 rename to stu;(将新表格改名成原有表格)

sqlite编程接口

sqlite3 函数接口

打开数据库


int sqlite3_open(const char *filename, sqlite3 **ppDb)

1

功能:打开一个数据库

参数:filename——数据库路径名,ppDB——代表操作句柄。

返回值:成功返回SQLITE_OK。


关闭数据库


int sqlite3_close(sqlite3 *db);

1

功能:关闭一个数据库。

返回值:成功返回SQLITE_OK。


使用示例代码(学生管理):

/*************************************************************************
  > File Name: student.c
  > Author: 
  > Mail: 
  > Created Time: 2019年06月01日 星期六 18时48分11秒
 ************************************************************************/
#include
#include
#include
#define DATABASE "stu.db"
int do_insert(sqlite3 *db){
    int id;
    char name[32] = {0};
    int score;
    char sql[128] = {0};
    char *errmsg;
    printf("please input id\n");
    scanf("%d", &id);
    getchar();
    printf("please input name\n");
    scanf("%s", name);
    getchar();
    printf("please input score\n");
    scanf("%d", &score);
    getchar();
    sprintf(sql, "insert into stu values(%d, '%s', %d);", id, name, score); //使用插入语句,注意字符串类型的数据需要加引号
    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("inset done.\n");
    }
    return 0;
}
//定义查询的回调函数
int callback(void *para, int f_num, char **f_value, char **f_name){
    printf("do->callback\n");
    int i = 0;
    for(i = 0; i < f_num; i++){
        printf("%-11s", f_value[i]);
    }
    putchar(10);
    return 0;
}
int do_query(sqlite3 *db){
    int id;
    char name[32] = {0};
    int score;
    char sql[128] = {0};
    char *errmsg;
    printf("do->query\n");
    sprintf(sql, "select * from stu;");
    if(sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("query done.\n");
    }
    return 0;
}
//使用sqlite3_get_table进行查询
int do_query2(sqlite3 *db){
    char sql[128] = {0};
    char *errmsg;
    char **resultp;
    int nrow;
    int ncloumn;
    sprintf(sql, "select * from stu;");
    if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncloumn, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("Query2 done.\n");
    }
    int i,j;
    for(j = 0; j< ncloumn; j++){
        printf("%-11s", resultp[j]);
    }
    printf("\n");
    int index = ncloumn;
    for(i =0; i < nrow; i++){
        for(j = 0; j < ncloumn; j++){
            printf("%-11s", resultp[index++]);
        }
        printf("\n");
    }
    return 0;
}
//执行修改数据语句
int do_update(sqlite3 *db){
    int id;
    char name[32] = {0};
    int score;
    char sql[128] = {0};
    char *errmsg;
    printf("please input id\n");
    scanf("%d", &id);
    getchar();
    printf("please input  modify score\n");
    scanf("%d", &score);
    getchar();
    sprintf(sql, "update stu set score=%d where id=%d;",score,  id);
    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("update done.\n");
    }
    return 0;
}
//删除数据语句
int do_delete(sqlite3 *db){
    int id;
    char name[32] = {0};
    int score;
    char sql[128] = {0};
    char *errmsg;
    printf("please input id\n");
    scanf("%d", &id);
    getchar();
    sprintf(sql, "delete from stu where id=%d;", id);
    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("delete done.\n");
    }
    return 0;
}
int main(int argc, const char *argv[]){
    sqlite3 *db;
    char *errmsg;
    if(sqlite3_open(DATABASE, &db) != SQLITE_OK){
        printf("%s\n", sqlite3_errmsg(db));
        return -1;
    }
    else{
        printf("Open DATABASE success!\n");
    }
//执行指定语句创建数据表
    if(sqlite3_exec(db, "create table stu(id Integer, name char, score Integer);", NULL, NULL, &errmsg) != SQLITE_OK){
        printf("%s\n", errmsg);
    }
    else{
        printf("create table stu success.\n");
    }
    int cmd;
    while(1){
        printf("*********************************************\n");
        printf("1:insert 2:delete 3:query 4:update 5:quit.\n");
        printf("*********************************************\n");
        printf("*********************************************\n");
        scanf("%d", &cmd);
        getchar();
        switch(cmd){
            case 1:
                do_insert(db);
                break;
            case 2:
                do_delete(db);
                break;
            case 3:
                do_query2(db);
//                do_query(db);
                break;
            case 4:
                do_update(db);
                break;
            case 5:
                sqlite3_close(db);
                exit(0);
            default:
                printf("Error cmd.\n");
        }
    }
    return 0;
}
相关文章
|
2月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
78 0
|
3月前
|
存储 人工智能 Cloud Native
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
|
3月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
185 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
27天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
7天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
7天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
2月前
|
SQL 数据库 内存技术
学习数据库要掌握的54条SQL查询语句
学习数据库要掌握的54条SQL查询语句
15 0
|
2月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
59 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库学习(小白一文掌握Mysql)
MySQL数据库学习(小白一文掌握Mysql)
44 0