SQLite3数据库--快速上手

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


一、安装

sqlite3.数据库的安装
方法1:1–本地安装
sudo dpkgi *.deb
方法2:–在线安装
sudo apt get install sqlite3


二、SQLITE3 基本命令(使用shell命令行操作SQLite数据库)

系统命令
以’.'开头的命令
  .help:帮助
  .quit:退出
  .exit:退出
  .schema:查看表的结构图
  .databases:查看打开的数据库
  .table:查看当前数据库下的表格

sql命令
基本的sq1命令,不以‘.’开头,但是都要以’;'结尾

创建一张数据库表

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

插入一条记录

insert into stu values(1001,’zhangsan', 80)//全部字段的插入
insert into stu(id,name)values(1001,‘zhangsan’);//部分字段的插入

查询记录

select * from stu;//查询所有字段
select name,sorce from stu;//查询所需的字段
select * from stu where name='lisi and id=1001;';//查找特定字段字段
select * from stu where name='lisi or id=1001;';//查找特定字段字段

删除字段

delete from stu where name='lisi';//直接删除的方式

update stu set name='lili' where id=1001;//通过更新的方式
//把id为1001的人的名字改为lili。
//where前后都可以多个条件量。

修改表格字段

alter table stu add column address char;/给stu这个表格加入一列addre

sqlite3不支持删除一列

//1-- 创建一张新的表
create table stu1 as select id, name, score from stu;
//2-- 删除原有的表
drop table stu;
//3--将新的表名字改成原有的旧表的名字
alter table stu1  rename to stu;

二、SQLITE3 函数接口(使用c程序调用SQLITE3)

打开和关闭一个数据库

int sqlite3_open(const char *filename, sqlite3 **ppDb);
int sqlite3_close(sqlite3* db)

·filename:要打开的数据库文件名

·ppDb:指向sqlite3指针的指针,用于存储向打开的数据库连接的地址

sqlite3_open()函数用于打开一个SQLite数据库,返回一个sqlite3的指针,用于后续操作数据库。
返回值:成功 SQLITE_OK 失败 返回错误值
sqlite3_close()函数用于关闭一个已打开的数据库。
返回值:成功 SQLITE_OK 失败 返回错误值

打印错误值

const char *sqlite3_errmsg(sqlite3* db);

功能:sqlite3_errmsg通过数据库的句柄打印错误值。
返回值:错误信息的首地址。

执行sql语句

int sqlite3_exec(sqlite3* db, 
                 const char *sql, 
                 int (*callback)(void* para, int f_num, char**f_value, char**f_name), 
                 //void*para传入的参数,
                 //int f_num记录了字段的数量,
                 //char**f_value记录了字段值的指针数组,
                // char**f_name记录了字段名称的指针数组
                 void* data, 
                 char **errmsg);

功能:执行一条sql语句。
参数:
db:一个已经打开的数据库连接

sql:要执行的SQL语句

callback:回调函数,用于处理查询结果集,只有执行查询语句的时候,才会执行此语句。

data:传递给回调函数的用户数据指针

errmsg:用于存储错误信息的指针

返回值:成功 SQLITE_OK

不调用回调函数的查询函数

int sqlite3_get_table(
  sqlite3 *db,               /* 数据库连接对象 */
  const char *zSql,          /* 查询语句 */
  char ***pazResult,         /* 存储查询结果的二维字符数组 */
  int *pnRow,                /* 返回查询结果的行数 */
  int *pnColumn,             /* 返回查询结果的列数 */
  char **pzErrmsg            /* 查询错误信息,可选参数 */
);

1.db:表示一个已经打开的数据库连接对象。
2.zSql:表示待执行的 SQL 查询语句。
3.pazResult:是一个指向指针的指针,用于存储查询结果。查询结果以二维字符数组的形式返回,每个单元格都是一个字符串。这个参数的值由函数分配和设置。
4.pnRow:传入一个 int 类型的指针变量的地址,用于接收查询结果的行数。
5.pnColumn:传入一个 int 类型的指针变量的地址,用于接收查询结果的列数。
6.pzErrmsg:一个可选参数,用于接收查询错误信息的字符串。如果查询失败,该参数将被设置为错误信息。如果不关心错误信息,可以设置为 NULL。

函数返回值:

7.如果查询执行成功,返回值为 SQLITE_OK(宏定义的值为0)。
8.如果查询执行出错,返回值为一个非零的错误码,可通过错误码对应的宏定义进行错误类型的判断。

写一个使用数据库的示例代码,完成对数据的增删改查

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

#define DATABASE "stu.db"

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

printf("input id\n");
scanf("%d",&id);
getchar();

printf("input name\n");
scanf("%s",name);
getchar();

printf("input score\n");
scanf("%d",&score);
getchar();

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

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

   	printf("insert done.\n");
}

};


int do_delete(sqlite3 * db)
{
int id;

char sql[128]={};
char * errmsg;

printf("input id\n");
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("delete done.\n");
}

};

int do_update(sqlite3 * db)
{
int id;
int score;
char sql[128]={};
char * errmsg;

printf("input id\n");
scanf("%d",&id);
getchar();


printf("input new score\n");
scanf("%d",&score);
getchar();



sprintf(sql,"update stu set score = %d where id = %d;",score,id);

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

   	printf("update done.\n");
}

};


//使用回调函数查询
int callback(void* para, int f_num, char**f_value, char**f_name)
{
	int i = 0;
		for (i=0;i<f_num;i++)
		{
			printf("%-11s",f_value[i]);
		}
		putchar(10);
		
return 0;
}



int 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("query done.\n");
}



};


//不使用回调函数的一种查询方法

int do_query1(sqlite3 * db)
{

char sql[128]={};
char * errmsg;
char ** result;
int pnRow;
int pnColumn;
int i=0;
int j=0;
sprintf(sql,"select * from stu;");

if(sqlite3_get_table(db,sql,&result,&pnRow,&pnColumn,&errmsg)!=SQLITE_OK)
{
   printf("%s\n",errmsg);
}
else
{

   	printf("update done.\n");
}
int index =0;
for(i=0;i<pnColumn+1;i++)
{
	for(j=0;j<pnRow;j++)
		{
		printf("%-11s",result[index++]);
		}
	putchar(10);
}



};




int main(int argc , const char* argv[])
	
		{
		//创建一个数据库句柄
		sqlite3 * db;
		//创建一个错误信息一级指针
		char* errmsg;
		//定义一个命令选项
		int cmdnum;
		//打开数据库
		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 stu(id Integer,name char,score Interger);",NULL,NULL,&errmsg)!=SQLITE_OK)
		{
		printf("%s\n",errmsg);
			}
		else
		{
		printf("creat table success.\n");
		}

			//对表格实现增删改查
		while(1)
			{
			printf("**************************\n");
			printf("1.insert 2.delete 3.query 4.update 5.quit\n");
			printf("**************************\n");
			printf("cmd:%d\n",cmdnum);
			scanf("%d",&cmdnum);
			getchar();

			switch (cmdnum)
				{
				case 1:
					do_insert(db);
					break;
				case 2:
					do_delete(db);
					break;
				case 3:
					do_query1(db);
					break;		
				case 4:
					do_update(db);
					break;		
				case 5:
					
					sqlite3_close(db);
					exit(0)	;
				default:
					printf("err cmd");
					
				}

			
			}
		
		
		return 0;
		}




  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值