Sqlite3数据库

Posted by JIN Blog on May 27, 2018

sqlite3数据库

sqlite3常用命令

  1. 当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:#sqlite3 test.db

  2. 查看数据库文件信息命令(注意命令前带字符’.’): sqlite>.database

  3. 查看所有表的创建语句: sqlite>.schema

  4. 查看指定表的创建语句: sqlite>.schema table_name

  5. 设置显示信息的分隔符: sqlite>.separator 

    symble Example:设置显示信息以‘:’分隔 sqlite>.separator :

  6. 设置显示模式: sqlite>.mode mode_name

    Example:默认为list,设置为column,其他模式可通过.help查看mode相关内容 sqlite>.mode column

  7. 设置每一列的显示宽度: sqlite>.width width_value

    Example:设置宽度为2 sqlite>.width 2

  8. 列出当前显示格式的配置: sqlite>.show

  9. 退出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是结果字段的名称*/
);