栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

sqlite3数据库的使用及其对应的API函数接口的使用

sqlite3数据库的使用及其对应的API函数接口的使用

一、sqlite3数据库的使用

        在linux中,输入sqlite3 就能进入sqlite3命令行,然后通过SQL语句执行命令。

        可以使用 .quit 退出 sqlite 提示符。

        

1.新建表格        

命令:CREATE TABLE 表名
            (
                字段名1 数据类型 “约束条件”,
                字段名2 数据类型 “约束条件”,
                ...
                字段名n 数据类型 “约束条件”,
            );

        表名:关系表的名称;

        字段名:在关系表中表示属性,即列的信息;

        数据类型:表明字段名下的数据的类型,每一列都具有相同的数据类型;

        常用数据类型:INT(size)、REAL(size,d)、VCHAr(size) ..............

        “约束条件”:NOT NULL : 数据不能为空;

                             PRIMARY KEY: 主键,数据不能为空并且唯一;

                             CHECK( 对字段名的约束条件 ):限制数据的范围;

        .table : 查看数据库中的表格。

 如下:     

2. 插入用户数据 

命令:INSERT INTO 表名 VALUES(data1、data2、.......);

or    :INSETR INTO 表明(字段名1、字段名2....)  VALUES(data1、data2、.......);

.header on :显示表头。

.mode column:按列显示数据。

SELECt * FROM 表名:查询表中所有数据。

如下:

 3. 查询用户数据

命令:SELECt 字段名1,字段名2,..... FROM 表名;

or    :SELECt 字段名1,字段名2,..... FROM 表名 WHERe 限制条件;

 除了基本的查找,SELECt还能排序、模糊查找、多表查询以及其他的查询方式:

排序:SELECT * FROM 表名 ORDER BY 字段 ASC/DESC;
                ASC:升序    DESC:降序

模糊查找:SELECt * FROM CS2128 WHERe NUM LIKE "2%";

                表示查找NUM第一个数字为2的所有学生;

多表查询:SELECt 表名.字段名1,表名.字段名2,...FROM 表名1,表名2...;

or           :SELECt 表名.字段名1,表名.字段名2,...FROM 表名1,表名2...  WHERe  限制条件;

4. 更新数据

命令:UPDATe 表名 SET 字段名1=新值,字段名2=新值... ;

or    :UPDATE 表名 SET 字段名1=新值,字段名2=新值... WHERe  限制条件;

如下:

5.修改表格结构

命令:   1.    修改表名
                ALTER TABLE 表名 RENAME TO 新名字;
              2.    增加字段
                ALTER TABLE 表名 ADD 字段名 字段类型 约束条件;

6. 删除表格中的行(DELETE) 和 删除表格(DORP)

命令:DELETE FROM 表名 WHERe 限制条件;

and :DROp TABLE 表名;

二、API函数接口的使用

        sqlite3的API函数接口核心:两大对象和八大函数。

        两大对象:1. 数据库的连接对象,表示要将要进行操作的数据库;

                          2. SQL语句对象,准备好的SQL语句。

        八大函数族:

                        1.    打开数据库函数
                            sqlite3_open();
            
                        2.    操作数据库函数
                            sqlite3_prepare_*()    //准备一个SQL语句
                            sqlite3_bind_*()    //绑定参数
                            sqlite3_step()        //执行SQL语句
                            sqlite3_column_*()    //输出查询到的数据库的数据
                            sqlite3_finalizi()    //释放资源,销毁SQL语句对象
                            sqlite3_exec()        //万能函数
            
                        3.    关闭数据库函数
                            sqlite3_close();

用代码操作数据库的简单步骤如下:

1. 打开数据库

        函数原型:SQLITE_API int sqlite3_open(
                          const char *filename,  
                          sqlite3 **ppDb          
                          );

        返回值:成功返回SQLITE_OK,否则返回其他值。

2. 准备好SQL语句对象

        函数原型:SQLITE_API int sqlite3_prepare_v2(
                           sqlite3 *db,            
                           const char *zSql,      
                           int nByte,              
                           sqlite3_stmt **ppStmt,  
                           const char **pzTail    
                           );

        返回值:成功返回SQLITE_OK,否则返回其他值。

3. 执行准备好的SQL语句对象

        函数原型:SQLITE_API int sqlite3_step(sqlite3_stmt*);

4. 释放资源,销毁SQL语句对象和关闭数据库连接对象

        销毁SQL语句对象函数原型:SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);

        关闭数据库连接对象函数原型:SQLITE_API int sqlite3_close(sqlite3*);

对表格写入数据代码如下:

#include 
#include 
#include 


