sqlite基本操作

简介

文章目录

1.数据库的安装

   sudo dpkg -i  *.deb

这个报错表明出现依赖问题

用这个命令后再试试sudo apt --fix-broken install

2.数据库命令:

  1)系统命令 , 都以'.'开头
     .exit 
     .quit
     .table   查看表
     .schema  查看表的结构 

sql语句, 都以';'结尾

    1-- 创建一张表
        create table stuinfo(id integer, name text, age integer, score float);
    
    2-- 插入一条记录
        insert into stuinfo values(1001, 'zhangsan', 18, 80);
        insert into stuinfo (id, name, score) values(1002, 'lisi', 90);

    3-- 查看数据库记录
        select * from stuinfo;
        select * from stuinfo where score = 80;
        select * from stuinfo where score = 80 and name= 'zhangsan';
        select * from stuinfo where score = 80 or name='wangwu';
        select name,score from stuinfo;  查询指定的字段
        select * from stuinfo where score >= 85 and score < 90;

    4-- 删除一条记录
        delete from stuinfo where id=1003 and name='zhangsan';

    5-- 更新一条记录
        update stuinfo set age=20 where id=1003;
        update stuinfo set age=30, score = 82 where id=1003;

    6-- 删除一张表
        drop table stuinfo;

    7-- 增加一列
        alter table stuinfo add column sex char;

    8-- 删除一列
        create table stu as select id, name, score from stuinfo;
        drop table stuinfo;
        alter table stu rename to stuinfo;

API,创建表单

代码

用c来调用sqlite

功能指令明细

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

#define  DATABASE  "student.db"
#define  N  128

//1、2、3、4、5具体操作的实现
int do_insert(sqlite3 *db)
{
  int id;
  char name[32] = {};
  char sex;
  int score;
  char sql[N] = {};
  char *errmsg;

  printf("Input id:");
  scanf("%d", &id);

  printf("Input name:");
  scanf("%s", name);
  getchar();

  printf("Input sex:");
  scanf("%c", &sex);

  printf("Input score:");
  scanf("%d", &score);

  sprintf(sql, "insert into stu values(%d, '%s', '%c', %d)", id, name, sex, score);

  if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("%s\n", errmsg);
  }
  else
  {
    printf("Insert done.\n");
  }

  return 0;
}
int do_delete(sqlite3 *db)
{
  int id;
  char sql[N] = {};
  char *errmsg;

  printf("Input id:");
  scanf("%d", &id);

  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 do_update(sqlite3 *db)
{
  int id;
  char sql[N] = {};
  char name[32] = "zhangsan";
  char *errmsg;

  printf("Input id:");
  scanf("%d", &id);

  sprintf(sql, "update stu set name='%s' where id=%d", name,id);

  if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("%s\n", errmsg);
  }
  else
  {
    printf("update done.\n");
  }

  return 0;
}


int callback(void *arg, int f_num, char ** f_value, char ** f_name)
{
  int i = 0;

  for(i = 0; i < f_num; i++)
  {
  //  printf("%-8s %s", f_value[i], f_name[i]);
    printf("%-8s", f_value[i]);
  }

  printf("++++++++++++++++++++++");
  putchar(10);

  return 0;
}

int do_query(sqlite3 *db)
{
  char *errmsg;
  char sql[N] = "select count(*) from stu where name='zhangsan';";

  if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)
  {
    printf("%s", errmsg);
  }
  else
  {
    printf("select done.\n");
  }
}

int do_query1(sqlite3 *db)
{
  char *errmsg;
  char ** resultp;
  int nrow;
  int ncolumn;

  if(sqlite3_get_table(db, "select * from stu", &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
  {
    printf("%s\n", errmsg);
    return -1;
  }
  else
  {
    printf("query done.\n");
  }

  int i = 0;
  int j = 0;
  int index = ncolumn;

  for(j = 0; j < ncolumn; j++)
  {
    printf("%-10s ", resultp[j]);
  }
  putchar(10);

  for(i = 0; i < nrow; i++)
  {
    for(j = 0; j < ncolumn; j++)
    {
      printf("%-10s ", resultp[index++]);
    }
    putchar(10);
  }

return 0;
}


int main(int argc, const char *argv[])
{

//创建库
  sqlite3 *db;
  char *errmsg;
  int n;
//打开数据库
  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 if not exists stu(id int, name char , sex char , score int);",
        NULL, NULL, &errmsg) != SQLITE_OK)
  {
    printf("%s\n", errmsg);
  }
  else
  {
    printf("Create or open table success.\n");
  }

//1、2、3、4、5功能的目录,while保持每次执行完再选择相应操作
  while(1)
  {
    printf("********************************************\n");
    printf("1: insert  2:query  3:delete 4:update 5:quit\n");
    printf("********************************************\n");
    printf("Please select:");
    scanf("%d", &n);

    switch(n)
    {
      case 1:
        do_insert(db);
        break;
      case 2:
        do_query(db);
      //  do_query1(db);
        break;
      case 3:
        do_delete(db);
        break;
      case 4:
        do_update(db);
        break;
      case 5:
        printf("main exit.\n");
        sqlite3_close(db);
        exit(0);
        break;
      default :
        printf("Invalid data n.\n");
    }

  }




  return 0;
}

运行

gcc student.c -lsqlite

./a.out

c

sprintf()

getchar和scanf()

用户回车\n

输入的字符会暂时存在缓冲区,等待getchar和scanf拿走

scanf()遇到 \n退出,不拿走\n

getchar()遇到\n退出,会拿走\n

getchar()和scanf()

相关推荐
失心疯_202335 分钟前
006.MySQL_查询数据
数据库·sql·mysql·关系型数据库·sqlyog·mysql教程·查询语句
环能jvav大师43 分钟前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
骆晨学长1 小时前
基于springboot的智慧社区微信小程序
java·数据库·spring boot·后端·微信小程序·小程序
@月落1 小时前
alibaba获得店铺的所有商品 API接口
java·大数据·数据库·人工智能·学习
楠枬1 小时前
MySQL数据的增删改查(一)
数据库·mysql
goTsHgo1 小时前
从底层原理上解释 clickhouse 保证完全的幂等性
数据库·clickhouse
阿华的代码王国3 小时前
MySQL ------- 索引(B树B+树)
数据库·mysql
Hello.Reader3 小时前
StarRocks实时分析数据库的基础与应用
大数据·数据库
执键行天涯3 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
yanglamei19624 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask