嵌入式Linux开发:Linux环境下sqlite数据库安装及使用

学习视频 <— 众所周知B站是中国最大的学习网站 2333

快速浏览

  • 第一步:Linux开发环境搭建
  • 第二步:安装sqlite数据库
  • 第三步:sqlite数据库基本操作
      • 1.sqlite系统命令
      • 2.使用SQL语句操作数据库
        • (1)创建一个数据表
        • (2)向表中插入数据
  • 第四步:sqlite数据库C/C ++接口API
      • 1.编译方式
      • 2.sqlite参考资料/例程
      • 3.简易学生管理系统(参考)

第一步:Linux开发环境搭建

开发环境已经配置好了

点击下载

使用VM虚拟机打开下载好的系统镜像就开始“愉快地”嵌入式开发啦 : )
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第1张图片
虚拟机登录密码为: pass

已经安装了eclipse,可以使用C/C++编程进行嵌入式开发

第二步:安装sqlite数据库

如果使用的是自己的镜像,安装sqlite3 需要两个命令即可

sudo apt-get install sqlite
sudo apt-get install libsqlite3-dev

链接里使用的Linux镜像是用CentOS软件安装,所以不是apt-get命令而是yum命令

yum install install sqlite

搜索相关的库文件

yum search sqlite3

嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第2张图片
分别安装好这两个就行

yum install sqlite-devel.i686
yum install sqlite-devel.x86_64

安装完成后在命令行里输入

sqlite3

出现版本号和命令行控制即为成功
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第3张图片

第三步:sqlite数据库基本操作

接下来罗列几个基础操作的效果,更多更具体的方法详见
SQLite 命令大全菜鸟教程
嵌入式教案

1.sqlite系统命令

嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第4张图片
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第5张图片

2.使用SQL语句操作数据库

(1)创建一个数据表

sqlite3 student.db

首先创建一个数据库:student.db
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第6张图片
可以通过输入.database列出数据库
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第7张图片
然后输入创建数据表语句

create table student (id int primary key,name char,age int,sex char);

语法解析
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第8张图片

(2)向表中插入数据

insert into 表名 values (值1,值2,值3,值4);
没有返回错误信息则插入成功

insert into student values (0,'zhang0',20,'m'); 

嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第9张图片

第四步:sqlite数据库C/C ++接口API

1.编译方式

在vi编辑器环境中编译时使用

gcc xxx.c -o t -lsqlite3

使用eclipse编译需要修改编译方式,配置如下
嵌入式Linux开发:Linux环境下sqlite数据库安装及使用_第10张图片

2.sqlite参考资料/例程

API文档
菜鸟教程
嵌入式教案

3.简易学生管理系统(参考)

  • 注意数据库路径
  • 数据库名:test.db
  • 数据库表:stu
  • 表参数:id , name
#include 
#include 

//这里配置数据库的路径
#define DATABASE "/home/ben/c.d/test.db"

//增加
void do_insert(sqlite3 *db)
{
	int id;
	char name[32]={};
	char sql[128]={};
	char *errmsg;

	printf("请输入id:");
	scanf("%d",&id);getchar();
	printf("请输入姓名:");
	scanf("%s",name);getchar();

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

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("插入一条数据失败,错误:%s\n",errmsg);
	}
	else
	{
		printf("插入一条数据成功\n");
	}

}

//删除
void do_delet(sqlite3 *db)
{
	int id;
	char sql[128]={};
	char *errmsg;

	printf("请输入id:");
	scanf("%d",&id);getchar();

	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("删除一条数据成功\n");
	}

}

//修改
void do_update(sqlite3 *db)
{
	int id;
	char name[32]={};
	char sql[128]={};
	char *errmsg;

	printf("请输入要修改数据的id:");
	scanf("%d",&id);getchar();
	printf("请输入新的姓名:");
	scanf("%s",name);getchar();

	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("更新一条数据成功\n");
	}

}

//查询回调函数
int callback(void *para, int f_num, char **f_value, char **f_name)
{
   int i;
   for(i=0; i<f_num; i++){
      printf("%-8s",f_value[i]);
   }
   printf("\n");
   return 0;
}
//查询(回调方法)
void do_query(sqlite3 *db)
{
	char sql[128]={};
	char *errmsg;

	sprintf(sql,"select * from stu");

	if(sqlite3_exec(db,sql,callback,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("查询数据失败,错误:%s\n",errmsg);
	}
	else
	{
		printf("查询结束\n");
	}

}

//查询方法2(不使用回调)
void do_query2(sqlite3 *db)
{
	char sql[128]={};
	char *errmsg;
	char **result;
	int nrow;
	int ncloumn;
	int i,j,index;

	sprintf(sql,"select * from stu;");

	if(sqlite3_get_table(db,sql,&result,&nrow,&ncloumn,&errmsg)!=SQLITE_OK)
	{
		printf("查询数据失败,错误:%s\n",errmsg);
	}
	else
	{
		printf("查询成功\n");
	}
	for(j=0;j<ncloumn;j++)
	{
		printf("%-8s",result[j]);
	}printf("\n");
	index=ncloumn;
	for(i=0;i<nrow;i++)
	{
		for(j=0;j<ncloumn;j++)
		{
			printf("%-8s",result[index++]);
		}
		printf("\n");
	}

	//一定要记得释放内存空间

	sqlite3_free_table(result);

}
int main(int argc, char* argv[])
{
	int cmd;

	sqlite3 *db;
	if(sqlite3_open(DATABASE, &db)!=SQLITE_OK){
		printf("Can't open database: %s\n", sqlite3_errmsg(db));
		return -1;
	}else{
		printf("Opened database successfully\n");
	}

	while(1)
	{
		printf("\n\n*********************************\n");
		printf("1.增加 2.删除 3.修改 4.查找 5.关闭\n");
		printf("*********************************\n");
		printf("请输入您的操作数:");
		scanf("%d",&cmd);
		getchar();
		switch(cmd)
		{
			case 1:
				do_insert(db);
				break;

			case 2:
				do_delet(db);
				break;

			case 3:
				do_update(db);
				break;

			case 4:
				do_query2(db);
				break;

			case 5:
				sqlite3_close(db);
				printf("\n系统已退出,欢迎您下次使用!\n");
				exit(0);

			default:

				break;
		}
	}

	return 0;
}

你可能感兴趣的:(嵌入式Linux,C/C++)