IOS-sqlite3
一.数据库基本知识
1.表-table
字段-属性-列-column
纪录-行-row
2.基本类型
integer:整型
real:浮点型
text:文本字符串
blob:二进制数据
sqlite可以设定为无类型参数。
3.SQL数据库不分大小写
二.SQL语句
结构化查询语言,是对关系型数据库的数据进行定义和操作的语言(增删改查,CRUD)。
1.数据库定义语句:DDL(Data Definition Language)
包括create和drop等操作(创建和删除)
CREAT TABLE IF NOT EXISTS 表名(字段1 字段类型,字段名称2 字段类型,...);
例如:CREAT TABLE IF NOT EXISTS t_student(name text,age integer);
DROP TABLE IF EXISTS 表名
例如:DROP TABLE IF ESISTS t_student
2.数据库操作语句:DML(Data Manipulation Language)
包括insert,update,delete等操作(添加,修改,删除)
INSERT INTO 表名(字段1,字段2,...)values(字段1的值,字段2的值,...);
例如:INSERT INTO t_shop(name,price,left_count)VALUES('one',100.1,500);
UPDATA 表名 SET 字段1 = 字段1的值,字段2 = 字段2的值,...;
例如:UPDATA t_student SET name = 'bob',age =25;//这里会把全部都改了
DELETE FROM 表名;
例如:DELETE FROM t_student;WHERE ...
3.数据库查询语句:DQL(Data Query Language)
可用于查询获得表中的数据,关键字select
其他常用关键字有where,order by,group by和having
排序: SELECT * FROM t_student ORDER BY age ASC/DESC(升序/降序);
limit:select * from 表名 limit 数值1,数值2;//跳过前面的数值1条,查找后面的数值2条
4.约束
主键(primary key):用来唯一表示某一条记录,可以是多个
creat table if not exists t_student (id integer primary key , name text, age integer);//可以自增长
外键约束:利用外键可以建立表与表的关系,外键一般加在多的表。
create table t_student(id interger primary key autoincrement,name text,age integer, class_id interger,constraint "fk_student_rel_class" FOREIGN KEY("class") REFERENCE "t_class"("id"))
其他约束:
字段 not null ,不能为空
字段 uinque ,不能重复
字段 default ,默认为
CREAT TABLE IF NOT EXISTS 表名(字段1 字段类型 not null uinque,字段名称2 字段类型,...);
三.sqlite3具体应用
1.创建数据库和表
@property(nonatomic, assign) sqlite3 *db;
//打开数据库
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"mydb.db"];
int tem = sqlite3_open(filename.UTF8String, &_db);
if(tem == SQLITE_OK)
{
//创建表格
const char *sql = "create table if not exists t_student (id integer primary key,name text not null ,age integer)";
char *errmsg = NULL;
//第二个参数是数据库操作语句
sqlite3_exec(self.db, sql, NULL, NULL, &errmsg)
if(errmsg){NSLog(@"创表失败%s",errmsg);}
}else{
NSLog(@"打开失败");
}
2.插入数据
NSString *sql = "INSERT INTO t_student(name,age)VALES('bob',25)";
sqlite3_exec(self.db,sql.UTF8String,NULL,NULL,NULL);
3.查询数据
NSString *sql = "select * from t_student";
//取出查询结果
sqlite3_stmt *stmt = NULL;
int tem = sqlite3_prepare_v2(self.db,sql.UTF8String,-1,&stmt,NULL);
if(tem == SQLITE_OK)
{
where(sqlite3_setp(stmt) == SQLITE_ROW){//成功取出一条数据
const unsigned char *name = sqlite3_column_text(stmt,0);//取出第0数据
NSLog(@"%@",[NSString stringWithUTF8String:name]);
}
}
关闭数据库
sqlite3_close()