使用數據庫的步驟ios使用的數據庫是sqlite3ios
UIKit框架並不支持sqlite3,須要導入一個支持sqlite的庫sql
1.建立一個數據庫文件,若是已經有了只須要打開數據庫文件數據庫
2.建立一張表網絡
3.對錶的數據進行增刪改查app
#import "ViewController.h"框架
#import <sqlite3.h>dom
@interface ViewController (){函數
//聲明一個數據庫變量.net
sqlite3 *_db;指針
}
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1.建立數據庫
[self createDB];
//2.建立表
[self createTable];
//3.插入數據
[self insertData];
//4.刪除數據
[self deleteData];
//5.更新數據
[self updateData];
//6.查找數據
[self selectData];
}
#pragma mark - 建立/打開數據庫
- (void) createDB{
//1.建立數據庫的路徑(實際開發過程當中是沙盒目錄下的一個路徑);
const char * path = "/Users/fanjuan/Desktop/my files/網絡/day6-數據庫/數據庫文件/user.sqlite";
//2.打開一個數據庫文件(若是數據庫不存在就建立一個新的);
//參數1:數據庫文件的路徑
//參數2:指向數據庫的指針的地址,表明當前打開或者建立的數據庫
//返回值:打開或者建立是否成功
int ret = sqlite3_open(path, &_db);
//3.判斷數據庫打開建立是否成功
//SQLITE_OK專門用來判斷數據庫操做成功的宏
if (ret == SQLITE_OK) {
NSLog(@"數據庫打開/建立成功");
}else{
NSLog(@"數據庫打開/建立失敗");
}
}
#pragma mark - 建立表
- (void)createTable{
//1.建立一個建立表的sql語句
const char *sql = "CREATE TABLE IF NOT EXISTS t_user(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL DEFAULT 22,score real DEFAULT 0); ";
//sqlite3_exec 專門用來執行DDL,DML語句的方法
//DQL語句不可使用這個函數;
//參數1:數據庫(必須是已經打開的數據庫);
//參數2:須要執行的sql語句
//參數5:錯誤信息
//返回值:是否成功執行sql語句
//2.執行建立表的sql語句;
int ret = sqlite3_exec(_db, sql, NULL, NULL, NULL);
//3.判斷表是否建立成功
if (ret == SQLITE_OK)
{
NSLog(@"建立成功");
}else{
NSLog(@"建立表失敗");
}
}
#pragma mark - 插入數據
- (void) insertData{
//1.建立插入數據的sql語句
const char *sql = "INSERT INTO t_user (name,age,score) VALUES ('fanjuan',22,99);";
//一次插入多條數據
NSMutableString *mstr = [NSMutableString string];
for (int i=0; i<20; i++) {
NSString *str = [NSString stringWithFormat:@"INSERT INTO t_user (name,age,score) VALUES ('fanjuan%d',%d,%f);",i,arc4random() % 10 + 10,(float)(arc4random()%101)];
[mstr appendString:str];
}
const char *sql2 = [mstr UTF8String];
//2.執行插入數據的sql語句
int ret = sqlite3_exec(_db, sql2, NULL, NULL, NULL);
//3.判斷是否成功
if (ret == SQLITE_OK) {
NSLog(@"插入數據成功");
}else{
NSLog(@"插入數據失敗");
}
}
#pragma mark - 刪除數據
- (void) deleteData{
//1.建立sql語句
const char *sql = "DELETE FROM t_user WHERE name ='fanjuan';";
//2.執行sql語句
int ret = sqlite3_exec(_db, sql, NULL, NULL, NULL);
//3.判斷是否成功
if (ret == SQLITE_OK) {
NSLog(@"刪除數據成功");
}else{
NSLog(@"刪除數據失敗");
}
}
#pragma mark - 更新數據
- (void)updateData{
//1.建立sql語句
const char *sql = "UPDATE t_user SET score = 99 WHERE score < 80;";
//2.執行sql語句
int ret = sqlite3_exec(_db, sql, NULL, NULL, NULL);
//3.判斷是否成功
if (ret == SQLITE_OK) {
NSLog(@"更新數據成功");
}else{
NSLog(@"更新數據失敗");
}
}
#pragma mark 查詢數據
- (void)selectData{
//1.建立sql語句
const char *sql = "SELECT * FROM t_user;";
//2.執行語句
//參數1:數據庫
//參數2:數據查詢的sql語句
//參數3:sql語句的長度(傳入-1自動計算)
//參數4:結果集(專門用來存放結果的容器)
//參數5:null
// 建立存放結果集指針
sqlite3_stmt *stmt;
int ret= sqlite3_prepare_v2(_db
, sql, -1, &stmt, NULL);
//3.判斷查詢是否成功;
if (ret == SQLITE_OK) {
NSLog(@"查詢成功");
//將數據從結果 集中拿出來
//遍歷結果集中的數據
while (sqlite3_step(stmt) == SQLITE_ROW) {
//拿到查詢結果的數據
//參數1:結果集指針
//參數2:列標號(從0開始)
const unsigned char *name = sqlite3_column_text(stmt,1);
int age = sqlite3_column_int(stmt,2);
double score = sqlite3_column_double(stmt, 3);
NSLog(@"%s-%d-%.2lf",name,age,score);
}
}else{
NSLog(@"查詢失敗");
}
}
@end