sqlite3基本介绍
前言:数据库简介
数据库管理系统主要是根据数据模型对数据进行储存和管理,满足三方面的要求:
- 真实的模拟现实世界
- 容易人的理解
- 便于在计算机上实现
数据结构,数据操作和完整性的约束是构成数据模型的三要素。常见的数据库:ORACLE,Mysql,SQLserver,Sybase,SQLite;
1.sqlite简介
sqlite是一个开源的,内嵌式的关系型数据库,目前最高版本为sqlite3,sudo apt-get install sqlite3安装。
sqlite特性:零配置,可移植,自由,可靠。。。。
sqlite数据类型:
- integer:带符号的整型
- real :8字节的浮点类型
- text:字符类型
- blob:任意类型的数据,大小无限制
- null:空值
2.系统命令:
- 以’.'开头的命令
- .quit
- .help
- .exit
- .database//查看打开的数据库
- .table //查看当前数据库中的表
3.sql命令
- 创建数据库表(create table stu(id Integer,name char,score Integer);)//stu 表的名称,后面是结构
- 创建数据库表(create table stu(id Integer primary,name char,score Integer);//设置主键,表示不重复
- 查看表的结构(.schema)
- 插入数据:(insert into stu values(1001,‘lisi’,99))
- 查看数据(select * from stu;)
- 部分插入(insert into stu (name,score)values(1003,“wahu”))
- 查看部分字段:select name from stu;
- 按条件查找数据(and操作);select * from stu where score=80 and name=“lisi”;
- 按条件查找数据(in操作);select * from stu where score in(100,103);
- 删除记录有条件的 : delete stu where name = “wamng”;
- 更新的一条命令:update stu set name=‘wangwu’ where id=1001;
- alter table stu add column address char//增加一类
- 重命名 alter table stu1 rename to stu;
- drop table stu//删除一张表
- create table stu1 as select id,name,socre from stu;//复制一张表(可以用来删除一列)
- begin;//开始一个事物 commit//提交 rollback//取消begin后的操作
4.1其他
- length();//字符串的长度 lower()//字符串转换为小写 upper()//字符串转换为大写 语法:select 函数(列名)from 表名;
- avg:返回列的平均值;count:返回列的行数;max:返回列的最大数;min:返回列的最小数;sum:返回列数之和
- 约束:主键,唯一约束,检查约束。主键:primary,唯一性,应当使用在对用户没有意义的;唯一约束:unique,避免重复,多处使用;检查约束:check(条件);
- 链接表,触发器;
5.SQlite编程接口
-
打开数据库
函数原型:SQLITE_API int sqlite3_open( const char *filename, /* Database filename (UTF-8)数据库的文件名 */ sqlite3 **ppDb /* OUT: SQLite db handle句柄, */ ); 返回值:成功返回SQLITE_OK,否则返回其他值。
-
准备好SQL语句对象
函数原型:SQLITE_API int sqlite3_prepare_v2( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); 返回值:成功返回SQLITE_OK,否则返回其他值。
-
执行准备好的SQL语句对象
函数原型:SQLITE_API int sqlite3_step(sqlite3_stmt*);
-
释放资源,销毁SQL语句对象和关闭数据库连接对象
销毁SQL语句对象函数原型:SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); 关闭数据库连接对象函数原型:SQLITE_API int sqlite3_close(sqlite3*);
5.执行sql语句
int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *arg,char **errmsg);
db:调用的数据库
sql:sql语句
callback:回调函数,每成功执行一次sql语句就执行一次callback函数
void *:给回调函数传的参数(这里当需要使用时,需要进行强制类型转换)
errmsg:错误信息
6.回调函数
typedef int (*exechandler_t)(void *para,int n_column,char **column_value,char**column_name);
//1.para:sqlite3_exec传入的参数
//2.n_column:结果集的列数,3.column_value指针数组的地址,其存放一行信息中各列值的首地址4.column_name:列值对应列名的首地址
6.实例
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int main()
{
sqlite3 *db =NULL;
char *err = NULL
int ret;
char sql[400];
sprintf(sql,"insert into user values('%s',%s);",msg->name,msg->data);
ret = sqlite3_open("stu.db",&db);
if(ret !=SQLITE_OK)
{
printf("error\n");
return -1;
}
sqlite3_exce(db,sql,loadinfo,NULL,&err);
if(err != NULL)
{
printf("err:%s\n",err);
}
sqlite3_close(db);
return 0;
}
int loadinfo( void arg,int n_column,char **value,char**name)
{
int i;
for(i=0;i<n_column;i++)
{
printf("%s= %s\n",name[i],val[i]);
}
return SQLITE_OK;
}