FMDB-Datenspeicher-Tool-Klasse in OC

Zuerst codieren

#import "FMDBManager.h"
#import <FMDB/FMDB.h>

@implementation FMDBManager {
    FMDatabase *_db;
}

+ (instancetype)sharedManager {
    static FMDBManager *manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[FMDBManager alloc] init];
        [manager setupDatabase];
    });
    return manager;
}

- (void)setupDatabase {
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *databasePath = [documentsPath stringByAppendingPathComponent:@"mydatabase.sqlite"];
    _db = [FMDatabase databaseWithPath:databasePath];
    if ([_db open]) {
        NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        if (![_db executeUpdate:createTableSql]) {
            NSLog(@"创建表失败:%@", [_db lastErrorMessage]);
        }
    } else {
        NSLog(@"打开数据库失败:%@", [_db lastErrorMessage]);
    }
}

- (void)insertDataWithDictionary:(NSDictionary *)dictionary {
    NSString *name = dictionary[@"name"];
    NSNumber *age = dictionary[@"age"];
    NSString *insertSql = @"INSERT INTO mytable (name, age) VALUES (?, ?)";
    if (![_db executeUpdate:insertSql, name, age]) {
        NSLog(@"插入数据失败:%@", [_db lastErrorMessage]);
    }
}

- (NSArray *)getAllData {
    NSMutableArray *result = [NSMutableArray array];
    NSString *querySql = @"SELECT * FROM mytable";
    FMResultSet *resultSet = [_db executeQuery:querySql];
    while ([resultSet next]) {
        NSInteger id = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet stringForColumn:@"name"];
        NSInteger age = [resultSet intForColumn:@"age"];
        NSDictionary *dictionary = @{@"id": @(id), @"name": name, @"age": @(age)};
        [result addObject:dictionary];
    }
    return result;
}

- (void)deleteDataWithId:(NSInteger)id {
    NSString *deleteSql = @"DELETE FROM mytable WHERE id = ?";
    if (![_db executeUpdate:deleteSql, @(id)]) {
        NSLog(@"删除数据失败:%@", [_db lastErrorMessage]);
    }
}

- (void)updateDataWithDictionary:(NSDictionary *)dictionary {
    NSInteger id = [dictionary[@"id"] integerValue];
    NSString *name = dictionary[@"name"];
    NSNumber *age = dictionary[@"age"];
    NSString *updateSql = @"UPDATE mytable SET name = ?, age = ? WHERE id = ?";
    if (![_db executeUpdate:updateSql, name, age, @(id)]) {
        NSLog(@"更新数据失败:%@", [_db lastErrorMessage]);
    }
}

@end

Diese Toolklasse heißt FMDBManager und verwendet den Singleton-Modus. Rufen Sie in der Singleton-Initialisierungsmethode setupDatabase zunächst das Verzeichnis „Dokumente“ in der Anwendungssandbox ab, erstellen Sie dann eine SQLite-Datenbankdatei mit dem Namen „mydatabase.sqlite“ in diesem Verzeichnis und verwenden Sie die FMDatabase-Klasse, um ein Datenbankobjekt mit dem Namen „_db“ zu erstellen.

Erstellen Sie dann eine Tabelle mit dem Namen mytable, indem Sie die SQL-Anweisung ausführen. Verwenden Sie in insertDataWithDictionaryder Methode executeUpdate:arguments:die Methode, um die SQL-Anweisung auszuführen, die die Daten einfügt. Verwenden Sie in getAllDatader Methode executeQuery:die Methode, um die SQL-Anweisung auszuführen, um die Daten abzufragen und ein FMResultSetObjekt abzurufen. Verwenden Sie dann whileeine Schleife, um die Abfrageergebnisse zu durchlaufen, konvertieren Sie jede Datenzeile in ein Wörterbuchobjekt und fügen Sie es einem veränderlichen Array hinzu. Abschließend wird das Array zurückgegeben.

Verwenden Sie in deleteDataWithIdder Methode executeUpdate:arguments:die Methode, um die SQL-Anweisung auszuführen, die die Daten löscht. Verwenden Sie in updateDataWithDictionaryder Methode executeUpdate:arguments:die Methode, um die SQL-Anweisung auszuführen, die die Daten aktualisiert.

Anweisungen

// 插入数据
NSDictionary *dictionary = @{@"name": @"Tom", @"age": @18};
[[FMDBManager sharedManager] insertDataWithDictionary:dictionary];

// 查询所有数据
NSArray *result = [[FMDBManager sharedManager] getAllData];
NSLog(@"查询结果:%@", result);

// 删除数据
NSInteger idToDelete = 1;
[[FMDBManager sharedManager] deleteDataWithId:idToDelete];

// 更新数据
NSDictionary *dictionaryToUpdate = @{@"id": @2, @"name": @"Jerry", @"age": @20};
[[FMDBManager sharedManager] updateDataWithDictionary:dictionaryToUpdate];

In diesem Beispiel wird zunächst ein Datenelement eingefügt, dann werden alle Daten abgefragt und die Ergebnisse ausgegeben. Dann wird ein Datenteil gelöscht und schließlich wird ein Datenteil aktualisiert. Es ist zu beachten, dass die SQL-Anweisungen in den Beispielen relativ einfach sind. In der tatsächlichen Entwicklung sind möglicherweise komplexere SQL-Anweisungen erforderlich, um eine flexiblere Datenspeicherung und -abfrage zu erreichen.

Store-Modell

.h

@interface Person : NSObject

@property (nonatomic, assign) NSInteger id;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;

@end

.m

@implementation Person

@end

Wenn Sie ein Person-Objekt speichern, können Sie es zunächst in ein NSDictionary konvertieren:

- (void)insertPerson:(Person *)person {
    NSString *sql = @"INSERT INTO person (name, age) VALUES (?, ?)";
    NSDictionary *arguments = @{@"name": person.name, @"age": @(person.age)};
    BOOL success = [self.db executeUpdate:sql withParameterDictionary:arguments];
    if (!success) {
        NSLog(@"插入数据失败");
    }
}

Beim Abfragen von Personenobjekten können Sie die Abfrageergebnisse zunächst in NSDictionary oder NSArray und dann in Personenobjekte konvertieren:

- (NSArray<Person *> *)getAllPersons {
    NSString *sql = @"SELECT * FROM person";
    FMResultSet *result = [self.db executeQuery:sql];
    NSMutableArray *persons = [NSMutableArray array];
    while ([result next]) {
        NSInteger personId = [result intForColumn:@"id"];
        NSString *name = [result stringForColumn:@"name"];
        NSInteger age = [result intForColumn:@"age"];
        Person *person = [[Person alloc] init];
        person.id = personId;
        person.name = name;
        person.age = age;
        [persons addObject:person];
    }
    return persons;
}

Es ist zu beachten, dass bei der Modellkonvertierung darauf geachtet werden muss, dass die Attributnamen im Modell mit den Spaltennamen in der Datenbank übereinstimmen, da sonst Fehler auftreten können. Wenn die Attribute im Modell außerdem relativ komplex sind und beispielsweise verschachtelte Strukturen wie Arrays und Wörterbücher enthalten, kann die Konvertierung komplex sein und eine entsprechende Verarbeitung erfordern.

Acho que você gosta

Origin blog.csdn.net/chuzhaohzi/article/details/130005023
Recomendado
Clasificación