数据库(sqlite3)
(一)、基础知识sqlite3:数据管理系统软件(oracle也是,sqlserve也是)
数据库实际上就是一个文件,比较特殊,文件后缀为.db
数据库如何储存文件:
1、关系型数据库:二维表(主流)
2、层次性数据库:查找麻烦
3、网状结构模型:数据有重余
数据库系统结构类型:
1、数据库文件DBMS在同一台机器上:本地数据库
2、数据库与DBMS不在一台机器上(两台):主从式数据库
3、数据库分布开(一个DBMS,多个数据库):分布式数据库
4、客户机/服务器数据库:通过网络
常见数据库管理办法:
1、Oracle:第一个数据库管理系统
2、SQL server:微软,支持客户机/服务器结构的数据库管理系统
3、DB2
以上三个为大型数据库
4、ACCESS:自动生成SQL
关系型数据库相关知识点
关系:二维表 元组:一行 属性:一列为一个属性(也称字段)
域:每个属性的取值范围
integer:整型 text:字符串 bool real:实型 null image:图片
主键:该属性可以唯一标识一个元组。
(二)、sqlite3
1、特点:1>体积适当 2>可移植性 3>编程接口简单 4>代码开源
与此相近的数据库系统有:sybase 、SQL Anywhere 、 Oracle TimeTen
2、例子
create table student(id integer, name text, age integer,);
insert into student(id, name, age) values(1, zhangsan, 14);
3、select:
语法:select id from where name = 'zhangsan';
4、create:
语法:create table 表名(字段1,字段2,……);
5、看数据库中有几张表:.schema
6、insert into student(id,age) values(1,12);
7、select * from student;
8、设定主键:create table student1(id integer primary key,name text);
此后id不可重复,且id没有赋值会自动增值赋值
9、更新:update student3 setname = 'lisi' where id = 2;
10、删除:delete from student3 where id = 1;删除整个表:drop table student1;
11、修改表
重命名表:alter table student rename to stu222;
添加属性:alter table student add column sex text;
12、select:
select <目标序列名>
from <数据源>
where <检索条件表达式>
group by<分组依据列>
13、例子:
#include <sqlite3.h>
int main()
{
int ret;
sqlite3 *db;
ret = sqlite3_open("student.db",&db);
if(ret != SQLITE_OK)
{
printf("……");
exit(1);
}
sqlite3_close(db);
return 0;
}
14、执行语句:
sqlite3 *db;
char *errmsg;
char sql[1024] = "create table student(id integer, name text, age integer)";
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
调试:gcc sqlite_demo.c -lsqlite3 添加链接库
15、sqlite3_get_table:
例子:
#include <stdio.h>
#include <sqlite3.h>
static sqlite3 *db=NULL;
static char **Result=NULL;
static char *errmsg=NULL;
int main()
{
int rc, i, j;
int nrow;
int ncolumn;
rc= sqlite3_open("test.db", &db);
rc= sqlite3_get_table(db, "select * from test_table", &Result, &nrow, &ncolumn,
&errmsg);
if(rc)
{
printf("query fail!\n");
}
else
{
printf("query success!\n");
for(i = 1; i <= nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
printf("%s | ", Result[i * ncolumn + j]);
}
printf("\n");
}
}
sqlite3_free_table(Result);
sqlite3_close(db);
return 0;
}
16、sqlite3详例:
int main()
{
char name[20];
int age;
int id;
int ret;
sqlite3 *db;
char sql[1024] = "create table student3(no integer,name text,age integer);";
char *errmsg;
ret = sqlite3_open("student3.db",&db);
if(ret != SQLITE_OK)
{
printf("open db error!\n");
exit(1);
}
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
memset(sql,0,sizeof(sql));
scanf("%d",&id);
scanf("%s",name);
scanf("%d",&age);
sprintf(sql,"insert into student3(no,name,age) values(%d,'%s',%d);",id,name,age);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
sqlite3_exec(db,"select no,name,age from student3;",print_result,"hello",&errmsg);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
sqlite3_close(db);
return 0;
}