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()

相关推荐
林的快手39 分钟前
209.长度最小的子数组
java·数据结构·数据库·python·算法·leetcode
HEU_firejef1 小时前
Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透
数据库·redis·缓存
KELLENSHAW2 小时前
MySQL45讲 第三十七讲 什么时候会使用内部临时表?——阅读总结
数据库·mysql
SelectDB2 小时前
飞轮科技荣获中国电信星海大数据最佳合作伙伴奖!
大数据·数据库·数据分析
小刘鸭!3 小时前
Hbase的特点、特性
大数据·数据库·hbase
凡人的AI工具箱3 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-3 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu
Elastic 中国社区官方博客3 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
P.H. Infinity4 小时前
【Redis】配置序列化器
数据库·redis·缓存
猛男技术控4 小时前
Milvus矢量数据库 麒麟v10安装
数据库·milvus