數(shù)據(jù)存儲-SQLite geekband

參考 完整SQLite 網(wǎng)址:http://www.sqlite.org/lang.html

我喜歡用實例說要點

新建文件
1:添加開發(fā)包libsqlite3.0.dylib
首先是設(shè)置項目文件,在項目中添加iPhone版的sqlite3的數(shù)據(jù)庫的開發(fā)包,在項目下的Frameworks點擊右鍵,然后選擇libsqlite3.dylib文件。

Snip20160428_38.png

2進(jìn)入代碼部分
重點 .新人一定要記住
在對應(yīng)文件里面添加頭文件

' #import <sqlite3.h>'

#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()
@property     sqlite3 *db;
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

//1,要學(xué)會生成文件并進(jìn)入數(shù)據(jù)庫
//2,要學(xué)會生成數(shù)據(jù)庫列表
//3,要學(xué)會插入數(shù)據(jù)
//4,要學(xué)會查數(shù)據(jù)
//    sqlite3          *db, 數(shù)據(jù)庫句柄,跟文件句柄FILE很類似
//    sqlite3_stmt      *stmt, 這個相當(dāng)于ODBC的Command對象,用于保存編譯好的SQL語句
//    sqlite3_open(),   打開數(shù)據(jù)庫,沒有數(shù)據(jù)庫時創(chuàng)建。
//    sqlite3_exec(),   執(zhí)行非查詢的sql語句
//    Sqlite3_step(), 在調(diào)用sqlite3_prepare后,使用這個函數(shù)在記錄集中移動。
//    Sqlite3_close(), 關(guān)閉數(shù)據(jù)庫文件
//    還有一系列的函數(shù),用于從記錄集字段中獲取數(shù)據(jù),如
//    sqlite3_column_text(), 取text類型的數(shù)據(jù)。
//    sqlite3_column_blob(),取blob類型的數(shù)據(jù)
//    sqlite3_column_int(), 取int類型的數(shù)據(jù)


/*
 1......
 db是數(shù)據(jù)庫的句柄,就是數(shù)據(jù)庫的象征,要求對數(shù)據(jù)庫進(jìn)行增刪改查,就要用這個實例
 */

//文件目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *doucumentDirectory = [paths objectAtIndex:0];
//創(chuàng)建文件
//A stringByAppendingPathComponent B ....在a目錄下生成B
//A stringByAppendingString B  ...在同級A 目錄下生成文件名為 AB 的文件
NSString *path = [doucumentDirectory stringByAppendingPathComponent:@"student.sqlite"];
NSFileManager *fileManager =[NSFileManager defaultManager];
[fileManager fileExistsAtPath:path];
//
const char *dbpath = [path UTF8String];
    if (sqlite3_open(dbpath,&_db)==SQLITE_OK) {
        NSLog(@"成功打開數(shù)據(jù)庫");
        /*
         2......
         生成數(shù)據(jù)列表
         */
        //PRIMARY KEY AUTOINCREMENT z
 //            id  你自己起的字段名字。
 //            int  數(shù)據(jù)類型,整型。
 //            primary key 定義這個字段為主鍵。
 //            auto_increment 定義這個字段為自動增長,即如果INSERT時不賦值,則自動加1
        const char *sql = "create table if not exists iOS_students (student_id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL )";
        char *errmsg = NULL;
        
 //            sqlite3_exec(//              參數(shù):
 //                        sqlite3*,                                  /* An open database */ 第一個是數(shù)據(jù)庫的句柄,
 //                        const char *sql,                           /* SQL to be evaluated */  第二個是sql語句,
 //                        int (*callback)(void*,int,char**,char**),  /* Callback function */第三個sql的長度(如果設(shè)置為-1,則代表系統(tǒng)會自動計算sql語句的長度),
 //                        void *,                                    /* 1st argument to callback */ 第四個參數(shù)用來取數(shù)據(jù),
 //                        char **errmsg                              /* Error msg written here */第五個參數(shù)為尾部一般用不上可直接寫NULL。
 //                         );

        
        int result = sqlite3_exec(_db, sql, NULL,NULL, &errmsg);
        if(result == SQLITE_OK){
              NSLog(@"create ok.");
        }else{
            NSLog(@"創(chuàng)表失敗----%s",errmsg);
        }

    }else{
        NSLog(@"打開數(shù)據(jù)庫失敗");
    }

 [self setValueForDB];
 [self toFinlTheDB];
 }
