SQLite数据库的使用(linux)上

数据库基本概念

​ Ø数据(Data

​ 能够输入计算机并能被计算机程序识别和处理的信息集合

​ Ø数据库 (Database

​ 数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合

常用的数据库

​ Ø大型数据库

•Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。

·•IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。

Ø中型数据库

·•Server是微软开发的数据库产品,主要支持windows平台。

Ø小型数据库

··•mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,2008年被Sun公司收购,开放源码。

基于嵌入式的数据库

ØSQLite关系型数据库,体积小,支持ACID事务

Ø基于嵌入式Linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB

ØFirebird是关系型数据库,功能强大,支持存储过程、SQL兼容等

ØSQLite关系型数据库,体积小,支持ACID事务

ØBerkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中

ØeXtremeDB是内存数据库,运行效率高

SQLite****基础

ØSQLite的源代码是C****,其源代码完全开放。SQLite第一个Alpha版本诞生于20005月。 他是一个轻量级的嵌入式数据库。

ØSQLite****有以下特性:

•零配置一无需安装和管理配置;

•储存在单一磁盘文件中的一个完整的数据库;

•数据库文件可以在不同字节顺序的机器间自由共享;

•支持数据库大小至2TB;

•足够小,全部源码大致3万行c代码,250KB;

•比目前流行的大多数数据库对数据的操作要快;

1、sqlite的源码是C语言,而且开源

https://www.sqlite.org/index.html

2、安装方式

​ 1。sudo dpkg *.deb

​ 2.在线安装

​ sudo apt-get update

​ sudo apt-get install sqlite3 安装数据库软件

​ sudo apt-get install libsqlite3-dev 安装数据库开发支持的库

​ sudo apt-get install sqlite3-doc数据库说明文档

​ 老版本在/usr/share/doc/sqlite3-doc新版本在sqlite3

sqlite基础

​ 1 一般情况不区分大小写

​ 2 注释 –

​ 3 存储类型

​ NULL

​ INTEGER

​ REAL

​ TEXT

​ BLOB

​ 任何列仍然开源存储任何类型,当数据存入时候,这个字段的数据会转换存储进去

创建数据库

​ sqlite3 stu.db有就打开没有就创建

​ 系统命令

​ 特点:以点."开头,又叫点命令

​ .help 帮助信息,获取点命令清单

​ .exit .quit退出

​ .table 查看当前数据库表格

​ .schema 查看表的结构

​ .schema 表名

​ .databases 显示当前打开了那些数据库文件

创建一个表

每条sqlite语句都是以;结尾,如果没有遇到分号,就认为这条语句没有结束。

create table 表名(字段 数据类型,字段 数据类型,字段 数据类型,······);
数据类型不严格检查
create table stu(id int,name char,age int ,score float);

删除一个表

drop table 表名;
DROP table cesh1;

插入数据

方式1
INSERT INTO 表名 VALUES(数据,"数据",数据,数据);
INSERT INTO stu VALUES(007,"zhangsan",18,99);
插入字符串时候需要加引号,双引号和单引号都可以

方式2 插入部分字段数据
INSERT INTO stu (id,name,score) VALUES (004,"lisi",77);

查看记录

全部查看
SELECT * FROM 表名 ;
SELECT * FROM stu ;

按照某个条件查看
SELECT * FROM stu WHERE score=99;
sqlite> SELECT * FROM stu WHERE score=88 and name="zhangsan";
sqlite> SELECT * FROM stu WHERE score=456 or name="qwx";

查询指定字段
sqlite> SELECT name,score FROM stu;

让显示结果好看些
sqlite> .header on
sqlite> .mode column
sqlite> .timer on

更新一条数据(修改)

sqlite> UPDATE 表名 SET 字段=新值 WHERE 字段=匹配;
sqlite> UPDATE stu SET age=20 where name="zhangsan";
sqlite>UPDATE stu SET name="wangermz",age=33 WHERE id=6;

删除一条数据

sqlite> DELETE FROM 表名 where 字段=配置的值;
sqlite> DELETE FROM stu where id=14;
sqlite> DELETE FROM cesh1 ;删除表中所有数据

增加一列

sqlite> ALTER TABLE 表名 ADD COLUMN 新的字段 字段类型;
sqlite> ALTER TABLE stu ADD COLUMN sex char;

删除一列

不支持直接删除一列
想复制一份要保留的列的表,然后删除老表
把新表重命名成老表
sqlite> CREATE TABLE stu1 AS SELECT id,name,score FROM stu ;
sqlite> DROP TABLE stu;
sqlite> ALTER TABLE stu1 RENAME TO stu;

设置主键

CREATE TABLE ceshi2(id int primary key,name char,sex char);
primary key设置为主键的列,数值是唯一的
主键不能为NULL空

sqlite编程接口

1)打开数据库(存在就打开,不存在就创建)

#include <sqlite3.h>
int sqlite3_open(
  const char *path,   /* Database filename (UTF-8) */
  sqlite3 **db          /* OUT: SQLite db handle */
);
参数:
    path:数据库文件的路径+文件名
    db  :句柄,指向sqlite句柄的指针
    	打开数据库后开源通过db操作数据库
    	这是二级指针,大家在外面定义要给一级指针取地址传进去
返回值:
    	成功返回0,SQLITE_OK
    	失败返回错误码(非零值)

2)得到错误信息

const char *sqlite3_errmsg(sqlite3*db);
db就是sqlite3_open第二个参数数据库句柄
fprintf(stderr,"错误 %s\n",sqlite3_errmsg(db));

3)关闭数据库

int sqlite3_close(sqlite3* db);
db就是sqlite3_open第二个参数数据库句柄
返回值:
    	成功返回0,SQLITE_OK
    	失败返回错误码(非零值)

4)编译

gcc 编译时候需要加-lsqlite3

5)数据库操作

int sqlite3_exec(
  sqlite3* db,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void * arg,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);
参数:
    db句柄
    sql:数据库操作语句,上午学习的语句
    callback:回调函数,是一个函数指针,只有查询时候才用
    arg:是传递给回调函数的参数
    errmsg:错误消息,需要定义一个char * errmsg
    		可以直接打印 printf("%s",errmsg);
返回值:
    	成功返回0,SQLITE_OK
    	失败返回错误码(非零值) 

5 回调函数

int callback(void*para,int f_num,char**f_value,char**f_name)
功能:每找到一条记录自动执行一次回调函数
参数:
	para:传递给回调函数的参数
    f_num:表的列数(记录宏包含字段数目)
    f_value:查询的结果指针数组
    f_name:表头名指针数组
返回值:
    成功0
    失败-1
int callback(void * para ,int f_num,char **f_value,char **f_name){
    printf("para:%s\n",(char*)para);
     
    int i=0,j=0;
    //打印表头
    for(j=0;j<f_num;j++)
        printf("%-15s",f_name[j]);  
    puts("");
    //打印搜索结果
    for(i=0;i<f_num;i++){           
        if(!strncasecmp(para,f_value[2],3))
            printf("%-15s",f_value[i]);
    }                                                             
    puts("");
    return 0;
}    

不使用回调函数

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *sql,     /* SQL to be evaluated */
  char ***resultp,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);
参数
    db句柄
    sql:数据库操作语句
    resultp:用来指向sql语句执行的结果
    pnRow:满足条件的行数
    pnColumn:满足条件的列数
    pzErrmsg:错误信息地址
void sqlite3_free_table(char **result);
返回值:
    成功返回0,SQLITE_OK
    失败返回错误码(非零值) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值