sqlite3快速入门

一、sqlite3在linux下安装

进入网址SQLite Download Page

        下载 sqlite-autoconf-*.tar.gz压缩文件,并上传至虚拟机。

随后依次输入以下命令完成安装:

$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install

安装完成后在命令行输入sqlite3验证是否安装完成:

输入命令,退出数据库

.help

二、sqlite命令

        系统命令

        以.+命令组合的方式出现,例如在命令行输入.help可以展示所有的系统命令:

        常用的系统命令:

.help --打印所有的系统命令
.quit --退出
.exit --退出
.schema --展示所有表

        sql命令 :不以.开头,通常以;结尾

创建一张数据表 stu

        create table stu(id Integer, name char, score Integer);

创建一个stu表,表内参数格式为Integer,char和Integer,通过系统命令.schema可以查看

② 向表中插入数据

         insert into stu values(1, "张三", 100); --插入一个完整的数据

         insert into stu (name, score)values("李二", 85); --插入部分数据

插入一个部分数据,需要指定插入的数据名。

查询记录

        select * from stu; --查询所有字段

        select name from stu; --查询数据库的name字段

        select * from stu where name="张三"; --查询name字段为张三的数据

        select * from stu where name="张三" or score=85; --查询name字段为张三或score字段为85的数据

④ 删除一条记录

        delete from stu where name="张三"; --删除name字段为张三的数据 

⑤ 更新一条数据

        update stu set id=2 where name="李二"; --将name字段为第二的数据的id更新为2

⑥ 插入新的字段

         alter table stu add column address char; --将address字段插入到stu中

⑦ 删除一列

        sqlite3不支持直接删除一列数据,但可以通过一下方式达到同样的效果。

1.创建一张新表

        create table stu1 as select id, name, score from stu;

2.删除旧表

        drop table stu;

3.将新表的名字更改为旧表的名字

        alter table stu1 rename to stu; 

三、调用C_API操作数据库

        ① sqlite3_open函数

int sqlite3_open(
      const char *filename,   /* Database filename (UTF-8) */
      sqlite3 **ppDb          /* OUT: SQLite db handle */
);
功能:打开数据库
参数:filename  数据库名称
      ppdb      数据库句柄
返回值:成功为0 SQLITE_OK ,出错 错误码

        ②  sqlite3_close函数

  int sqlite3_close(sqlite3* db);
    功能:关闭数据库
    参数:
    返回值:成功为0 SQLITE_OK ,出错 错误码

        ③  sqlite3_errmsg函数

 const char *sqlite3_errmsg(sqlite3*db);
    功能:得到错误信息的描述

        ④ sqlite3_exec函数

int sqlite3_exec(
    sqlite3* db,                                  /* An open database */
    const char *sql,                           /* SQL to be evaluated */
    int (*callback)(void* arg,int,char**,char**),  /* Callback function */
    void * arg,                                    /* 1st argument to callback */
    char **errmsg                              /* Error msg written here */
  );
  功能:执行一条sql语句
  参数:db  数据库句柄
        sql sql语句
        callback  回调函数,只有在查询时,才传参
        arg      为回调函数传递参数
        errmsg  错误消息
  返回值:成功 SQLITE_OK

查询回调函数:
int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name),  /* Callback function */
功能:查询语句执行之后,会回调此函数
参数:arg   接收sqlite3_exec 传递来的参数
      ncolumns 列数
      f_value 列的值得地址
      f_name   列的名称
返回值:0,

        ⑤ sqlite3_get_table函数

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);

        ⑥ void sqlite3_free_table函数

void sqlite3_free_table(char **result);

  简易学生信息管理系统 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

#define DATABASEPATH "./student.db" //数据库路径


//往数据库中插入信息
int do_insert(sqlite3 *db) 
{
    int id; //插入的学生id
    char name[32];  //插入的学生姓名
    char sex; //插入学生的性别
    int score; //插入学生的分数

    char *errmsg;   //保存错误码
    char cmd[128];  //保存命令

    printf("Input:id:");
    scanf("%d", &id);   //此时会遗留一个\n,在缓冲区

    printf("Input:name:");
    scanf("%s", name);
    getchar();  //取出缓冲区的\n

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

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

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

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

	return 0;
}

//从数据库删除内容
int do_delete(sqlite3 *db)
{
    int id;
    char cmd[128];  //保存命令
    char *errmsg;

    printf("Input id:");
    scanf("%d", &id);
    sprintf(cmd, "delete from stu where id = %d", id);

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

	return 0;
}

//从数据库更新内容
int do_update(sqlite3 *db)
{
	int id;
	char cmd[128];
	char name[32] = "zhangsan";
	char *errmsg;

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

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

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

	return 0;
}

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;

    //resultp保存每列的结果,前ncolumn个内容是字段属性id name sex score

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

	for(i = 0; i < nrow; i++)   //nrow行数据
	{
		for(j = 0; j < ncolumn; j++)    //每列的内容
		{
			printf("%-10s ", resultp[index++]);
		}
		putchar(10);
	}

    return 0;
}


int main(int argc, char *argv[])
{
    sqlite3 *db;    //定义一个句柄
    char *errmsg;   //保存错误码
    int n;

    if(sqlite3_open(DATABASEPATH, &db) != SQLITE_OK) {  //打开失败,进行报错
        printf("%s\n", sqlite3_errmsg(db));
        return -1;
    } else {
        printf("DATABASE open success\n");
    }

    //如果不存在表stu,则进行创建
    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 stu success\n");
    }


    //学生信息表有4个操作,插入 查询 删除 更新
    //循环对输入进行处理
    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_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 input\n");
        }
    }

    return 0;

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite数据库是一种轻量级的关系型数据库管理系统,具有小巧、快速、易用等特点,常用于嵌入式开发和移动应用开发。入门教程是帮助初学者快速掌握SQLite数据库基础知识和操作技巧的指南。 首先,SQLite数据库入门教程会介绍SQLite的特点和优势,以及适用的场景和应用领域。然后,教程会详细介绍如何安装和配置SQLite数据库,包括下载安装SQLite软件包和设置环境变量等步骤。 接着,教程会教授SQL语言的基本知识,包括创建数据库、表和字段等操作,以及对数据进行插入、查询、更新和删除等操作。通过实例演示和练习,初学者可以逐步掌握SQL语句的使用方法和编写技巧,提高数据库操作的熟练程度。 此外,入门教程还会介绍常用的SQLite命令行工具和GUI工具,如sqlite3、SQLiteStudio等,以及它们的使用方法和功能特点。初学者可以通过这些工具更方便地管理和操作SQLite数据库。 最后,教程还会介绍SQLite数据库的高级特性和扩展功能,如事务处理、索引优化、触发器等,帮助初学者进一步深入了解和应用SQLite数据库的高级技术。 总之,SQLite数据库入门教程是一个系统而全面的学习指南,能够帮助初学者快速入门并掌握SQLite数据库的基础知识和操作技巧。无论是对于嵌入式开发还是移动应用开发,学习SQLite数据库都是非常有帮助的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值