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

相关推荐
BestandW1shEs2 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师2 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球2 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...2 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00012 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502772 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度2 小时前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)3 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0663 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch