==========================SQLite常用命令======================================
1、查找帮助命令 .help
2、退出SQLite命令 .q .quit .exit
3、显示各种设置的当前值 .show
4、查看表的create模式 .schema .schema name
5、显示当前打开的数据库文件 .database
6、显示数据库中所有的表名 .tables
7、创建或者打开一个数据库 sqlite3 xxx.db
1、创建新表
create table 表名(id integer ,name text,passwd integer);-->未指定类型默认字符串,字符串添加新纪录时用""
2、删除表
drop table 表名
3、查询表中记录
select * from 表名 ------> 所有记录
select * from 表名 where id<2;
5、向表中添加新纪录
insert into 表名 values(1,"zhangsan",123);
insert into 表名(id ,name ,passwd) values(1,"zhangsan",123);
6、按指定条件删除表中的记录
delete from 表名 where id=1;
7、更新表中记录
update 表名 set name="xiaoming",passwd=555 where id=1;
8、在表中添加字段(列)
alter table 表名 add column age integer;
==========================sqlite3_open函数=================================
**************** open和close() *******************************
int sqlite3_open(const char *fileName, sqlite3 **ppDB);
int sqlite3_close(sqlite3 *pDB);
fileName --->待打开的数据库文件名称,包括路径,以’\0’结尾
特别说明:SQLite支持内存数据库,内存方式存储使用文件名":memory:"
ppDB --->返回打开的数据库句柄
返回值 执行成功返回SQLITE_OK(0),否则返回其他值
功能
sqlite3_open()打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
如果 filename 参数是 NULL 或 ':memory:',将会在 RAM 中创建一个内存数据库,
这只会在 session 的有效时间内持续。否则将打开或创建该名称的数据库文件。
sqlite3_close()关闭一个打开的数据库,对象被成功地销毁,并且所有相关的资源都被解除分配。
注意
sqlite3_open()将参数filename视为UTF-8编码
const char *sqlite3_errmsg(sqlite3 *pDB);
功能
获取最近调用的API接口返回的错误说明,这些错误信息UTF-8的编码返回
并且在下一次调用任何SQLiteAPI函数时被自动清除
返回值
错误说明的字符串指针
************************* sqlite3_exec() *****************************
int sqlite3_exec(sqlite3 *ppDB,constchar *sql,sqlite_callback callback,void *para,char **errMsg);
ppDB --->打开的数据库句柄,sqlite3_open的返回值
sql --->待执行的SQL语句字符串,以'\0'结尾
callback --->回调函数,用来处理查询结果,如果不需要回调(比如做insert或者delete操作时)可输入NULL,一般select使用
para --->用户传入的参数,可以为NULL,该参数指针最终会被传给回调函数callback,供用户在回调函数中使用
errMsg --->返回错误信息,注意是指针的指针
printf(“%s/n”,errMsg)得到一串字符串信息,这串信息告诉你错在什么地方
-----------------------------回调函数用法()-------------------------------------
typedef int(*sqlite_callback)(void*para,int columnCount,char **columnValue,char **columnName);
para --->是你在 sqlite3_exec 里传入的 void * 参数
columnCount --->是这一条记录有多少个字段 (即这条记录有多少列)
columnValue --->是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组)
每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以\0结尾)
columnName --->跟 column_value是对应的,表示这个字段的字段名称
一般有以下写法
sqlite3_exec(ppDb,"select * from mytable;",show_message,NULL,&errMsg);
show_message(void*para,int columnCount,char **columnValue,char **columnName)
for( i = 0 ; i < columnCount; i ++ )
{
printf("字段名:%s , 字段值:%s\n", columnName[i], columnValue[i] );
} return 0;
-----------------------------------------------------------------------------
返回值
执行成功返回SQLITE_OK,否则返回其他值。
功能
当回调函数不为 NULL, 则它对每一个行查询结果都会调用该回调函数;如果没有回调函数被指定,
sqlite3_exec() 只是简单地忽略查询结果。如果回调函数返回非零,sqlite3_exec() 立即中断查询,
并且不再执行后续的 SQL 语句,也不再调用回调函数, sqlite3_exec() 将返回 SQLITE_ABORT 结束执行。
当发生错误时, 执行将中断。如果 errmsg 参数不为空,错误信息将会被写入(errmsg 由 sqlite3_malloc() 分配内存空间,
由sqlite3_free() 释放该内存空间)。如果 errmsg 参数不为 NULL, 并且没有错误发生, errmsg 被设置为 NULL。
通常情况下callback在select操作中会使用到,如果不需要回调函数。第三第四个参数设为NULL。
注意
此接口是一个对sqlite3_prepare_v2, sqlite3_step, sqlite3_finalize接口的便捷封装
以便应用程序可以用少量的代码来运行多条SQL语句。
sqlite3_free(errmsg);
************sqlite3_get_table()********
int sqlite3_get_table(sqlite3 *db,const char *zSql,char ***pazResult,int *pnRow,int *pnColumn,char **pzErrmsg);
void sqlite3_free_table(char **result);
参数
db --->打开的数据库句柄,sqlite3_open的返回值
zSql --->sql语句,跟sqlite3_exec 里的sql 是一样的。是一个很普通的以\0结尾的char*字符串
pazResult --->查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。
它内存布局是:第一行是字段名称,后面是紧接着是每个字段的值
pnRow --->查询出多少条记录(即查出多少行,不包括字段名那行)
pnColumn --->多少个字段(多少列)
pzErrmsg --->错误信息,跟前面一样
result --->释放pazResult指向的那块内存
返回值
执行成功返回SQLITE_OK,否则返回其他值
功能
不使用回调查询数据库获取表的信息
========字段类型=======================
integer --->整数,可以是1、2、3、4、6或8个字节,SQLite会根据数值大小自动调整。
real --->实数(浮点数),一律使用8个字节存储
text --->文本,最大支持长度为1,000,000,000个字符的单个字符串
blob --->二进制对象,最大支持长度为1,000,000,000个字节
null --->没有值
char(size) --->固定长度的字符串,size规定字符串的长度
varchar(size) --->可变长度的字符串,size规定字符串的最大字符个数
=========约束==========================
约束是用来限制插入到表中的数据类型。确保数据库中数据的准确性和可靠性。
约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。
以下是在 SQLite 中常用的约束。
NOT NULL 约束 --->确保某列不能有 NULL 值。
DEFAULT 约束 --->当某列没有指定值时,为该列提供默认值。
UNIQUE 约束 --->确保某列中的所有值是不同的,不可重复。
PRIMARY KEY约束 --->(主键)唯一标识数据库表中的各行/记录,不可为空,不可重复。
CHECK 约束 --->用于限制列中值的范围,(CHECK score >=0 and score <= 100)
主键和unique字段的区别:
A、 主键不可为null(如果为null系统为自动递增),unique字段可以是null
B、 一个表有且只有一个主键,但可以有0个或多个unique字段
C、 逻辑设计上,主键用以标识记录,而unique字段就是说明不重复
一言以蔽之:primary key = unique + not null
NOT NULL 约束
默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。
NULL 与没有数据是不一样的,它代表着未知的数据。