目录
一、数据库
1.1.概念
1.2.类型
1.关系型数据库
2.非关系型数据库
1.3.SQL语句
二、数据库编程
2.1.安装sqlite3
2.2.函数接口
1.sqlite3_open() --- 打开数据库
2. sqlite3_errmsg() --- 获得出错原因
3.sqlite3_exec ()--- 操作数据库表
4.sqlite3_close()--- 关闭数据库
2.3.实例
三、总结
文件存放数据,掉电的情况下数据不会;
数据库存放的位置也是文件;
什么时候使用数据库呢?
当要存储和管理大量数据时,往往使用数据库,效率高;
1)Oracle
2)DB2
3)MySql
4)sqlserver
5)sqlite
1)redis
create table 表名 -------- 创建数据库表
insert into 表名 values (.....)------ 插入元素
update 表名 set 列 = “” ---- 修改元素
select 列,., . from 表名 ----- 查询元素
delete from student where .. ------- 删除某一行元素
drop table 表名 ---- 删除表
注意查询是最复杂的 可以连接where条件查询,也可以联合其他表查询
联合查询
cross join --- 交叉连接
inner join --- 内连接
outer join --- 外连接
sudo apt-get install libsqlite3-dev
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:
打开一个数据库文件
参数:
filename:数据库文件名称
ppDb:数据库句柄
返回值:
成功返回SQLITE_OK
失败返回错误码
const char *sqlite3_errmsg(sqlite3*);
获得出错原因
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:
执行SQL语句
参数:
sqlite3*:数据库句柄
sql:要执行的SQL语句字符串的首地址
callback:回调函数(只有在select语句时会使用,其余SQL语句只需传入NULL),对找到的数据要完成的操作
void *:给回调函数的参数
char **:存放错误信息空间首地址
返回值:
成功返回SQLITE_OK
失败返回错误码
int sqlite3_close(sqlite3*);
功能:
关闭sqlite3数据库
创建数据库,并创建student表,插入数据,并查询打印
#include
#include
#include
typedef struct student
{
char name[32];
char sex[8];
double score;
} stu_t;
/*打印查寻到的数据*/
int callback(void *arg, int column, char **pcontext, char **ptitle)
{
int i = 0;
for (i = 0; i < column; i++)
{
printf("%s = %s\t", ptitle[i], pcontext[i]);
}
printf("\n");
return 0;
}
int main(void)
{
sqlite3 *db = NULL;
char *perrmsg = NULL;
char tmpbuff[1024] = {0};
int ret = 0;
int i = 0;
stu_t s[3] = {
{"张三","男",89},
{"李四","男",99},
{"王二","男",100},
};
/* 打开数据库文件 */
ret = sqlite3_open("student.db", &db);
if (ret != SQLITE_OK)
{
fprintf(stderr, "fail to open:%s\n", sqlite3_errmsg(db));
return -1;
}
/* 创建表 */
sprintf(tmpbuff, "%s", "create table if not exists student (id integer primary key asc,name text,sex text,socre integer);");
ret = sqlite3_exec(db, tmpbuff, NULL, NULL, &perrmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "fail to create table:%s", perrmsg);
return -1;
}
/* 插入数据 */
for (i = 0; i < 3; i++)
{
sprintf(tmpbuff, "insert into student values(NULL,\'%s\',\'%s\',%lf);",s[i].name,s[i].sex,s[i].score);
ret = sqlite3_exec(db, tmpbuff, NULL, NULL, &perrmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "fail to create table:%s", perrmsg);
sqlite3_free(perrmsg);
sqlite3_close(db);
return -1;
}
}
/* 查寻数据 */
sprintf(tmpbuff, "select * from student;");
ret = sqlite3_exec(db, tmpbuff, callback, NULL, &perrmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "fail to create table:%s", perrmsg);
sqlite3_free(perrmsg);
sqlite3_close(db);
return -1;
}
sqlite3_close(db);
}
数据库中最难的操作还是,查询操作,查询按照很多不同条件查询,情况比较多,必须扎实掌握。