iOS H5 PHP
数据库管理系统
- SQL: SQL 是Structured Query Language(结构化查询语言)的缩写,SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.
- 常见的数据库:
- My SQL : MySQL是一个精巧的SQL数据库管理系统
优点:免费,轻量级 - Oracle :
甲骨文公司的一款关系数据库管理系统.系统可移植性好,使用方便,功能强.
- 数据库特征:
- 以一定的方式存储在一起(表结构)
- 能为多个用户共享
- 具有尽可能少的冗余代码
- 与程序彼此独立的数据集合
- 数据库(Database)是按照数据结构来组织,存储和管理数据的仓库.
- 数据库分类
- 关系型数据库(主流)
- 对象型数据库
- 层次性数据库
常用关系型数据库: PC :Orcsle ,My SQL ,SQL Server.Access.DB2 ;嵌入式:SQLite;
SQL语句
- SQLite是无类型的数据库,可以保存任何类型的数据,对于SQLite来说对字段不指定类型是完全有效的.
- SQLite近似类规则
- SQLite字段约束条件:
- NOT NULL -非空(必填选项)
- UNIQUE - 唯一(不能重复)
- PRIMARY KEY - 主键(一般设置为integer或NSString;特点:1: NOT NULL 不为空 2: UNIQUE 不重复,(唯一标识))
- FOREIGN KEY - 外键(该字段作为另一个表的主键,链表查询)
- AUTOINCREMENT - 自增量变量(一般设置Integer设置,它会自动根据上一条数据自增)
- CHECK -条件检查(确保一列中所有值满足一定条件)
- DEFAULT - 默认
表里可以没有主键,主键不是必填选项,当把一个字段设置为PRIMARY KEY 那么这个字段为必填选项 (不可为空,不能重复)
去
- SQL语句:
-
建表命令: (Create table) - 数据插入命令:(Insert)
- 数据库更新命令:(Update)
- 数据库删除命令:(Delete)
- 数据库检索命令:(Select)
注:如果值是字符串或字符类型,需要用单引号括起来
- update
update stu set gender = ‘ 女’ where gender = ‘男' ;
整列修改
update stu set gender = ‘ 女’ where name = ‘班长' ; 单条修改
- delete
- 查询select
单例
#import
"DataBaseHandle.h"
static
DataBaseHandle
*dataBase =
nil
;
@interface
DataBaseHandle
()
@end
@implementation
DataBaseHandle
//单例方法
+ (
DataBaseHandle
*)sharedDataBaseHandle{
if
(
dataBase
==
nil
) {
dataBase
= [[
DataBaseHandle
alloc
]
init
];
}
return
dataBase
;
}
@property
(
nonatomic
,
copy
)
NSString
* dbPath;
//懒加载
//获取路径 documents
文件夹下的一个叫做
person.sqlite
//
重写getter方法
-(
NSString
*)dbPath{
if
(
_dbPath
==
nil
) {
NSString
*documentPathStr = [
NSSearchPathForDirectori esInDomains
(
NSDocumentDirectory
,
NSUserDomainMask
,
YES
)
objectAtIndex
:0];
_dbPath
= [documentPathStr
stringByAppendingPathCom ponent
:
@"person.sqlite"
];
}
return
_dbPath
;
}
数据库技术的实现
流程
-
Linux系统级的SQLite技术实现框架:Build Phases —>Link With Libraries —>添加 —>sqlite —>libsqlite3.0.tbd
-
引入头文件 - 打开数据库
- 对数据库,并进行操作(执行SQL命令 建表,增删改查)
- 关闭数据库
代码实现:
.h
#import
@interface DataBaseHandle : NSObject
+ ( DataBaseHandle *)sharedDataBaseHandle;
// 返回自身
// 命名 一般用 share 和 default 开头 + 类名
// 打开数据库
-( void )openDB;
// 关闭数据库
-( void )closeDB;
// 创建表
-( void )createTable;
// 插入一条数据
-( void )insertName:( NSString *)name
gender:(
NSString
*)gender
age:(
NSInteger
)age;
// 通过 UID 更新一个数据
-( void )updateWithUID:( NSInteger )uid;
// 通过 UID 删除一个数据
-( void )deleteWithUID:( NSInteger )uid;
// 搜索全部
-( void )searchAll;
// 根据 name 查询一条数据
@interface DataBaseHandle : NSObject
+ ( DataBaseHandle *)sharedDataBaseHandle;
// 返回自身
// 命名 一般用 share 和 default 开头 + 类名
// 打开数据库
-( void )openDB;
// 关闭数据库
-( void )closeDB;
// 创建表
-( void )createTable;
// 插入一条数据
-( void )insertName:( NSString *)name
// 通过 UID 更新一个数据
-( void )updateWithUID:( NSInteger )uid;
// 通过 UID 删除一个数据
-( void )deleteWithUID:( NSInteger )uid;
// 搜索全部
-( void )searchAll;
// 根据 name 查询一条数据
-(void)searchWithName:(NSString *)name;
//
根据
gender
查询一条数据
-( void )searchWithGender:( NSString *)gender;
// 根据 age 查询一条数据
-( void )searchWithGender:( NSString *)gender;
// 根据 age 查询一条数据
-(void)searchWithAge:(NSInteger)age;
@end
.m
-
打开数据库
//
初始化一个数据库
-(void)openDB{
}
-
执行SQL命令
-(
void
)createTable{
}
//
插入一条数据.m
-(
void
)insertName:(
NSString
*)name
gender:(
NSString
*)gender
age:(
NSInteger
)age{
//
插入数据的
sql
语句
,
数据不确定
,
所以在
values
里面使用
'?'
代替
,
之后向里面绑定
NSString
*insertString =
@"insert into person(name,gender,age)values(?,?,?)"
;
//
伴随指针
sqlite3_stmt
*stmt =
nil
;
//
预执行
SQL
语句
//
参数
1:
数据库
//
参数
2: SQL
语句
//
参数
3:
字节数
;
如果为负
,
表示取值取到碰到结束符号
('\000','u000').
//
参数
4:
伴随指针
.
会伴随着数据库的操作
,
获取之或者绑定值
//
参数
5:
取值的时候如果取得不全
,
怎么余下的存入这里
int
result =
sqlite3_prepare
(
db
, insertString.
UTF8String
, -1, &stmt,
NULL
);
//
如果预执行成功的话
,
那么就要往里面放数据了
if
(result ==
SQLITE_OK
) {
//
向预执行的
SQL
语句里面插入参数
(
取代
'?'
的位置
)
//
参数
1:
伴随指针
//
参数
2:
确定替代
'?'
的位置
,
从
1
开始
//
参数
3:
插入数据
//
参数
4:
取得字节数
//
参数
5:
回调函数
sqlite3_bind_text
(stmt, 1, name.
UTF8String
, -1,
NULL
);
//
sqlite3_bind_text
(stmt, 2, gender.
UTF8String
, -1,
NULL
);
// int
用
int64
方法
sqlite3_bind_int64
(stmt, 3, age);
//SQL
语句已写全
//
执行伴随指针
,
如果为
SQLITE_DONE
代表执行陈宫
,
并且成功的插入数据
.
if
(
sqlite3_step
(stmt) ==
SQLITE_DONE
) {
NSLog
(
@"
插入成功
"
);
}
else
{
NSLog
(
@"
插入失败
%d"
,result);
}
}
//
最后
,
一定要记得释放掉伴随指针
sqlite3_finalize
(stmt);
}
3.修改一条数据
//
改
-( void )updateWithUID:( NSInteger )uid{
NSString
*updateString =
@"update person set name = '
王军
' where uid = ?"
;
//
伴随指针
sqlite3_stmt
*stmt =
nil
;
int
result =
sqlite3_prepare
(
db
, updateString.
UTF8String
, -1, &stmt,
NULL
);
if
(result ==
SQLITE_OK
) {
sqlite3_bind_int64
(stmt, 1, uid);
if
(
sqlite3_step
(stmt) ==
SQLITE_DONE
) {
NSLog
(
@"
修改成功
"
);
}
}
sqlite3_finalize
(stmt);
-( void )updateWithUID:( NSInteger )uid{
}
4.删除一条数据
//
删
-( void )deleteWithUID:( NSInteger )uid{
NSString
*deleteString = [
NSString
stringWithFormat
:
@"delete from person where uid = %ld"
,uid];
int
result =
sqlite3_exec
(
db
, deleteString.
UTF8String
,
NULL
,
NULL
,
NULL
);
if
(result ==
SQLITE_OK
) {
NSLog
(
@"
删除成功
"
);
}
else
{
NSLog
(
@"
删除失败
"
);
}
}
-( void )deleteWithUID:( NSInteger )uid{
}
5.查询所有数据
//
查
-( void )searchAll{
NSString
*searchString =
@"Select *from person"
;
//
伴随指针
sqlite3_stmt
*stmt =
nil
;
int
result =
sqlite3_prepare
(
db
, searchString.
UTF8String
, -1, &stmt,
NULL
);
if
(result ==
SQLITE_OK
) {
//
当不知道循环次数
,
用
while
//
当
sqlite3_step(stmt) ==SQLITE_ROW
的时候
,
代表还有下一条数据
while
(
sqlite3_step
(stmt) ==
SQLITE_ROW
) {
//
参数
2 :
参数位置
从零开始的
int
uid =
sqlite3_column_int
(stmt, 0);
NSLog
(
@"%d"
,uid);
NSString
*name = [
NSString
stringWithUTF8String
:(
const
char
*)
sqlite3_column_text
(stmt, 1)];
NSString
*gender =[
NSString
stringWithUTF8String
:(
const
char
*)
sqlite3_column_text
(stmt, 2)];
NSInteger
age =
sqlite3_column_int
(stmt, 3);
NSLog
(
@"%@"
,name);
NSLog
(
@"%@"
,gender);
NSLog
(
@"%ld"
,age);
}
}
-( void )searchAll{
}
- 控制器
#import
"ViewController.h"
#import "DataBaseHandle.h"
@interface
ViewController
()
@end
@implementation
ViewController
- (
void
)viewDidLoad {
[
super
viewDidLoad
];
DataBaseHandle
*dataBase = [
DataBaseHandle
sharedDataBaseHandle
];
[dataBase
openDB
];
[dataBase
createTable
];
[dataBase
insertName
:
@"
骚军
"
gender
:
@"
男
"
age
:38];
[dataBase
updateWithUID
:1];
}
@end