1. main.m文件
#import <Foundation/Foundation.h>
#import "SQLManger.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
SQLManger* sql = [SQLManger shareSqlManger];
[sql createTable];
//查
[sql selectMessage];
//增
// [sql IncreaseMessage];
//刪
// [sql DeleteMessage];
//改
[sql changeMessage];
}
return 0;
}
2. SQLManger.h 文件
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface SQLManger : NSObject
{
sqlite3* db;//聲明數據庫對象
}
//類方法單例創建實例對象的方法
+(SQLManger*)shareSqlManger;
//創建數據表
-(void)createTable;
//查詢數據表數據
-(void)selectMessage;
//增加數據表數據
-(void)IncreaseMessage;
//刪除數據表數據
-(void)DeleteMessage;
//改變數據表數據
-(void)changeMessage;
@end
3. SQLManger.m 文件
#import "SQLManger.h"
//聲明一個全局的靜態變量,來記錄SQLManger對象是否被創建(定義一個靜態區指針 連接數據庫 讓數據庫再程序結束後自動釋放)
static SQLManger* sqlManger = nil;
@implementation SQLManger
//類方法單例創建實例對象的方法
+(SQLManger*)shareSqlManger
{
if (sqlManger == nil) {
sqlManger = [[SQLManger alloc]init];
}
return sqlManger;
}
//創建數據表
-(void)createTable
{
// //獲取文件的相對路徑
// NSString* path = [[NSBundle mainBundle]pathForResource:@"nibaba" ofType:@"sqkute"];
// //讀取plist文件的內容
// NSArray* arr = [NSArray arrayWithContentsOfFile:path];
// NSLog(@"arr == %@", arr);
// //獲取家目錄
// NSString* homePath = NSHomeDirectory();
// NSLog(@"家目錄:%@",homePath);
// //獲取Documents路經
// NSArray* pathArr1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString* docuPath = [pathArr1 objectAtIndex:0];
// NSLog(@"Documents路徑:%@",docuPath);
// NSString* path = [docuPath stringByAppendingPathComponent:docuPath];
// NSLog(@"path == %@", path);
// //這個只限於IOS應用在mac應用中就不適應
// //獲取數據庫路徑
// NSString* path = @"/Users/user/Downloads/數據庫";
// //文件管理器
// NSFileManager* fileManager = [NSFileManager defaultManager];
// //判斷數據庫是否存在
// BOOL fild = [fileManager fileExistsAtPath:path];
//
// ////如果數據庫存在,則用sqlite3_open直接打開(不要擔心,如果數據庫不存在sqlite3_open會自動創建)
// if (fild) {
// NSLog(@"文件庫存在。。。。");
// }else{
// NSLog(@"文件庫不存在。。。");
// }
//獲取數據庫路徑
NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
//打開數據庫
//第一個參數是數據庫的路徑,c的字符串類型
//第二個參數是數據庫的對象
//SQLITE_OK 是宏定義代表語句操作成功
if (sqlite3_open([path UTF8String], &db) == SQLITE_OK) {
//NSString* createTable = @"CREATE TABLE IF NOT EXISTS STUDENT (sid text primary key,name text)";
NSString* createTable=@"CREATE TABLE IF NOT EXISTS STUDENG (SID TEXT PRIMARY KEY,NAME TEXT);";
//執行創建表的aql語句
//第一個參數是數據庫的對象
//第二個參數是sql語句,c的字符串類型
//第三個參數是回調方法
//第四個參數是回調方法的參數
//第五個參數是錯誤信
char* error;
//sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
if (sqlite3_exec(db, [createTable UTF8String], nil, nil, &error) == SQLITE_OK) {
NSAssert(YES, @"數據表格創建成功%s", error);
NSLog(@"數據表格創建成功");
}else{
NSAssert(NO, @"數據表格創建失敗%s", error);
NSLog(@"數據表格創建失敗");
}
//關閉數據庫
sqlite3_close(db);
}
}
//查詢數據表數據
-(void)selectMessage
{
//獲取數據庫路徑
NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
//打開數據庫
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
//? 是佔位符
NSString* selectSql = @"select *from areaCode where id=?";
//創建語句對象
sqlite3_stmt* stmt;
//執行sql語句的預處理
//第一個參數是數據庫對象
//第二個參數是執行的sql語句
//第三個參數是語句的執行長度,-1代表全部執行
//第四個參數是語句對象
//第五個參數是沒有執行的部分,一般會全部執行,一般填nil
sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &stmt, NULL);
//綁定參數,並實現查找
//第一個參數是語句對象
//第二個參數是語句編號,從1開始
//第三個參數是所要綁定參數的值
sqlite3_bind_int(stmt, 1, 10);
//獲取查詢出來的值
if (sqlite3_step(stmt) == SQLITE_ROW) {
//獲取一行數據有多少列
NSLog(@" ====== %d", sqlite3_column_count(stmt));
char* s = (char*)sqlite3_column_text(stmt, 1);
NSLog(@" ------ %@",[NSString stringWithFormat:@"%s", s]);
//獲取ID的值
NSLog(@"------%d",sqlite3_column_int(stmt, 0));
sqlite3_finalize(stmt);//釋放語句
}else{
sqlite3_finalize(stmt);//釋放語句
sqlite3_close(db);
}
}else{
sqlite3_close(db);
}
}
//增加數據表數據
-(void)IncreaseMessage
{
//獲取數據庫路徑
NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
//打開數據庫
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
NSString *increase = @"insert into areaCode(id,location,countryCodeID) values (1,'鎮魂街',02)";
char* error;
//sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
if (sqlite3_exec(db, [increase UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"增加數據表數據成功");
}else{
NSLog(@"增加數據表數據失敗 == %s", error);
}
}
}
//刪除數據表數據
-(void)DeleteMessage
{
//獲取數據庫路徑
NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
//打開數據庫
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
//刪除id爲1的一行數據,如果要刪兩行就 id = 1 or id = 10 ,刪除id爲1和10行的數據
NSString *Delete = @"delete from areaCode where id = 1";
char* error;
//sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
if (sqlite3_exec(db, [Delete UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"刪除數據表數據成功");
}else{
NSLog(@"刪除數據表數據失敗 == %s", error);
}
}
}
//改變數據表數據
-(void)changeMessage
{
//獲取數據庫路徑
NSString* path = @"/Users/user/Downloads/數據庫/nibaba.sqlite";
//打開數據庫
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
NSString *change = @"update areaCode set location = '鎮魂街' WHERE id = 1";
char* error;
//sqlite3_exec 打開數據庫時,如果存在數據庫就打開,如果不存在就會創建並打開
if (sqlite3_exec(db, [change UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"改變數據表數據成功");
}else{
NSLog(@"改變數據表數據失敗 == %s", error);
}
}
}
@end