Linux网络编程数据库的使用和创建

一、基本概念

1、数据

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

2、数据库

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

3、数据库管理系统-----DBMS

  • DBMS是数据库系统中对数据进行统一管理和控制的软件系统
    • 1、数据库定义功能
    • 2、数据库操纵功能
    • 3、数据库运行控制功能
    • 4、数据通信功能
    • 5、支持存取海量数据

二、数据库下载

  • sudo apt-get install sqlite3
    sudo apt-get install libsqlite3-dev

三、数据库的使用

1、数据库文件一般以 .db 为后缀

  • sqlite3 test.db ----如果test.db存在则打开,不存在则创建
    .table ------查看数据库文件中有那几张表
    .schema ------查看数据库文件中所有表的详细信息. sqlite>.schema
    .quit --------退出数据库

2、sqlite语句,每个命令以;结束

创建新表


  • sqlite>create table (f1 typel,f2 type2,…);
    create tab1e (name1 type , name2 type. . . . . .);
    ​type:字段类型
    integer ->int
    text/char ->字符串类型
    ​ rear->浮点型
    示例:
    create table usrInfo(usrname text, passwd char);

    删除表

    • sqlite>drop table ;

    插入记录


    • insert into values(data1, data2.. . .);
      ​text/char 都是指的字符串类型""和"'括起来的都表示字符串

    查看记录


    • sqlite>select * from ;

    更新数据


    • sqlite>update set ... where ;

    按指定条件删除数据

    • Linux网络编程数据库的使用和创建_第1张图片

      Linux网络编程数据库的使用和创建_第2张图片


      sqlite>delect from where ;

    按指定条件查询表中记录

    • Linux网络编程数据库的使用和创建_第3张图片


      sqlite >select * from where ;

    四、下载数据库可视化工具


    • sudo apt-get install sqlitebrowser
      可视化工具的使用:
      终端输入:sqlitebrowser
      示例:sqlitebrowser student.db

    五、使用sqlite3提供函数库操作数据库文件

    • SQlite编程接口

      • 1、打开数据库

        • int sqlite3_open(char *path, sqlite3 **db);

          Linux网络编程数据库的使用和创建_第4张图片


          功能:打开sqlite数据库
          ​参数:
          path:数据库文件路径+文件名
          ​ db:指向sqlite句柄的指针
          返回值:成功返回0, 失败返回错误码(非零值)
          ​ sqlist3 *db = NULL;
          sqlite3_open(“students.db”, &db);
      • 2、关闭数据库

        • int sqlite3_close(sqlite3*db);
          功能:关闭sqlite数据库
          返回值:成功返回0,失败返回错误码
      • 3、打印错误信息

        • const char *sqlite3_errmg(sqlist3*db);
          返回值:返回错误信息
    • 执行sqlite语句

      • 1、typedef int (*sqlite3_callback)(void *arg, int,char **, char **);
      • 2、 int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *arg, char **errmsg);
        功能:执行SQL操作
        db:数据库句柄
        sql:SQL语句
        callback:回调函数
        arg:传递给回调函数的参数
        errmsg:错误信息指针的地址
        返回值:成功返回0,失败返回错误码
      • 注意:当需要sqlite3_exec去执行select操作时需要封装callback去处理查询到的记录
      • 3、typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
      • 功能:每找到一条记录自动执行一次回调函数
        para:传递给回调函数的参数
        f_num:记录中包含的字段数目
        f_value:包含每个字段值的指针数组
        f_name:包含每个字段名称的指针数组
        返回值:成功返回0,失败返回-1

    六、示例代码

    1、代码

    #include 
    #include 
    #include 
    #include 
    int callback(void*para, int f_num, char**f_value, char**f_name);
    int main(int argc, char *argv[])
    { 
    
        //打开数据库students.db
        sqlite3 *db = NULL;//接收数据库地址
        if(0 != sqlite3_open("students.db", &db))
        {
            printf("error:%s\n", sqlite3_errmsg(db));
            return -1;
        }
    
        //创建表
        if(0 != sqlite3_exec(db, "create table students (姓名 text, 年龄 text, 成绩 text);", NULL, NULL, NULL))
        {
            printf("%s\n",sqlite3_errmsg(db));
            return -1; //失败退出
        }
        else  //创建表成功继续执行操作
        {
    
            while(1)
            {
                printf("what will you do?\n");
                printf("1(insert), 2(select)\n"); //1插入操作,2查找操作
                char a[10] = {0};
                scanf("%s", a);
                char buf[10] = {0}; //存放姓名
                char buf1[4] = {0};  //存放年龄
                char buf2[4] = {0};  //存放成绩
                char buf3[256] = {0};  //存放操作内容
                if(0 == strcmp(a, "1"))//插入操作
                {
                    while(1)
                    {
                        printf("请选择后续操作:1:输入, 2:退出\n");
                        char b[10] = {0};
                        scanf("%s", b);
                        if(0 == strcmp(b,"1")) //输入内容
                        {
    
                            printf("请输入学生姓名:");
                            scanf("%s", buf);
                            printf("请输入学生年龄:");
                            scanf("%s", buf1);
                            printf("请输入学生成绩:");
                            scanf("%s", buf2);
                            sprintf(buf3, "insert into students values('%s', '%s', '%s');", buf, buf1, buf2); //将命令写入buf3
                            memset(buf, 0, sizeof(buf));
                            memset(buf1, 0, sizeof(buf1));
                            memset(buf2, 0, sizeof(buf2));
                            if(0 != sqlite3_exec(db, buf3, NULL, NULL, NULL)) //执行插入操作
                            {
                                perror("insert error!\n"); //失败
                            }
                            else
                                printf("insert success\n");//成功
    
                        }
                        else if(0 == strcmp(b, "2")) //退出插入模式
                            break;
                    }
                }
                else if(0 == strcmp(a, "2"))  //查找模式
                {
                    if(0 != sqlite3_exec(db, "select* from students;", callback, NULL, NULL))
                    {
                        perror("select error!\n");
                        break;
                    }
                    else
                    {
                        printf("select success\n");
                        break;
                    }
                }
                else
                {       
                    printf("请重新输入:\n");
    
                }
            }
        }
    
        return 0;
    } 
    int callback(void*para, int f_num, char**f_value, char**f_name)
    {
        int i = 0;
        int j = 0;
        printf("********************\n");
        printf("姓名    年龄    成绩\n");
        for(int i = 0;i < f_num;i++)
        {
            printf("%s    ",f_value[i]);
        }
        printf("\n");
        return 0;
    }

    2、执行效果

    Linux网络编程数据库的使用和创建_第5张图片

    你可能感兴趣的:(linux,数据库,sqlite3,网络)