一、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,   /* Database filename (UTF-8) */
                          sqlite3 **ppDb          /* OUT: SQLite db handle */
                          );

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

2. 准备好SQL语句对象

函数原型:SQLITE_API int sqlite3_prepare_v2(
                           sqlite3 *db,            /* Database handle */
                           const char *zSql,       /* SQL statement, UTF-8 encoded */
                           int nByte,              /* Maximum length of zSql in bytes. */
                           sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                           const char **pzTail     /* OUT: Pointer to unused portion of zSql */
                           );

返回值:成功返回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 <stdio.h>
#include <sqlite3.h>
#include <string.h>/*利用索引值向数据库表格写入数据
*/
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] = %d\n",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 <stdio.h>
#include <sqlite3.h>
#include <string.h>
#include <stdlib.h>/*利用索引值查看数据库表格数据
*/
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("%s\t",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("%d\t",sqlite3_column_int(stmt,i));}else if(type == SQLITE_FLOAT){printf("%.2f\t",sqlite3_column_double(stmt,i));}else if(type == SQLITE_TEXT){printf("%s\t",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;
}

执行结果:

sqlite3数据库的使用及其对应的API函数接口的使用相关推荐

  1. sqlite3 select查询一列_一眼就会的sqlite3数据库

    一.SQLite数据库简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎. 二.SQLit ...

  2. 用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中

    java与Excel的连接用到了jxl.jar开源包,与SQLite3的连接用到了sqlitejdbc-v056.jar这个开源包,两个开源包打包下载:传送门 如果使用的eclipse做开发,解压后按 ...

  3. qt读取数据库数据并验证_QT快速读取显示SQLite3数据库数据

    (本文为本人原创,请尊重个人劳动成果.未经本人许可,严禁转载!) SQLite3是一个轻量级的文件数据库,拥有其他数据库无可比拟的高效率,其自身的C语言API已经能够满足大多数应用.蛋似,想要将数据直 ...

  4. linux下SQLite3数据库

    目录 一.SQLite3的安装 二.数据库的创建和打开 三.数据库的常见命令 三.SQL语句 1.创建数据库表 2.插入记录 3.查询记录 4.更新记录 5.删除记录 6.删除数据库表 四. SQLI ...

  5. Andriod SQLite3 数据库损坏,优化,修复,备份方案研究

    Andriod Sqlite3 数据库损坏,修复,备份方案研究 1.数据库损坏原因 我们首先来看 SQLite 损坏的原因,SQLite官网<How To Corrupt An SQLite D ...

  6. 【数据库】sqlite3数据库备份、导出方法汇总

    [数据库]sqlite3常用命令及SQL语句 目录 1.直接拷贝数据库 2.使用.backup .clone 1)交互式 2)脚本 3.导出到csv文件中(其它格式类似) 1)交互式 2)脚本 3)导 ...

  7. c从sqlite3数据库中获取数据,并对数据进行拼接

    c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...

  8. 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )

    文章目录 一.应用数据目录 /data/data/package.name/files 二.自带 so 动态库 /data/data/package.name/lib 三.数据库文件 /data/da ...

  9. python把数据写入excel_Python读写sqlite3数据库的方法并且将数据写入Excel的实例详解...

    这篇文章主要介绍了Python实现读写sqlite3数据库并将统计数据写入Excel的方法,涉及Python针对sqlite3数据库的读取及Excel文件相关操作技巧,需要的朋友可以参考下 本文实例讲 ...

最新文章

  1. java struts2配置_Struts2初始化配置的问题
  2. 【Python学习系列十五】pandas库DataFrame行列操作使用方法
  3. SQL匹配多字段进行排序,搜索
  4. Qt实现全屏下玫瑰花(含详细注释)
  5. [Vue.js] 基础 -- 安装Vue
  6. node 连接mongodb
  7. 经典SQL[私家珍藏]
  8. vue 学习中遇到的一些问题
  9. python图片x轴数据过多_一个操作证明python数据可视化比excel强百倍:X轴刻度间隔显示...
  10. jQuery.param() 函数详解
  11. Linux | 文件系统 | Ext2fs
  12. 基于多任务深度学习的时空网络流量预测
  13. matlab分离实部虚部,MATLAB/simulink中,想让电流表测出的值为复数形式,有实部虚部,将powergui设置为phasors仿真,总是出错...
  14. 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
  15. xocde8打印出:Presenting view controllers on detached view controllers is discouraged SettingViewContro
  16. java -io字符流FileWrite操作演示
  17. BugKu -- never give up
  18. testlink linux,Linux下安装testlink
  19. 数电和计算机网络,数电计算机网络试卷2010A.doc
  20. 测试服务器并发量和承载力(压力测试)

热门文章

  1. 2023年软考高级系统分析师考试时间及安排
  2. Python解决:当文件夹存在时清空文件夹,文件夹不存在时新建文件夹
  3. pygame功能--pygame.cursors鼠标模块
  4. DANN:利用神经网络算法评估变异位点的有害程度
  5. 应急照明市电检测_应急照明接线方式,这几点你必须知道!
  6. LeetCode题解(1079):活字印刷(Python)
  7. Learning and Meta-Learning of Stochastic Advection-Diffusion-Reaction Systems from Sparse Measuremen
  8. Opencv项目实战:01 文字检测OCR(2)
  9. 如何写好需求分析:需求规格说明书(ISO标准版)
  10. 为什么从此电脑访问不了ftp_巧用FTP来管理手机文件 从此摆脱USB