文章目录
1 安装数据库软件(DBMS)
安装语句:SQLite3 sudo apt install sqlite3
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统, 它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项 目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了 它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就 够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够 跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接 口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统 来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年 5月。 至2020年已经有20个年头,SQLite也迎来了一个版本 SQLite 3已经 发布。
2 SQLite3常用命令
sqlite3 xxx.db
.database
.exit
.help
.show
.schema tablename
3 SQLite3常用数据类型
NULL 值是一个NULL值
INTEGER 值是一个带符号的整数, 根据值的大小存储在1, 2, 3, 4, 6或8字 节中
REAL 值是一个浮点值, 存储为8字节的IEEE浮点数字
TEXT 值是一个文本字符串, 使用数据编码(UTF-8, YTF-16B或UTF-16LE) 存储
4 SQLite3的SQL语句
创建数据库 sqlite3 testDB.db
创建表 create table tablename( column1 datatype, column2 datatype, column3 datatype);
删除表 drop table tablename;
添加数据到表 insert into tablename [(colnum1, colnum2, colnum3, colnum4.......)] values(value1, value2, value3, value4.......); insert into tablename values(value1, value2, value3, value4.......);
查询表数据 select * from tablename;
where表达式 select * from tablename where colnum1 = value1;
更新表数据 update tablename set colnum1 = value1 where colnum2 = value2
删除表数据 delete from tablename where colnum1 = value1;
like表达式 select * from where colnum1 like '%_'
5.案例
注意:
- gcc main.c之后要加上 -lsqlite3(-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名)
- 运行a.out时候后面要加上传入的数据库名称
/*************************************************************************
> File Name: main.c
> Author: 杨永利
> Mail: 1795018360@qq.com
> Created Time: 2020年07月27日 星期一 22时13分59秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
int main(int argc, char* argv[]){
// 判断是否有两个参数,否则不知道打开哪个数据库
if(argc != 2)
exit(1);
//设置一个数据库指针为空
sqlite3 *db=NULL;
// 设置错误信息提示指针
char *errorstr;
// 判断打开这个数据库是否成功
if(sqlite3_open(argv[1],&db))
{
//如果失败就提示错误信息并关闭数据库推出程序
printf("sqlite3_open() 函数打开数据库失败!\n");
sqlite3_close(db);
exit(1);
}
else{
//如果打开成功则提示该数据库下所有的表
printf("该数据库下所有的表:\n");
// 数据库查询语句
char sql[100] = "select * from sqlite_master;";
//接收数据返回值的char**类型
char** buf;
//接收表的列数和行数
int row,col;
//从表中获取数据函数 sqlite3_get_table()
//第一个参数为数据库指针
//第二个参数为sql语句
//第三个参数用来接收查询语句的数据返回值
//第四个参数用来接收该数据有多少行
//第五个参数用来接收该数据有多少列
//第六个参数用来接收错误信息
if(sqlite3_get_table(db, sql, &buf, &row, &col, &errorstr))
{
//如果函数调用失败则显示错误信息并关闭数据库退出程序
printf("sqlite3_get_table()函数获取表失败!\n");
sqlite3_close(db);
exit(1);
}
// 开启for循环用于显示所有数据表
int i=0;
int now_col=0; //检索到的当前行
for(i;i<(row+1)*col;i++) //i<(row+1)*col 是
{
printf("%s",buf[i]);
// 当前列不是倒数第一列就输出 |
if(now_col!=col-1){
printf("|");
}
// 如果是就输出换行,并且初始化为0
if(now_col==col-1){
now_col=0;
printf("\n");
}else // 否则就 列数+1 换成下一列
now_col++;
}
}
// 如果执行到这一步就说明用户已经看到了数据表
// 开启while循环让用户去查询每个表的数据
while(1)
{
// 询问用户所要查询的表
printf("\n请输入您想要查询的表......\n输入Q(q)来退出程序\n\n");
// 定义一个char数组来接受表明
char tablename[100];
// 定义好查询语句
char sql[100]="select *from ";
// 获取用户输入的表面
fgets(tablename,sizeof(tablename),stdin);
// 判断是否退出程序
if(!strcmp(tablename, "q\n") || !strcmp(tablename, "Q\n"))
exit(1);
strcat(sql,tablename); // 拼接字符串
//设置表名最后一个字符为零
tablename[strlen(tablename)-1]='\0';
// 接受数据的返回值 char**类型
char **buf;
//接收表的列数和行数
int row, col;
if(sqlite3_get_table(db, sql, &buf, &row, &col, &errorstr)){
//如果函数调用失败则显示错误信息并关闭数据库退出程序
printf("sqlite3_get_table()函数获取表失败!\n");
sqlite3_close(db);
exit(1);
}
//开启for循环显示该表的数据
int i = 0;
int now_col = 0;
if(row*col==0)
{
printf("\n表%s中无数据\n",tablename);
continue;
}
// 有数据就执行下面语句显示所有数据
printf("\n表 %s 下所有的数据:\n", tablename);
for(i = col; i < (row + 1) * col; i++){
printf("%s", buf[i]);
if(now_col != col - 1)
printf("|");
if(now_col == col - 1){
now_col = 0;
printf("\n");
}else
now_col++;
}
}
return 0;
}