免費開源的iOS開發學習平臺

                                                SQLite入門:3-數據記錄的操作

                                                在數據庫中,對于數據記錄的操作主要包括4類操作,即:增刪改查。本節中,我們分別介紹基于SQLite數據庫的增刪改查操作的實現方式。

                                                添加數據

                                                在上一章節中,我們創建了聯系人表,現在來添加一條聯系人信息。添加數據需要使用使用INSERT語句。INSERT語句用于向數據庫的某個表中添加新的數據行。INSERT語句語法如下:

                                                INSERT INTO TABLE_NAME (column1, column2,...columnN)]  
                                                VALUES (value1, value2,...valueN);
                                                

                                                INSERT語句中,column1, column2,...columnN 是要插入數據的表中的列名。
                                                如果要為表中的所有列添加值,也可以不需要在 SQLite 查詢中指定列名稱。但要確保值的順序與列在表中的順序一致。格式如下:

                                                INSERT INTO TABLE_NAME VALUES (value1,value2,...valueN);
                                                

                                                在下方的代碼中,我們添加了insertContact:address:phone方法用來插入新的聯系人。需要注意的是,INSERT語句中插入的字段是TEXT類型,因此在拼接的時候需要加上單引號'。

                                                - (BOOL)insertContact:(NSString *)name address:(NSString *)address phone:(NSString *)phone {
                                                    if (NULL == _db) { //1
                                                        NSLog(@"數據庫不存在,添加聯系人失敗");
                                                        return NO;
                                                    }
                                                    char *errMsg = NULL;
                                                    // 拼接SQL語句
                                                    NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO CONTACTS (name, address, phone) VALUES ('%@', '%@', '%@');", name, address, phone]; //2
                                                    const char *sql = [sqlString UTF8String];
                                                    
                                                    if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
                                                        NSLog( @"添加聯系人失敗");
                                                        return NO;
                                                    }
                                                    NSLog( @"添加聯系人成功");
                                                    return YES;
                                                }
                                                

                                                查詢數據

                                                添加完聯系人,我們可以使用通過SELECT語句來查詢聯系人信息。
                                                SELECT語句用于從 SQLite 數據庫的表中獲取數據,并以結果表的形式返回數據,這些結果表也被稱為結果集。SELECT語句的基本語法如下:

                                                SELECT column1, column2, columnN FROM table_name;
                                                

                                                在SELECT語句中,column1, column2...是需要獲取的表中的字段。如果需要獲取所有可用的字段,那么可以使用下面的語法:

                                                SELECT * FROM table_name;
                                                

                                                在下方的代碼中,我們創建了一個printAllContact方法來查詢出聯系人表中所有的聯系人數據。

                                                - (void)printAllContact {
                                                    if (NULL == _db) { //1
                                                        NSLog(@"數據庫不存在:printAllContact");
                                                        return;
                                                    }
                                                    // 拼接SQL語句
                                                    const char *sql = "SELECT * FROM CONTACTS"; //2
                                                    sqlite3_stmt *stmt = NULL;
                                                    if (sqlite3_prepare_v2(_db, sql, -1, &stmt, nil) == SQLITE_OK) { //3
                                                        while (sqlite3_step(stmt)==SQLITE_ROW) { //4
                                                            char *name = (char *)sqlite3_column_text(stmt, 1); //5
                                                            NSString *nameString = [[NSString alloc] initWithUTF8String:name];
                                                            
                                                            char *address = (char *)sqlite3_column_text(stmt, 2);
                                                            NSString *addressString = [[NSString alloc] initWithUTF8String:address];
                                                            
                                                            char *phone = (char *)sqlite3_column_text(stmt, 3);
                                                            NSString *phoneString = [[NSString alloc] initWithUTF8String:phone];
                                                            
                                                            NSLog(@"name: %@, address: %@, phone: %@", nameString, addressString, phoneString);
                                                        }  
                                                        
                                                        sqlite3_finalize(stmt); //6
                                                    }
                                                }
                                                

                                                在上述查詢代碼操作中需要注意以下幾點。

                                                • sqlite3_prepare_v2是執行語句前編譯語句, 如果返回SQLITE_OK表示查詢成功。
                                                • sqlite3_step為執行查詢語句,如果返回SQLITE_ROW則表示查詢到記錄。
                                                • sqlite3_column_text用于獲取查詢到記錄的值。這里需要根據實際的類型使用不同的方法來獲取。
                                                • sqlite3_finalize語句需要和sqlite3_prepare_v2成對出現,否則會造成內存泄漏。

                                                刪除數據

                                                DELETE語句用于刪除表中已有的記錄。另外,DELETE語句可以添加 WHERE 條件,來刪除所有滿足查詢條件的記錄,同時可以使用 AND 或 OR 運算符來編寫組合條件。如果DELETE語句不添加WHERE條件,表中所有的記錄都會被刪除。帶有 WHERE條件的DELETE語句的基本語法如下:

                                                DELETE FROM table_name
                                                WHERE [condition];
                                                

                                                在下方的代碼中,我們編寫deleteAllContactWithName:方法來刪除指定名稱的聯系人。

                                                - (BOOL)deleteAllContactWithName:(NSString *)name {
                                                    if (NULL == _db) { //1
                                                        NSLog(@"數據庫不存在,刪除聯系人失敗");
                                                        return NO;
                                                    }
                                                    char *errMsg = NULL;
                                                    // 拼接SQL語句
                                                    NSString *sqlString = [NSString stringWithFormat:@"DELETE FROM CONTACTS WHERE name='%@'", name]; //2
                                                    const char *sql = [sqlString UTF8String];
                                                    
                                                    if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
                                                        NSLog( @"刪除聯系人失敗");
                                                        return NO;
                                                    }
                                                    NSLog( @"刪除聯系人成功");
                                                    return YES;
                                                }
                                                

                                                修改數據

                                                UPDATE語句用于修改表中已有的記錄??梢允褂脦в?WHERE 條件的 UPDATE 語句來更新選定行,否則所有的行都會被更新。帶有 WHERE 條件的 UPDATE 語句的基本語法如下:

                                                UPDATE table_name
                                                SET column1 = value1, column2 = value2...., columnN = valueN
                                                WHERE [condition];
                                                

                                                在下方的代碼中,我們編寫updatePhone:forContactWithName:方法來更新指定用戶的手機號。

                                                - (BOOL)updatePhone:(NSString *)phone forContactWithName:(NSString *)name {
                                                    if (NULL == _db) { //1
                                                        NSLog(@"數據庫不存在,更新聯系人失敗");
                                                        return NO;
                                                    }
                                                    char *errMsg = NULL;
                                                    // 拼接SQL語句
                                                    NSString *sqlString = [NSString stringWithFormat:@"UPDATE CONTACTS SET phone = '%@' WHERE name='%@'", phone, name]; //2
                                                    const char *sql = [sqlString UTF8String];
                                                    
                                                    if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
                                                        NSLog( @"更新聯系人失敗");
                                                        return NO;
                                                    }
                                                    NSLog( @"更新聯系人成功");
                                                    return YES;
                                                    
                                                }
                                                

                                                示例代碼

                                                https://github.com/99ios/13.5.3


                                                欧美超级精品一级A片|欧美一级黄色视频|国产精品自在在线午夜免费|4444亚洲人成无码网在线观看|亚洲ⅴa曰本va欧美va视频