sqlite3数据库
sqlite3常用命令
-
当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:
#sqlite3 test.db -
查看数据库文件信息命令(注意命令前带字符’.’):
sqlite>.database -
查看所有表的创建语句:
sqlite>.schema -
查看指定表的创建语句:
sqlite>.schema table_name -
设置显示信息的分隔符:
sqlite>.separatorsymble Example:设置显示信息以‘:’分隔
sqlite>.separator : -
设置显示模式:
sqlite>.mode mode_nameExample:默认为list,设置为column,其他模式可通过.help查看mode相关内容
sqlite>.mode column -
设置每一列的显示宽度:
sqlite>.width width_valueExample:设置宽度为2
sqlite>.width 2 -
列出当前显示格式的配置:
sqlite>.show -
退出sqlite终端命令:
sqlite>.quit或sqlite>.exit
###SQL语句
都以‘;’结尾 特别注意
打开数据库
1.原型:
int sqlite3_open(
const char* filename, /* 数据库文件名, 必须为 UTF-8 格式 */
sqlite3** ppDB /* 输出: SQLite 数据库句柄 */
);
2.说明:参数filename为指定打开的数据库, sqlite3的结构指针 *ppDB 为数据库连接句柄。如果数据库被成功打开(和/或 创建), 函数返回 SQLITE_OK;否则返回一个错误码, 可以通过* sqlite3_errmsg()* 查看错误原因.。出错,则只可能是 SQLite 无法为 SQLite 对象分配内存空间, 此时将返回 NULL。
####关闭数据库
1.原型:
int sqlite3_close(
sqlite3* pDB /* 由 sqlite3_open 或基相关的函数打开的 SQLite 对象句柄 */
);123
2.说明: 该函数用来关闭 sqlite3 对象。返回 SQLITE_OK 表示对象被成功关闭,以及所有相关的资源被成功回收。应用程序必须在关闭之前 “完成(finalize)” 所有的 “预编译语句(prepared statements)”, 并且关闭所有的 “二进制句柄绑定(BLOB handle)”, 如果在关闭时还有未完成的预编译语句或二进制句柄, 那么函数返回 SQLITE_BUSY(5)。
####错误处理
原型1:
const char *sqlite3_errmsg(
sqlite3* pDB /* SQLite3 数据库句柄 */
);
说明1: 该函数返回与pDB数据库指针相关的错误信息,下次调用会覆盖。
原型2:
int sqlite3_errcode(
sqlite3* pDB /* SQLite3 数据库句柄 */
);
说明2: 该函数返回最近一次调用 sqlite3_ API时产生的错误码。
添加数据记录
insert into table_name(field1, field2, ...) values(val1, val2, ...);
说明: valx为需要存入字段的值。 例,往学生信息表添加数据:
例子:Insert into student_info(stu_no, name) values(0001, alex);
修改数据记录
update table_name set field1=val1, field2=val2 where expression;
说明: where是sql语句中用于条件判断的命令,expression为判断表达式 例,修改学生信息表学号为0001的数据记录: update student_info set stu_no=0001, name=hence where stu_no=0001;
删除数据记录
delete from table_name [where expression];
说明:不加判断条件则清空表所有数据记录。 例,删除学生信息表学号为0001的数据记录: delete from student_info where stu_no=0001;
查询数据记录
select指令基本格式: select columns from table_name [where expression];
查询输出所有数据记录 select * from table_name;
限制输出数据记录数量 select * from table_name limit val;
升序输出数据记录 select * from table_name order by field asc;
降序输出数据记录 select * from table_name order by field desc;
条件查询 select * from table_name where expression;
select * from table_name where field in ('val1', 'val2', 'val3'); select * from table_name where field between val1 and val2;
查询记录数目 select count (*) from table_name;
区分列数据 select distinct field from table_name;
有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。
删除数据表或索引
drop table table_name;
drop index index_name;
执行sql语句
原型:
int sqlite3_exec(
sqlite3* pDB, /* sqlite3句柄 */
const char* sql, /* 被执行的 SQL 语句 */
int (*callback)(void*,int,char**,char**), /* 执行/查询回调函数 */
void* pvoid, /* 传递给回调函数的第一个参数 */
char**errmsg /* 错误输出信息 */
);
说明: 当回调函数不为 NULL, 则它对每一个行查询结果都会调用该回调函数;如果没有回调函数被指定, sqlite3_exec() 只是简单地忽略查询结果。 如果回调函数返回非零,sqlite3_exec() 立即中断查询,并且不再执行后续的 SQL 语句,也不再调用回调函数, sqlite3_exec() 将返回 SQLITE_ABORT 结束执行。 当发生错误时, 执行将中断。如果 errmsg 参数不为空,错误信息将会被写入(errmsg 由 sqlite3_malloc() 分配内存空间,由sqlite3_free() 释放该内存空间)。如果 errmsg 参数不为 NULL, 并且没有错误发生, errmsg 被设置为 NULL。 通常情况下callback在select操作中会使用到,如果不需要回调函数。第三第四个参数设为NULL。
回调函数原型:只有查询时候才会调用回调函数,实际上回调函数只是一个函数指针
int callback(
void *params, /*params是sqlite3_exec传入的第四个参数*/
int column_size, /*column_size是结果字段的个数*/
char **column_value, /*column_value是返回记录的一位字符数组指针*/
char **column_name /*column_name是结果字段的名称*/
);