1.創建表
CREATE 創建
TABLE 表
SQL約束 用于限制加入表的數據的類型,在創建表時規定約束,主要有以下幾種約束:
PRIMARY KEY主鍵 每個表中都應有且只能有一個主鍵 主鍵列不能為NULL值
AUTOINCREMENT自動增長
NOT NULL 非空 約束強制列不接受空值 空值無法插入新紀錄或更新紀錄
UNIQUE 唯一的 約束唯一標識數據庫表中的某個字段
語法:
CREATE TABLE 表名 (字段名1 字段類型,字段名2 字段類型,……)
CREATE TABLE Teacher1 (teacher_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, teacher_name TEXT,teacher_sex BOOLEAN)
CREATE TABLE Teacher2 (teacher_id INTEGER PRIMARY KEY AUTOINCREMENT, teacher_name TEXT,teacher_sex BOOLEAN)
2.插入數據
INSERT 插入 用于表中數據的增加
語法1:字段和值對應
INSERT INTO 表名 (字段1,字段2,字段3,字段4)VALUES (值1,值2,值3,值4)
INSERT INTO Students (name,sex) VALUES ('zhangsan',0)
語法2: 下方形式必須值跟字段一一對應 一個都不能少
INSERT INTO 表名 VALUES (值1,值2,值3,值4,值5)
INSERT INTO Students VALUES('張三','男', 23,175,70)
當值為文本時 需要加單引號;當值為整型不需要加引號
3.查詢數據
SELECT 查詢
- 全部 (表示查詢表中所有數據)
FROM
語法:
SELECT 字段名 FROM 表名
SELECT 字段名,字段名,字段名,…… FROM 表名
SELECT * FROM 表名
SELECT * FROM Students
語法:
在SELECT查詢語句后+WHERE 字段名 運算符 值
WHERE語句用于有條件地從表中選取數據,也可將WHERE子句添加到SELECT語句
SELECT * FROM Students WHERE number<10
SELECT * FROM Students WHERE number<10 OR sex=1
SELECT * FROM Students WHERE number<10 AND number>5
SELECT * FROM Students WHERE age BETWEEN 10 AND 100
提供運算符有=,!=,>,<,>=,<=,BETWEEN(在某個范圍內 前閉后閉)
AND和OR運算符 用于基于一個或多個條件對數據進行過濾
如果兩個條件都成立 AND運算符返回一條數據
只要一個條件成立 OR運算符就返回一條數據
like 匹配
SELECT * FROM Students WHERE name like 'zhang%'
SELECT * FROM Students WHERE name like 'zhang_'
LIKE(搜索某種模式 %可以代表任意一串字符 代表一個任意字符)
%通配 多個字符,通配一個字符
count() 查詢表中數據的條數。
SELECT count() FROM student
數據庫提供內置函數:MAX(最大值), MIN(最小值), AVG(平均值)SUM(總值)
語法:
SELECT MAX(字段名) FROM 表名
max(列名) min(列名) 查詢這一列的最大,最小值.
SELECT max(student_age) FROM student
嵌套:
SELECT * FROM student WHERE student_age = (SELECT max(student_age) FROM student)
ORDER BY語句用于對結果集進行排序
根據指定列對結果集進行排序 默認按照升序對記錄進行排序,降序DESC,升序ASC
desending 降序
asending 升序
語法:
SELECT 字段名 FROM 表名稱 ORDER BY 字段名 條件(DESC或ASC)
SELECT 字段名,字段名 FROM 表名稱 ORDER BY 字段名 條件,字段名 條件(DESC或ASC)
SELECT * FROM Students ORDER BY name DESC, age DESC
SELECT * FROM student ORDER BY student_age ASC
LIMIT 限制
從第六條開始 往后的15條
SELECT * FROM Students LIMIT 5,15
4.修改數據
UPDATE 更新語句用來修改表中的數據
set 設置
語法:
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE 表名稱 SET 列名稱 = 新值,列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE Students SET age = 20 WHERE name = '李雷'
UPDATE Students SET age = 20,height = 190.5 WHERE name = '李雷'
UPDATE Students set name='lisi',sex=1 where number < 10 AND number>5
5.刪除數據
DELETE 刪除用于刪除表中的行
語法:
DELETE FROM 表名稱 WHERE 列名稱 = 值
DELETE FROM Students WHERE name = '小芳'
DELETE FROM Students WHERE number > 25
SQLite3的使用
/*
使用數據庫的準備工作
1.導入libsqlite3.dylib靜態庫
2.導入sqlite3.h頭文件 #import <sqlite3.h>
使用數據庫注意事項
1.使用數據庫時,要保證數據庫文件存在
2.使用數據庫前,要保證數據庫是打開狀態
3.使用數據庫后,要關閉數據庫
*/
#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()
{
sqlite3 *_db;
}
@property (retain, nonatomic) IBOutlet UITextField *nameText;
@property (retain, nonatomic) IBOutlet UITextField *ageTextField;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@",NSHomeDirectory());
}
- (void)dealloc {
[_nameText release];
[_ageTextField release];
[super dealloc];
}
#pragma mark -- 創建數據庫文件并打開數據庫
-(BOOL)openDatabase
{
//數據庫文件路徑
NSString *filePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/student.sqlite"];
//UTF8String把oc的字符串轉化成c的字符串
const char *filename = [filePath UTF8String];
// sqlite3_open 打開數據庫的方法; 如果有數據庫文件就直接打開,如果沒有數據庫文件系統會自動創建一個數據庫文件,并打開
//參數1.數據庫文件的路徑 2.數據庫對象,要打開的數據庫
//返回值表示操作的狀態碼
int result = sqlite3_open(filename, &_db);
if (result == SQLITE_OK)
{
NSLog(@"數據庫打開成功");
return YES;
}
else
{
NSLog(@"數據庫打開失敗");
//sqlite3_close 關閉數據庫的方法
sqlite3_close(_db);
return NO;
}
}
#pragma mark --創建表
- (IBAction)createTable:(id)sender
{
//1.打開數據庫
if (![self openDatabase])
{
return;
}
//2.創建表
NSString *str = @"CREATE TABLE IF NOT EXISTS student (student_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT , age INTEGER)";
char *error = nil;
//sqlite3_exec對數據庫的操作:創建表,增刪改,都是用這個方法
//參數 1.數據庫對象 2.sql語句 3.回調函數nil 4.回調函數的參數nil
if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
{
NSLog(@"創建表成功");
}
else
{
NSLog(@"創建表失敗:%s",error);
}
//3.關閉數據庫
sqlite3_close(_db);
}
#pragma mark -- 添加數據
- (IBAction)insertInto:(id)sender
{
//1.打開數據庫2.執行增刪改查的操作3.關閉數據庫
if (![self openDatabase])
{
return;
}
NSString *str = [NSString stringWithFormat:@"insert into student (name , age) values ('%@',%d)",_nameText.text,_ageTextField.text.intValue];
char *error = nil;
if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
{
NSLog(@"插入數據成功");
}
else
{
NSLog(@"插入數據失敗:%s",error);
}
sqlite3_close(_db);
}
#pragma mark -- 刪除數據
- (IBAction)delete:(id)sender
{
if (![self openDatabase])
{
return;
}
NSString *str =@"delete from student where student_id = 6";
char *error = nil;
if (sqlite3_exec(_db, [str UTF8String], nil, nil, &error)==SQLITE_OK)
{
NSLog(@"刪除成功");
}
else
{
NSLog(@"刪除失敗:%s",error);
}
sqlite3_close(_db);
}
#pragma mark -- 修改數據
- (IBAction)upData:(id)sender
{
if (![self openDatabase])
{
return;
}
NSString *str = [NSString stringWithFormat:@"update student set name = '%@' where student_id =%d",@"馬云",2];
if (sqlite3_exec(_db, [str UTF8String], nil, nil, nil)==SQLITE_OK)
{
NSLog(@"修改數據成功");
}
else
{
NSLog(@"修改數據失敗");
}
sqlite3_close(_db);
}
#pragma mark --查詢數據
- (IBAction)select:(id)sender
{
//先打開數據庫,查詢,關閉數據庫
if (![self openDatabase])
{
return;
}
NSString *str = @"select * from student";
//緩存區
sqlite3_stmt *stmt = nil;
//sqlite3_prepare 把sql語句放入緩存區
//參數1.數據庫對象2.sql語句 3.sql語句的長度,-1全部的sql語句 4.緩存區 5.剩余部分的sql語句
if (sqlite3_prepare(_db, [str UTF8String], -1, &stmt, nil)==SQLITE_OK)
{
//sqlite3_step 單步查詢數據,一次只查詢一條數據
//SQLITE_ROW表示數據庫中還有數據繼續下一個查詢
//SQLITE_DONE 表示數據查詢完畢
while (sqlite3_step(stmt) == SQLITE_ROW)
{
//sqlite3_column_text 查詢字符串的方法
//參數1.緩存區 2.字段所在的列號
char *cname = (char *)sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
//stringWithUTF8String 把c的字符串轉化成oc的字符串
NSString *name = [NSString stringWithUTF8String:cname];
NSLog(@"%@---%d",name,age);
}
//查詢結束,釋放緩存區
sqlite3_finalize(stmt);
}
sqlite3_close(_db);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
@end