sqlite3数据库操作接口详细整理,以及常用的数据库语句

sqlite3_open()

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */ 
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);
功能:打开一个数据库,如果数据库不存在,则创建一个数据库
参数1:要打开的数据库的名字,是一个字符串
参数2:数据库操作句柄,是一个二级指针,需要我们传入一级指针的地址,如果打开数据库成功,则数据库指针由该参数返回
返回值:成功返回SQLITE_OK,失败返回一个错误码(非linux的错误码),可以使用sqlite_errmsg来获取错误信息,由sqlite3_errcode返回错误码值
注意:无论打开数据库是否成功,在不使用数据库时都应该使用sqlite3_close将其关闭

sqlite3_close()

int sqlite3_close(sqlite3*);
功能:关闭数据库,断开句柄所拥有的资源
参数:数据库指针
返回值:成功返回SQLITE_OK,失败返回其他错误码

sqlite3_errmsg()

const char *sqlite3_errmsg(sqlite3*);
功能:通过出错的句柄返回错误信息
参数:出错的句柄
返回值:对应的错误信息,是一个字符串

sqlite3_errcode()

int sqlite3_errcode(sqlite3 *db)
功能:通过错误句柄返回错误码
参数:错误句柄
返回值:错误码

sqlite3_exec()

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 */
);
功能:调用该函数,执行sql语句
参数1:已经被打开的数据库句柄
参数2:要执行的sql语句
参数3:回调函数,主要用于数据库查找时,处理查找的结果集的函数,如果不需要处理sql语句的结果,则填NULL即可
参数4:参数3的第一个参数
参数5:错误信息
返回值:成功返回SQLITE_OK,失败返回其他错误码

回调函数

int callback(void* arg,int cols,char** col_text, char** col_name)
功能:处理sqlite3_exec执行sql语句后的结果集,每有一条记录,就会执行一次callback函数
参数1:由sqlite3_exec函数传入的参数
参数2:当前记录中的列的个数
参数3:当前记录中的字段内容,是一个数组
参数4:当前记录中字段的名称,是一个数组
返回值:成功执行返回0,失败执行返回其他值

sqlite3_get_table()

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* 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 */
);
功能:通过执行sql语句,得到结果集中的内容
参数1:数据库
参数2:要执行的sql语句
参数3:查询的结果,需要定义一个二级指针变量,将地址进行传递
参数4: 查询结果的行数
参数5:查询结果的列数
参数6:错误信息
返回值:成功返回SQLITE_OK,失败返回非0的错误码

sqlite3_free_table()

void sqlite3_free_table(char **result);
功能:释放表的空间
参数:通过sql语句查询的结果

sql语句

1)创建表格

create table 表名 (字段名 数据类型, 字段名 数据类型);

create table if not exists 表名 (字段名 数据类型, 字段名 数据类型); ​

eg:

CREATE TABLE stu (id int, name char, score float);

CREATE TABLE if not exists stu1 (id int, name char, score float); ​

注意:数据库不支持严格的数据类型检查,数据类型写错了,创建是能够成功的,不会有错误提示;

2)删除表格

drop table 表名; ​

eg:

drop table stu1;

3)插入记录

字符串类型可以使用单引号,也可以使用双引号 ​

① 全字段插入 insert into 表名 values (数据1, 数据2, 数据3);

eg:

INSERT INTO stu VALUES (2, 'ls', 99); INSERT INTO stu VALUES (1, "zs", 59);

注意: 1.数据输入的顺序要与创建时候字段的顺序一致;

②部分字段插入 insert into 表名 (字段名1, 字段名2) values (数据1, 数据2);

eg:

INSERT INTO stu (id, name) values (9, 'ww');

注意: 1.数据的顺序要与指定的字段名1,字段名2对应;

4)查看记录

.header on 打开表头

.mode column 对齐

在终端输入shell指令:sqlitebrowser sq.db 图形化界面 ​

① 查看所有记录 select * from 表名;

eg:

SELECT * FROM stu;

② 查看某几行 select * from 表名 where 限制条件;

逻辑与 and 逻辑或 or

eg:

SELECT * FROM stu WHERE id<3 AND score>90;

SELECT * FROM stu WHERE id<2 OR id>3;

③ 查看某几列

select 字段1, 字段2 from 表名;

select 字段1, 字段2 from 表名 where 限制条件;

eg:

SELECT id, name FROM stu;

SELECT id, name FROM stu WHERE score>90;

5)修改记录

update 表名 set 字段=数值 where 限制条件; ​

eg:

UPDATE stu SET score=60 WHERE id=1;

注意:该语句中的where表明去修改指定的记录,如果没有加where,则表明将所有记录的该值都更新

6)删除记录

delete from 表名 where 限制条件; ​

eg:

DELETE FROM stu WHERE id=1;

delete from stu; 删除表格中的所有数据;

7)主键(primary key)

primary key 主键;

create table 表名(字段名 数据类型 primary key, 字段名 数据类型);

primary key主键:唯一标识表格中的每一条记录;

例如:id字段为主键,当表格中有id==1的记录时,不允许再插入id为1的记录了;

eg:

CREATE TABLE stu (id int PRIMARY KEY, name char, score float); ​

注意:主键的值必须唯一。每一张表格都应该设置一个主键,而且只能设置一个。

8)拷贝

从a中拷贝所有数据到b中:

create table b as select * from a;

从a中拷贝指定字段到b中:

create table b as select 字段,字段,字段 from a; ​

CREATE TABLE stu1 AS SELECT * FROM stu;

CREATE TABLE stu2 AS SELECT id, name, score FROM stu;

9)增加列

alter table 表名 add column 字段名 数据类型;

alter table stu add column score int;

10)修改表名

alter table 旧表名 rename to 新表名;

alter table stu rename to stuinfo;

11)修改字段名(列名)

不支持直接修改列名

① 将表重新命名(a改成b)

alter table stuinfo rename to stu;

② 新建修改名字后的表(新建一个a)

create table stuinfo (name char, age1 int, sex char, score int);

③ 从旧表b中取出数据,插入到新表a中;

insert into stuinfo select * from stu;

12)删除列

不支持直接删除列;

1.创建一个新表b,并复制旧表a需要保留的字段信息;

create table stu as select name, age1, sex from stuinfo;

2.删除旧表a;

drop table stuinfo;

3.修改新表b的名字a;

alter table stu rename to stuinfo;

相关推荐
weisian1512 分钟前
Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)
数据库·redis·缓存
中草药z1 小时前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
地球资源数据云1 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
Ahern_2 小时前
Oracle 普通表至分区表的分区交换
大数据·数据库·sql·oracle
夜半被帅醒2 小时前
MySQL 数据库优化详解【Java数据库调优】
java·数据库·mysql
不爱学习的啊Biao2 小时前
【13】MySQL如何选择合适的索引?
android·数据库·mysql
破 风2 小时前
SpringBoot 集成 MongoDB
数据库·mongodb
Rverdoser2 小时前
MySQL-MVCC(多版本并发控制)
数据库·mysql
m0_748233643 小时前
SQL数组常用函数记录(Map篇)
java·数据库·sql
dowhileprogramming3 小时前
Python 中的迭代器
linux·数据库·python