== == == == == == == == == == == == == SQLite常用命令== == == == == == == == == == == == == == == == == == ==
1 、查找帮助命令 . help
2 、退出SQLite命令 . q . quit . exit
3 、显示各种设置的当前值 . show
4 、查看表的create模式 . schema . schema name
5 、显示当前打开的数据库文件 . database
6 、显示数据库中所有的表名 . tables
7 、创建或者打开一个数据库 sqlite3 xxx. db1 、创建新表
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字段可以是nullB、 一个表有且只有一个主键,但可以有0 个或多个unique字段C、 逻辑设计上,主键用以标识记录,而unique字段就是说明不重复一言以蔽之:primary key = unique + not nullNOT NULL 约束
默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。
NULL 与没有数据是不一样的,它代表着未知的数据。