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 <table name> (name1 type , name2 type. . . . . .);
    ​type:字段类型
    integer ->int
    text/char ->字符串类型
    ​ rear->浮点型
    示例:
    create table usrInfo(usrname text, passwd char);

删除表

  • sqlite>drop table <tablename>;

插入记录


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

查看记录


  • sqlite>select * from <table_name>;

更新数据


  • sqlite>update <table_name> set <f1=value1>, <f2=value2> ... where <expression>;

按指定条件删除数据


  • sqlite>delect from <table_name> where <expression>;

按指定条件查询表中记录


  • sqlite >select * from <table_name> where <expression>;

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


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

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

  • SQlite编程接口

    • 1、打开数据库

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


        功能:打开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 <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
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、执行效果

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值