SQLite3 基本使用方法(一)

1、SQLite3簡介
    SQLite3是一款開源的嵌入式關係類型數據庫, 可移植性好、易使用、內存開銷小。
    SQLite3是無類型的,意味着能夠保持任何類型的數據到任意表任意字段。
    SQLite3經常使用的5中數據類型: text/integer/float/boolean/blob。
    
sql

2、添加庫
    在IOS中要使用SQLite3,須要添加庫文件:  libsqlite3.bylib並導入主頭文件,這是一個C語言的庫。
 
數據庫

3、 使用步驟:
    1. 建立數據庫(sqlite3_opendb)
    2. 單步執行操做 (sqlite3_exec)
        - 建立數據庫表
        - 數據操做
            · 插入數據
            · 更新數據
            · 刪除數據
    3. 查詢操做
        - sqlite3_prepare_v2 檢查sql合法性
        - sqlite3_step 逐行獲取查詢結果
        - sqlite3_coloum_xxx 獲取對應類型的內容
        - sqlite3_finalize 釋放stmt
函數

 

 

4、Demospa

 

.hcode

 
#import <UIKit/UIKit.h>
#import <sqlite3.h> @interface MSViewController : UIViewController { //Sqlite3數據庫的連接,基於該連接能夠進行數據庫操做 sqlite3 * m_pDb; } @end
 

 

 

.morm

 
#import "MSViewController.h" #import <sqlite3.h> @interface MSViewController () @end @implementation MSViewController - (void)viewDidLoad { [super viewDidLoad]; //1. 建立數據庫  [self openDB]; //2. 建立數據庫表  [self createTable]; //3. 數據操做 //添加 //[self addUserWithName:@"YY" pass:@"yy135"]; //查詢 /* NSMutableArray * arr = [self selectAllUser]; for (int i=0; i<arr.count; i++) { NSLog(arr[i]); }*/ //修改 //[self updateUserId:2 name:@"wangxin" pass:@"wangxin000"]; //刪 [self deleteUserId:2]; } ///Users/username/Library/Application Support/iPhone Simulator/ "沙盒路徑" //打開數據庫,如不存在,則建立。 - (void) openDB { //生成存放在沙盒中的數據庫完整路徑 NSString * strDocDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString * strDbName = [strDocDir stringByAppendingPathComponent: @"mySqlite3DB.db"]; //sqlite3 數據庫的連接,基於該連接能夠進行數據庫操做 if (SQLITE_OK == sqlite3_open(strDbName.UTF8String, &m_pDb)) { NSLog(@"建立/打開數據庫成功!"); } else { NSLog(@"建立/打開數據庫失敗!"); } } //建立數據庫表 //使用DBMANAGE建立,把生成的代碼賦值過來就OK了。 //表名:tbl_User //IF NOT EXISTS //IOS 把id設爲自增,在添加數據的時候,也要用null站位,不能不寫。 - (void) createTable { NSString * strSql = @"CREATE TABLE IF NOT EXISTS tbl_User (Id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,UserName text,UserPass text)"; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"建立數據表成功!"); } else { NSLog(@"建立數據表失敗!"); } } //增 - (void)addUserWithName:(NSString *)strName pass:(NSString *)strPass { NSString * strSql = [NSString stringWithFormat: @"INSERT INTO tbl_User VALUES (null, '%@', '%@')", strName, strPass]; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"添加成功!"); } else { NSLog(@"添加失敗!"); } } //查 - (NSMutableArray *) selectAllUser { NSString * strSql = @"SELECT * FROM tbl_User"; NSMutableArray * arrReturn = [NSMutableArray array]; //1. 評估準備SQL語法是否正確 sqlite3_stmt * pStmt = NULL; if (SQLITE_OK == sqlite3_prepare_v2(m_pDb, strSql.UTF8String, -1, &pStmt, NULL)) { NSLog(@"sql語法正確!"); //2. 若是能正常查詢,調用單步執行方法, 依次取得查詢結果 //若是獲得一行記錄 while (SQLITE_ROW == sqlite3_step(pStmt)) { //3.獲取/顯示查詢結果 int nId = sqlite3_column_int(pStmt, 0); const unsigned char * pUserName = sqlite3_column_text(pStmt, 1); NSString * pUserNameUTF8 = [NSString stringWithUTF8String:(const char *)pUserName]; const unsigned char * pUserPass = sqlite3_column_text(pStmt, 2); NSString * pUserPassUTF8 = [NSString stringWithUTF8String:(const char *)pUserPass]; NSString * strTemp = [NSString stringWithFormat:@"%d -- %@ -- %@",nId,pUserNameUTF8, pUserPassUTF8]; [arrReturn addObject:strTemp]; } } else { NSLog(@"sql語法錯誤!"); } //4. 釋放句柄  sqlite3_finalize(pStmt); return arrReturn; } 
//改 - (void) updateUserId:(int)nId name:(NSString *)strUserName pass:(NSString *)strUserPass { NSString * strSql = [NSString stringWithFormat: @"UPDATE tbl_User SET UserName= '%@', UserPass='%@' WHERE Id= %d", strUserName, strUserPass, nId]; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"添加成功!"); } else { NSLog(@"添加失敗!"); } } //刪 - (void) deleteUserId:(int)nId { NSString * strSql = [NSString stringWithFormat: @"delete from tbl_User where Id = %d", nId]; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"添加成功!"); } else { NSLog(@"添加失敗!"); } }
); } } //刪 - (void) deleteUserId:(int)nId { NSString * strSql = [NSString stringWithFormat: @"delete from tbl_User where Id = %d", nId]; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"添加成功!"); } else { NSLog(@"添加失敗!"); } } @end
 

 

 

 

總結:sqlite

  1. 和MSSQL基本差很少。SQL也是基本相同的。blog

    就是在建立表ID自增時,當插入時,要用NULL站位,和MSSQL有區別。內存

  2. 增、刪、改 可代碼重構。執行都是一個函數。string

  3. 疑問:怎麼實時管理真機上的DB文件?

相關文章
相關標籤/搜索