sqlite数据库 ------- 记录总结tool

1-- 安装数据库:
         sudo dpkg -i  *.deb
2-- 创建数据库
         sqlite3  stu.db
				必须指定数据库名称
3-- sqlite命令
         系统命令 以 "."开头
         普通命令 ,以";"结束 

         .schema  查看表的结构
         .quit    退出数据库
         .exit    退出数据库
         .help    查看帮助信息
         .databases 查看数据库
         .tables  显示数据库中所有的表的表名
4-- sqlite3 的使用
    1-- 创建一张表
       create table 表名(字段名称1 字段类型,字段名称2  字段类型, ....);
       create table stu(id int, name char, sex char , score int);//如果表已存在的话报错
       create table if not exists stu(id int, name char, sex char , score int);//如果表已存在的话不会报错,同时也不会创建
       create table stu (id integer primary key autoincrement, name text) ;

    2-- 向表中插入一条记 

       insert into 表名 values (字段值1,字段值2,...);
       insert into stu values(1001, 'zhangsan', 'm', 89);
    3-- 查询记录
       select * from stu;                                    // 查找所有的记录
       select * from stu where id=1001;                      // 查找符号条件的记录
       select * from stu where id=1001 and name='zhangsan';  // 字符串需要加引号
       select * from stu where name = 'zhangsan' or score=92; 
    4-- 删除记录
       delete from stu where id=1004;
    5-- 更新记录
       update stu set score=98 where id=1003;
    6-- 删除一张表
       drop  table  stu;
    7-- 添加一列ls
        alter table stu add column score int;
    8-- 删除一列
        sqlite3 不允许直接删除一列
        1)先创建一张新表
           create table stu1 as select id , name from stu;
        2)删除原来的旧表
           drop table stu;
        3)对新表重命名
           alter table stu1 rename to stu;
    9-- 数据库主键(既设置的数据将会是唯一存在的)
        create table usr(name text primary key , passwd text);

5-- sqlite3 API 函数接口
    
	(1)int sqlite3_open(
         const char *filename,   /* Database filename (UTF-8) */
         sqlite3 **ppDb          /* OUT: SQLite db handle */
         );
    功能:打开一个数据库
    参数:filename   数据库名字
          ppdb      操作数据库的指针,句柄。
    返回值:成功 SQLITE_OK , 失败 error_code
	例子:
		sqlite3 *db;
		if(sqlite3_open("stu.db", &db) != SQLITE_OK)
		{
			printf("%s\n", sqlite3_errmsg(db);
		}

    (2)const char *sqlite3_errmsg(sqlite3* db);
    功能:获取错误信息描述
    
    (3)int sqlite3_close(sqlite3* db);
    功能:关闭一个数据库
    
    (4)int sqlite3_exec(
         sqlite3* db,                                  /* An open database */
         const char *sql,                           /* SQL to be evaluated */
         int (*callback)(void*,int,char**,char**),  /* Callback function */
         void * arg,                             /* 1st argument to callback */
         char **errmsg                          /* Error msg written here */
        );
    功能:执行一条sql语句
    参数:db  数据库的句柄指针
          sql  将要被执行sql语句
          callback 回调函数, 只有在查询语句时,才给回调函数传参
          arg  为callback 传参的
          errmsg 错误信息的地址
    返回值:成功 SQLITE_OK
            出错 errcode 错误码
    ***********************************************************
    int (*callback)(void* arg ,int  ncolumn ,char** f_value,char** f_name)
    功能:得到查询结果
    参数:arg  为回调函数传递参数使用的
          ncolumn  记录中包含的字段的数目
          f_value  包含每个字段值的指针数组
          f_name   包含每个字段名称的指针数组
    返回值:成功 0,出错 非0
    *********************************************************

	例子:
		char *errmsg;
		if(sqlite3_exec(db, "create table stu(id int, name char, score int)", NULL, NULL, &errmsg) != SQLITE_OK)
		{
			printf("%s\n", errmsg);
		}
	
   (5)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 */
     );
    功能:查询数据库,它会创建一个新的内存区域来存放查询的结果信息
    参数:db       数据库操作句柄
          sql      数据库的sql语句
          azResult 查询的结果
          nRow     行数
          nColumn  列数
          errmsg   错误消息
	返回值:
	     成功 0
         出错 errcode
	nrow的值为查询到的符合条件的记录数(不包括字段名)。
	ncolumn的值为查询到的符合条件的字段数。
	注意:nrow的值不包括字段名,如果打印时用for (i = 0; i < nrow; i++)会打印出字段名,但是会少打印出一条符合条件的记录。
              因此打印时要用 for (i = 0; i <nrow + 1; i++);将包括字段名在内的数据都打印出来。

   		
   (6)void sqlite3_free_table(char **result);
	功能:释放内存

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

#define DATABASE "./test.db"

void do_insert(sqlite3 *db);
void do_select(sqlite3 *db);
void do_delete(sqlite3 *db);
void do_update(sqlite3 *db);
int callback(void *arg, int column, char **f_values, char **f_name);
int flags = 0;

int main(int argc, const char *argv[])
{
	sqlite3 *db;
	char *errmsg;
	if(sqlite3_open(DATABASE,&db) != SQLITE_OK)
	{
		printf("fail to open -->%s\n",sqlite3_errmsg(db));
	}else{
		printf("success to open\n");
	}

	char sql[128] = {};
	sprintf(sql,"create table if not exists stu(id integer primary key,name char)");

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("fail to sqlite3_exeic -->%s\n",errmsg);
	}else{
		printf("success to create table\n");
	}

	char on;
	while(1)
	{
		puts("******************************************************");
		puts("* 1.insert   2.delete   3.select   4.update   5.quit *");
		puts("******************************************************");

		printf("input>");
		scanf("%c",&on);
		getchar();

		switch(on)
		{
			case '1':
				do_insert(db);
				break;
			case '2':
				do_delete(db);
				break;
			case '3':
				do_select(db);
				flags = 0;
				break;
			case '4':
				do_update(db);
				break;
			case '5':
				sqlite3_close(db);
				exit(1);
			default:
				printf("cmd error\n");
		}

	}

	return 0;
}
void do_insert(sqlite3 *db)
{
	int id;
	char name[128];
	char *errmsg;

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

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

	char sql[128] = {};
	sprintf(sql,"insert into stu values(%d,'%s')",id,name);
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("fail to insert->%s\n",errmsg);
	}else{
		printf("success to insert\n");
	}
}
void do_select(sqlite3 *db)
{
	char *errmsg;
	char sql[128] = {};
	sprintf(sql,"select * from stu");

	if(sqlite3_exec(db,sql,callback,NULL,&errmsg) != SQLITE_OK)
	{
		printf("fail to select->%s\n",errmsg);
	}else{
		printf("success to select");
	}

}

void do_delete(sqlite3 *db)
{

}

void do_update(sqlite3 *db)
{

}
int callback(void *arg, int column, char **f_values, char **f_name)
{
	int i;
	if(flags == 0)
	{
		for(i = 0; i < column; i++)
		{
			printf("%s ",f_name[i]);
		}
		putchar(10);
	}
	flags = 1;
	for(i = 0;i < column; i++)
	{
		printf("%s ",f_values[i]);
	}
	putchar(10);
	return SQLITE_OK;
}

猜你喜欢

转载自blog.csdn.net/zmjames2000/article/details/88383863