Linux下学习数据库
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; }