赞
踩
注:SQL语句不分大小写
一般数据采用固定的静态数据类型,而 SQLite 采用的是动态数据类型,会根据存入值自动判断。
SOLite 具有以下五种基本数据类型:
- integer:带符号的整型(最多64位)。
- real:8字节表示的浮点类型。
- text:字符类型,支持多种编码(如UTF-8、UTF-16),大小无限制。
- blob:任意类型的数据,大小无限制。 BLOB(binary large object)二进制大对象,使用二进制保存数据
- NULL:表示空值
- 创建、打开数据库:
sqlite3 *.db
提示:
- 当
*.db
文件不存在时,sqlite会创建并打开数据库文件- 当
*.db
文件存在时,sqlite会打开数据库文件- 退出数据库命令:
.quit
或.exit
所有的SQL语句都是以分号结尾的,SQL语句不区分大小写。两个减号“
--
”则代表注释。关系数据库的核心操作:
- 创建、修改、理除表
- 添加、修改、删除行
- 查表
语法:
create table 表名称 (列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, ...);
例:创建一表格该表包含3列,列名分别是:“id”、“name”、“addr”。
sqlite> create table persons (id integer, name text, addr text);
在用sqlite设计表时,每个表都可以通过
primary key
手动设置主键,每个表只能有一个主键,设置为主键的列数据不可以重复。
语法:
create table 表名称 (列名称1 数据类型 primary key, 列名称2 数据类型, 列名称3 数据券型, ...);
例:创建一表格该表包含3列,列名分别是:“id”、“name”、“addr”,设置“id”为主键
sqlite> create table persons (id integer primary key, name text, addr text);
语法:
.table
查看数据表的结构
.schma[表名]
语法:
alter table 表名 add 列名 数据类型;
sqlite> alter table persons add sex text;
语法:
alter table 表名 renam to 新表名;
sqlite> alter table persons rename to new_persons;
用于删除表(表的结构、属性以及表的索引也会被删除)
语句:
drop table 表的名称;
sqlite> drop table persons;
给一行中的所有列赋值
语法:
insert into 表名 values(列值1, 列值2, 列值3, 列值4, ...);
sqlite> insert into persons values(1, 'lucy', 'beijing');
注:当列值为字符串时要加上 ' '
号
给一行中的所有列赋值
语法:
insert into 表名 values(列值1, 列值2, ...)values (列值1, 列值2, ...);
sqlite> insert into persons values(1, 'lucy', 'beijing')values (2, 'tom', 'hunan');
注:当列值为字符串时要加上 ''
号
使用where根据匹配条件,查找一行或多行,根据查找的结果修改表中相应行的列值(修改哪一列由列名指定)。
语法:
update 表名 set 列1=值1, 列2=值2,... 匹配条件;
匹配:where子句
where子句用于规定匹配的条件。
操作符:=、<>、>、<、>=、<=
匹配条件语法:(基础)
where 列名 操作符 列值
sqlite> update persons set id=2, addr='tianjin' where name='peter';
使用where根据匹配条件,查找一行或多行,根据查找的结果删除表中的查找到的行。
语法:
delete from 表名 匹配条件;
注:当表中有多列、多行符合匹配条件时会删除相应的多行。
sqlite> delete from persons where name='peter';
用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
语法:
select * from 表名 匹配条件;
select 列名1, 列名2, ... from 表名 匹配条件;
sqlite> select id from persons; --只读表中的id
sqlite> select * from persons; --读整个表
sqlite> select * from persons where id=103; --读表中id=103的所有数据
数据库提供了丰富的操作符配合where子句实现多样的匹配方法
- in 操作符
- and 操作符
- or 操作符
- between and 操作符
- like 操作符
- not 操作符
where 列名 in (列值1, 列值2, ...)
sqlite> select * from persons where id in (1, 2); --打印id为1,2的内容
例:select 列名1, [, 列名2, …] from 表名 where 列名 in (列值1, 列值2, …)
sqlite> select name from persons where id in (1, 2); --打印id为1,2的name
where 列1=值1 [and 列2=值2 and...]
sqlite> select * from persons where id=1 and addr='beijing';
例:select 列名1, [,列名2, …] from 表名 where 列1=值1 [and 列2=值2 and …];
sqlite> select name from persons persons where id=1 and addr='beijing';
where 列1=值1 [or 列2=值2 or ...]
sqlite> select * from persons where addr='beijing' or addr='hebei';
where 列名 between A and B
sqlite> select * from persons where id between 1 and 3;
例:select 列名1 [,列名2,…] from 表名 where 列名 between A and B;
sqlite> select * from persons where addr between 'a' and 'c';
where 列名 like 列值
sqlite> select * from persons where id like 3;
sqlite> select * from persons where addr like '%jing%';
sqlite> select * from persons where addr not like '%jing%';
create table tbl2 as select * from tbl1;
create table tbl2 as select * from tbl1 where id=104;
create table ntbl(id interger primary key,name text,addr text);
insert into ntbl(id, name, addr) select id,name,addr from tbl;
drop table tbl;
alter table ntbl rename to tbl;
int sqlite3_open(char *db_name,sqlite3 **db);
参数:
db_name:数据库文件名,若文件名包含ASCII吗表范围的之外的字符,则其必需是(UTF-8)编码。
sqlite3:数据库标示,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。
返回值:
成功返回SQLITE_OK,失败返回非SQLITE_OK。
int sqlite3_close(sqlite3 *db)
参数:
db:数据库的标示
返回值:
成功:SQLITE_OK
失败:非SQLITE_OK
注:sqlite3使用了两个库:pthread、dll,故链接时应加上 -lpthread 和 -ldl。
执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数
int sqlite3_exec(sqlite3 *db,
const char *sql,
exechandler_t callback,
void *arg,
char **errmsg);
参数:
db:数据库的标识
sql:SQL语句(一条或多条),以 ';'结尾。
callback:是回调函数指针,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
arg:当执行sqlite3_exec的时候传递给回调函数的参数
errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。
打印错误信息方式:print("%s\n",errmsg);
回调函数指针:此函数由用户定义,当sqlite3_exec函数执行sql语句后,结果集不为空时sqlite3_exec函数会自动调用此函数,每次调用此函数时会把结果集的一行信息传给次函数。
typedef int(*exechandler_t)(void *para, int n_column, char **column_value, char **column_name);
参数:
para:sqlite3_exec传给此函数的参数,para为任意数据类型的地址
n_column:结果集的列数
column_value:指针数组的地址,其存放一行信息中各个列值的首地址
column_name:指针数组的地址,其存放一行信息中各个列值对应列名的首地址
返回值:
若为非0值,则通知sqlite3_exec终止回调
执行sql指向的SQL语句,函数将结果集相关的数据的地址保存在函数的参数中
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);
参数:
db:数据库的标识。
sql:SQL语句(一条或多条),以';'结尾
resultp:指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值
nrow:结果集的行数(不包含列名)
ncolumn:结果集的列数
errmsg:错误信息
释放sqlite3_get_table分配的内存
void sqlite3_free_table(char **resultp);
参数:
结果集数据的首地址
例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "sqlite3.h"
int main(int argc, char **argv)
{
sqlite3 *db = NULL;
int ret;
char *err = NULL;
char *sql;
ret = sqlite3_open("stu.db", &db);
if(ret != SQLITE_OK){
printf("Open error\n");
return -1;
}
sql = "insert into info values(120, 'zz', 'ts', time('now'), date('now'))";
sqlite3_exec(db, sql, NULL, NULL, &err);
if(err){
printf("err:%s\n",err);
}
sqlite3_close(db);
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。