<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                @SQLite是一種小型的輕量級的關系型數據庫,在移動設備上使用是非常好的選擇,無論是Android還是IOS,都內置了SQLite數據庫,現在的版本都是SQLite3。在IOS中使用SQLite如果使用SDK提供的方法,特別麻煩也不利于理解和使用,感覺使用很不方便,今天就講講一個針對IOS的SQlite API封裝的第三方庫FMDB,FMDB對SDK中的API做了一層封裝,使之使用OC來訪問,使用方便而且更熟悉。FMDB的下載地址[https://github.com/ccgus/fmdb](https://github.com/ccgus/fmdb)。 @FMDB主要涉及兩個類,FMDatabase和FMResultSet?下載完FMDB源碼后把文件拖到工程中,并導入SQLite支持 ? ? ? ?庫,libsqlite3.0.dylib ~~~ #import "HMTDataBaseHandle.h" #import "FMDB.h" #import "HMTPerson.h" @implementation HMTDataBaseHandle static HMTDataBaseHandle * _dbHandle = nil; + (HMTDataBaseHandle *)shareInstance{ @synchronized(self){ if (!_dbHandle) { _dbHandle = [[HMTDataBaseHandle alloc]init]; [_dbHandle openDataBase]; [_dbHandle createTable]; } } return _dbHandle; } #pragma mark - 定義一個 FMDatabase 對象 static FMDatabase * database = nil; #pragma mark - 獲得沙盒文件下Documents路徑 - (NSString *)getDocumentsPath{ NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; return documents; } #pragma mark - 打開數據庫操作------ databaseWithPath open - (void)openDataBase{ if (database) { return; } NSString * DataBasePath = [[self getDocumentsPath] stringByAppendingPathComponent:@"test.sqlite"]; database = [FMDatabase databaseWithPath:DataBasePath]; if (![database open]) { NSLog(@"打開數據庫失敗"); } // 為數據庫設置緩存,提高查詢效率 database.shouldCacheStatements = YES; NSLog(@"打開數據庫成功"); } #pragma mark - 關閉數據庫操作 - (void)closeDataBase{ if (![database close]) { NSLog(@"關閉數據庫失敗"); return; } database = nil; NSLog(@"關閉數據庫成功"); } #pragma mark - 管理創建表的操作 - (void)createTable{ [self openDataBase]; // 判斷表是否存在,不存在就創建------ tableExists if (![database tableExists:@"Person"]) { [database executeUpdate:@"CREATE TABLE Person(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"]; NSLog(@"創建表成功"); } [self closeDataBase]; } #pragma mark - 增加數據操作----- executeUpdate - (void)insertIntoDataBase:(HMTPerson *)person{ [self openDataBase]; [database executeUpdate:@" INSERT INTO Person (id,name,age) VALUES (?,?,?)",[NSString stringWithFormat:@"%i",person.personId],person.personName,[NSString stringWithFormat:@"%i",person.personAge]]; [self closeDataBase]; } #pragma mark - 刪除數據操作----- executeUpdate - (void)deleteDataFromDataBase:(HMTPerson *)person{ [self openDataBase]; [database executeUpdate:@" DELETE FROM Person WHERE id = ?",[NSString stringWithFormat:@"%i",person.personId]]; [self closeDataBase]; } #pragma mark - 更新數據操作----- executeUpdate - (void)updateFromDataBase:(HMTPerson *)person{ [self openDataBase]; [database executeUpdate:@" UPDATE Person SET name = ? WHERE id = ?",person.personName,[NSString stringWithFormat:@"%i",person.personId]]; [self closeDataBase]; } #pragma mark - 查詢數據操作(與其他的都不一樣,查詢是調用executeQuery,切記切記!!!!!!) - (void)selectAllDataFromDataBase{ [self openDataBase]; FMResultSet * resultSet = [database executeQuery:@" SELECT * FROM Person"]; while ([resultSet next]) { int Id = [resultSet intForColumn:@"id"]; NSString * name = [resultSet stringForColumn:@"name"]; int age = [resultSet intForColumn:@"age"]; NSLog(@"personId:%i,personName:%@,personAge:%i",Id,name,age); } [self closeDataBase]; } @end ~~~ @FMDB提供如下多個方法來獲取不同類型的數據: 1.intForColumn: 2.longForColumn: 3.longLongIntForColumn: 4.boolForColumn: 5.doubleForColumn: 6.stringForColumn: 7.dateForColumn: 8.dataForColumn: 9.dataNoCopyForColumn: 10.UTF8StringForColumnIndex: 11.objectForColumn: @如果我們的app需要多線程操作數據庫,那么就需要使用FMDatabaseQueue來保證線程安全了。切記不能在多個線程中共同一個FMDatabase對象并且在多個線程中同時使用,這個類本身不是線程安全的,這樣使用會造成數據混亂等問題。 ?? ??使用FMDatabaseQueue很簡單,首先用一個數據庫文件地址來初使化FMDatabaseQueue,然后就可以將一個閉包(block)傳入inDatabase方法中。在閉包中操作數據庫,而不直接參與FMDatabase的管理。 ~~~ -(void)executeDBOperation { //獲取Document文件夾下的數據庫文件,沒有則創建 NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *dbPath = [docPath stringByAppendingPathComponent:@"user.db"]; FMDatabaseQueue *databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath]; [databaseQueue inDatabase:^(FMDatabase *db){ [db executeUpdate:@"insert into user values (?,?,?)",@"Ren",@"Male",[NSNumber numberWithInt:20]]; }]; [databaseQueue close]; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看