int main(int argc,char **argv)
{
	if(argc != 3)
	{
		fprintf(stderr,"Usage : %s < Database path > < FileName >n",argv[0]);
		return 0;
	}

	//打开文件
	FILE *fp = fopen(argv[2],"r");
	if(fp == NULL)
	{
		perror("Open file error");
		return -1;
	}

	//1.打开数据库
	sqlite3 *pdb = NULL;
	int ret = sqlite3_open(argv[1],&pdb);
	if(ret != SQLITE_OK)
	{
		perror("Open database error");
		return -1;
	}

	//2.准备SQL语句对象
	sqlite3_stmt *stmt = NULL;	//用来表示SQL语句对象的指针

	//为原始SQL语句绑定一个索引值(占位符)
	char *sql = "INSERT INTO student VALUES(@NUM,@NAME,@GRODE);";
	ret = sqlite3_prepare_v2(pdb,sql,-1,&stmt,NULL);
	if(ret != SQLITE_OK)
	{
		perror("Prepare Failed");
		sqlite3_close(pdb);
		return -1;
	}

	while(1)
	{
		int num;
		double grode;
		char name[32] = {0};

		int ret = fscanf(fp,"%d%s%lf",&num,name,&grode);
		if(ret != 3)
		{
			if(feof(fp))
			{
				break;
			}
			continue;
		}
		
		//绑定sql语句的参数的索引值
		//通过索引名@NUM,@NAME,@GRODE获取索引号
		int var_index[3];
		var_index[0] = sqlite3_bind_parameter_index(stmt,"@NUM");
		var_index[1] = sqlite3_bind_parameter_index(stmt,"@NAME");
		var_index[2] = sqlite3_bind_parameter_index(stmt,"@GRODE");

		int i;
		for(i = 0;i < 3;i++)
		{
			printf("index[%d] = %dn",i,var_index[i]);
		}

		//var_index数组就可以代替@NUM,@NAME,@GRODE
		//给参数绑定具体的值
		sqlite3_bind_int(stmt,var_index[0],num);
		sqlite3_bind_text(stmt,var_index[1],name,strlen(name),NULL);
		sqlite3_bind_double(stmt,var_index[2],grode);

		//3.执行准备好的SQL语句对象
		ret = sqlite3_step(stmt);
		if(ret == SQLITE_DONE)
		{
			printf("INSERT Success!n");
		}
		else
		{
			perror("INSERT Failed");
			break;
		}
	}

	//4.释放资源
	fclose(fp);
	sqlite3_finalize(stmt);
	sqlite3_close(pdb);
	
	return 0;
}

执行结果:

 

 

 

查找表格数据代码如下:

#include 
#include 
#include 
#include 


int main(int argc,char **argv)
{
	if(argc != 3)
	{
		fprintf(stderr,"Usage : %s < Database path > < NUM >n",argv[0]);
		return 0;
	}

	//打开数据库
	sqlite3 *pdb = NULL;
	int ret = sqlite3_open(argv[1],&pdb);
	if(ret != SQLITE_OK)
	{
		perror("Open database error");
		return -1;
	}

	//准备SQL语句对象
	sqlite3_stmt *stmt = NULL;	//用来表示SQL语句对象的指针

	char *sql = "SELECT * FROM student WHERe NUM < @NUM;";
	
	ret = sqlite3_prepare_v2(pdb,sql,strlen(sql),&stmt,NULL);
	if(ret != SQLITE_OK)
	{
		perror("Prepare Failed");
		sqlite3_close(pdb);
		return -1;
	}

	//为索引值指定具体的值
	int var_index = sqlite3_bind_parameter_index(stmt,"@NUM");
	sqlite3_bind_int(stmt,var_index,atoi(argv[2]));

	int flag = 0;
	while(1)
	{
		//4.执行准备好的SQL语句对象
		ret = sqlite3_step(stmt);
		if(ret == SQLITE_ROW)//获取到了一条记录
		{
			//获取查询到的记录(一行数据)的列数
			int ncols = sqlite3_column_count(stmt);

			int i;
			if(flag == 0)
			{
				//先将表头打印出来	
				for(i = 0;i < ncols;i++)
				{
					//将每一列的字段名(表头)打印出来
					printf("%st",sqlite3_column_name(stmt,i));
				}
				putchar('n');
				flag = 1;
			}

			for(i = 0;i < ncols;i++)
			{
				//将用户数据打印出来

				//获取到当前记录的列的数据类型
				int type = sqlite3_column_type(stmt,i);
				if(type == SQLITE_INTEGER)
				{
					printf("%dt",sqlite3_column_int(stmt,i));
				}
				else if(type == SQLITE_FLOAT)
				
{
					printf("%.2ft",sqlite3_column_double(stmt,i));
				}
				else if(type == SQLITE_TEXT)
				
{
					printf("%st",sqlite3_column_text(stmt,i));
				}
				else
				{
					printf("t");
				}
			}
			printf("n");
		}
		else if(ret == SQLITE_DONE)//意味着记录已经全部查询完毕
		{
			printf("SELECT Done!n");
			break;
		}
		else
		{
			perror("SELECT Failed");
			break;
		}
	}
	
	//释放资源,销毁SQL语句对象和关闭数据库连接对象
	sqlite3_finalize(stmt);
	sqlite3_close(pdb);
	
	return 0;
}

执行结果:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号