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, /* 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函数接口的使用相关推荐
- sqlite3 select查询一列_一眼就会的sqlite3数据库
一.SQLite数据库简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎. 二.SQLit ...
- 用java连接Excel和SQLite3,实现从excel文件读取数据并将其存入SQLite3数据库中
java与Excel的连接用到了jxl.jar开源包,与SQLite3的连接用到了sqlitejdbc-v056.jar这个开源包,两个开源包打包下载:传送门 如果使用的eclipse做开发,解压后按 ...
- qt读取数据库数据并验证_QT快速读取显示SQLite3数据库数据
(本文为本人原创,请尊重个人劳动成果.未经本人许可,严禁转载!) SQLite3是一个轻量级的文件数据库,拥有其他数据库无可比拟的高效率,其自身的C语言API已经能够满足大多数应用.蛋似,想要将数据直 ...
- linux下SQLite3数据库
目录 一.SQLite3的安装 二.数据库的创建和打开 三.数据库的常见命令 三.SQL语句 1.创建数据库表 2.插入记录 3.查询记录 4.更新记录 5.删除记录 6.删除数据库表 四. SQLI ...
- Andriod SQLite3 数据库损坏,优化,修复,备份方案研究
Andriod Sqlite3 数据库损坏,修复,备份方案研究 1.数据库损坏原因 我们首先来看 SQLite 损坏的原因,SQLite官网<How To Corrupt An SQLite D ...
- 【数据库】sqlite3数据库备份、导出方法汇总
[数据库]sqlite3常用命令及SQL语句 目录 1.直接拷贝数据库 2.使用.backup .clone 1)交互式 2)脚本 3.导出到csv文件中(其它格式类似) 1)交互式 2)脚本 3)导 ...
- c从sqlite3数据库中获取数据,并对数据进行拼接
c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...
- 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )
文章目录 一.应用数据目录 /data/data/package.name/files 二.自带 so 动态库 /data/data/package.name/lib 三.数据库文件 /data/da ...
- python把数据写入excel_Python读写sqlite3数据库的方法并且将数据写入Excel的实例详解...
这篇文章主要介绍了Python实现读写sqlite3数据库并将统计数据写入Excel的方法,涉及Python针对sqlite3数据库的读取及Excel文件相关操作技巧,需要的朋友可以参考下 本文实例讲 ...
最新文章
- java struts2配置_Struts2初始化配置的问题
- 【Python学习系列十五】pandas库DataFrame行列操作使用方法
- SQL匹配多字段进行排序,搜索
- Qt实现全屏下玫瑰花(含详细注释)
- [Vue.js] 基础 -- 安装Vue
- node 连接mongodb
- 经典SQL[私家珍藏]
- vue 学习中遇到的一些问题
- python图片x轴数据过多_一个操作证明python数据可视化比excel强百倍:X轴刻度间隔显示...
- jQuery.param() 函数详解
- Linux | 文件系统 | Ext2fs
- 基于多任务深度学习的时空网络流量预测
- matlab分离实部虚部,MATLAB/simulink中,想让电流表测出的值为复数形式,有实部虚部,将powergui设置为phasors仿真,总是出错...
- 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
- xocde8打印出:Presenting view controllers on detached view controllers is discouraged SettingViewContro
- java -io字符流FileWrite操作演示
- BugKu -- never give up
- testlink linux,Linux下安装testlink
- 数电和计算机网络,数电计算机网络试卷2010A.doc
- 测试服务器并发量和承载力(压力测试)
热门文章
- 2023年软考高级系统分析师考试时间及安排
- Python解决:当文件夹存在时清空文件夹,文件夹不存在时新建文件夹
- pygame功能--pygame.cursors鼠标模块
- DANN:利用神经网络算法评估变异位点的有害程度
- 应急照明市电检测_应急照明接线方式,这几点你必须知道!
- LeetCode题解(1079):活字印刷(Python)
- Learning and Meta-Learning of Stochastic Advection-Diffusion-Reaction Systems from Sparse Measuremen
- Opencv项目实战:01 文字检测OCR(2)
- 如何写好需求分析:需求规格说明书(ISO标准版)
- 为什么从此电脑访问不了ftp_巧用FTP来管理手机文件 从此摆脱USB