//這里寫個方法,  到時候你們可以用button來控制
-(void)setValueForDB{
//排序人名 ,隨機(jī)歲數(shù)                                             );
for (int i = 0; i<15; i++) {
    NSString *name = [NSString stringWithFormat:@"拾壹---%d",i];
    int age = arc4random_uniform(15)+10;
    NSString *sql = [NSString stringWithFormat:@"insert into iOS_students (name,age)VALUES ('%@',%d);",name,age];
    char *errmsg = NULL;
    sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
    NSLog(@"%@",sql);;
    NSLog(@"%s",sql.UTF8String);;
    if (errmsg) {
        NSLog(@"%s----數(shù)據(jù)有誤",errmsg);
    }
    NSLog(@"成功錄入");
}

}
-(void)toFinlTheDB{

 NSString *selectSql = @"SELECT * from iOS_students where age <18 ;";

//    sqlite3_stmt是一個已經(jīng)把sql語句解析了的、用sqlite自己標(biāo)記記錄的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。其實我也是不怎么懂 哈哈哈.
 sqlite3_stmt *stmt = NULL;
//    sqlite3_prepare_v2(
//                        sqlite3 *db,            /* Database handle */數(shù)據(jù)庫的句柄
//                        const char *zSql,       /* SQL statement, UTF-8 encoded */sql語句格式為UTF-8
//                        int nByte,              /* Maximum length of zSql in bytes. */sql的長度
//                        sqlite3_stmt **ppStmt,  /* OUT: Statement handle */取數(shù)據(jù)
//                        const char **pzTail     /* OUT: Pointer to unused portion of zSql */尾部一般用不上可直接寫NULL
if (sqlite3_prepare_v2(self.db,selectSql.UTF8String , -1, &stmt, NULL)==SQLITE_OK) {//SQL語句沒有問題
    NSLog(@"搜索語句沒有問題");
    
    while (sqlite3_step(stmt)==SQLITE_ROW) {
        //收取數(shù)據(jù)
        
        //獲取學(xué)號.在setm 的第幾列 值
        int ID =sqlite3_column_int(stmt,0);
        //獲取名字.在setm 的第幾列 值
        char *name = (char *)sqlite3_column_text(stmt,1);
        //utf-8 轉(zhuǎn)回類型
        NSString *nameStr = [[NSString alloc] initWithUTF8String:name];
        //獲取年齡.在setm 的第幾列 值
        int age = sqlite3_column_int(stmt,2);
        
        NSLog(@"名字:%@ 學(xué)號:%d 年齡:%d",nameStr,ID,age);
       
    }
}else
{
     NSLog(@"搜索語句有問題");
}
 [self setdelete];
}
-(void)setdelete{
sqlite3_stmt *stmt = nil;
NSString *sqlStr = [NSString stringWithFormat:@"delete from iOS_students where student_id = 4" ];
int result = sqlite3_prepare_v2(_db,[sqlStr UTF8String], -1, &stmt, NULL);
if (result == SQLITE_OK) {
    if (sqlite3_step(stmt) == SQLITE_ROW) {//覺的應(yīng)加一個判斷, 若有這一行則刪除
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            sqlite3_finalize(stmt);
        }
    }
}
sqlite3_finalize(stmt);
}


@end

下載軟件查看,數(shù)據(jù)庫.. 我這里是用AppStore的萬歷


Snip20160428_41.png

再看看是否刪除 4編號

Snip20160428_43.png

源文件 https://github.com/a000khf/helloSQLite

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容