SQLite-integration med FMDB
Integrér SQLite-databaser i Deres Objective-C-apps med den populære FMDB-wrapper til direkte datamanipulation.
SQLite-integration med FMDB er en gratis Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.
SQLite og FMDB: En introduktion
Velkommen! I denne lektion undersøger vi, hvordan du integrerer SQLite, en populær letvægtsdatabase, direkte i dine Objective-C-programmer. SQLite er indlejret direkte i din app og er perfekt til lokal datalagring.
For at gøre det nemmere at arbejde med SQLite i Objective-C bruger vi FMDB, en effektiv og brugervenlig wrapper. Den forenkler almindelige databaseopgaver.
Hvorfor vælge FMDB?
Selvom du kan bruge SQLite's C-API direkte, har FMDB flere fordele:
- Objektorienteret: Det indeholder Objective-C-klasser til databaser, resultatsæt og instruktioner.
- Forenklet API: Det er nemmere at skrive og læse end rå C-kode.
- Parameterbinding: Håndterer argumenter sikkert og forhindrer SQL-injektion.
- Trådsikkerhed: Indeholder
FMDatabaseQueuetil sikker adgang fra flere tråde.
Konfigurere FMDB
Den nemmeste måde at bruge FMDB i dit projekt på er via CocoaPods. Tilføj pod 'FMDB' til din Podfile, og kør pod install. Efter installationen skal du huske at skrive #import "FMDB.h" i dine Objective-C-filer.
Du kan også manuelt trække FMDB-kildefilerne ind i dit projekt.
Åbne din database
Først skal du oprette eller åbne en databasefil. FMDB's FMDatabase-klasse gør dette enkelt. Hvis filen ikke findes, bliver den oprettet.
Prøv at køre dette eksempel for at åbne en database:
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Get the path to the app's Documents directory
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
// Create an FMDatabase object
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) {
NSLog(@"Error: Could not open database.");
// Always check for errors!
return 1;
}
NSLog(@"Database opened successfully at: %@", dbPath);
// Close the database when done
[db close];
NSLog(@"Database closed.");
}
return 0;
}Oprette en tabel
Når databasen er åben, kan du udføre SQL-kommandoer som CREATE TABLE ved hjælp af executeUpdate:. Denne metode bruges til al SQL, der ikke returnerer et resultatsæt (f.eks. INSERT, UPDATE og DELETE).
Kør denne kode for at oprette tabellen »users«:
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) { NSLog(@"Error opening db."); return 1; }
NSString *sql = @"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
BOOL success = [db executeUpdate:sql];
if (success) {
NSLog(@"Table 'users' created or already exists.");
} else {
NSLog(@"Error creating table: %@", [db lastErrorMessage]);
}
[db close];
}
return 0;
}Indsætte data
Hvis du vil føje data til din tabel, skal du bruge executeUpdate: igen. FMDB er god til at håndtere parametre og forhindrer SQL-injektion. Brug ? som pladsholdere for dine værdier.
Se, hvordan vi indsætter to brugere:
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) { NSLog(@"Error opening db."); return 1; }
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"];
BOOL success1 = [db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Alice", @25];
BOOL success2 = [db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Bob", @30];
if (success1 && success2) {
NSLog(@"Users inserted successfully!");
} else {
NSLog(@"Error inserting users: %@", [db lastErrorMessage]);
}
[db close];
}
return 0;
}Forespørge data
Hvis du vil hente data, skal du bruge executeQuery:. Den returnerer et FMResultSet-objekt, som du kan gennemløbe for at hente resultaterne. Kolonnerne i hver række kan tilgås efter navn eller indeks.
Lad os hente de brugere, vi netop har tilføjet:
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) { NSLog(@"Error opening db."); return 1; }
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"];
[db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Charlie", @28];
FMResultSet *rs = [db executeQuery:@"SELECT id, name, age FROM users"];
while ([rs next]) {
int userId = [rs intForColumn:@"id"];
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSLog(@"User ID: %d, Name: %@, Age: %d", userId, name, age);
}
[rs close]; // Always close the result set
[db close];
}
return 0;
}Opdatere og slette data
Ændring eller fjernelse af poster bruger også executeUpdate:. Angiv blot de relevante SQL-udtryk UPDATE eller DELETE, og brug igen ? til parametre.
Dette eksempel opdaterer »Charlies« alder og sletter derefter »Bob«:
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) { NSLog(@"Error opening db."); return 1; }
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"];
[db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Charlie", @28];
[db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Bob", @30];
// Update Charlie's age
BOOL updateSuccess = [db executeUpdate:@"UPDATE users SET age = ? WHERE name = ?", @29, @"Charlie"];
if (updateSuccess) { NSLog(@"Charlie's age updated."); }
// Delete Bob
BOOL deleteSuccess = [db executeUpdate:@"DELETE FROM users WHERE name = ?", @"Bob"];
if (deleteSuccess) { NSLog(@"Bob deleted."); }
[db close];
}
return 0;
}Bruge transaktioner for pålidelighed
Til sekvenser af databasehandlinger, der enten skal lykkes alle sammen eller mislykkes alle sammen, skal du bruge transaktioner. FMDB indeholder metoderne beginTransaction, commit og rollback for at sikre dataintegriteten.
Hvis en handling i transaktionen mislykkes, kan du rulle tilbage til den tilstand, der var, før transaktionen blev startet.
#import <Foundation/Foundation.h>
#import "FMDB.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"myApp.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) { NSLog(@"Error opening db."); return 1; }
[db executeUpdate:@"CREATE TABLE IF NOT EXISTS products (id INTEGER PRIMARY KEY, name TEXT, price REAL)"];
[db beginTransaction];
BOOL success = YES;
if (![db executeUpdate:@"INSERT INTO products (name, price) VALUES (?, ?)", @"Apple", @1.0]) {
success = NO;
}
// Simulate a failure by trying to insert a bad value (e.g., duplicate PK if not autoinc)
// For this example, let's just make the second insert conditional
if (success && ![db executeUpdate:@"INSERT INTO products (name, price) VALUES (?, ?)", @"Orange", @1.5]) {
success = NO;
}
if (success) {
[db commit];
NSLog(@"Transaction committed: products inserted.");
} else {
[db rollback];
NSLog(@"Transaction rolled back due to error: %@", [db lastErrorMessage]);
}
[db close];
}
return 0;
}Test din forståelse
Hvilke af følgende udsagn om brug af FMDB til SQLite i Objective-C er sande?
Opsamling: SQLite og FMDB
Godt gået! Du har lært, hvordan du integrerer SQLite-databaser i dine Objective-C-apps ved hjælp af FMDB-wrapperen.
- SQLite er en letvægts, indlejret database.
- FMDB forenkler SQLite-handlinger med en Objective-C-API.
- Du kan åbne databaser, oprette tabeller og udføre CRUD-handlinger (Create, Read, Update, Delete).
- Brug altid parameteriserede forespørgsler af hensyn til sikkerheden, og overvej transaktioner for at opnå pålidelighed.
Denne viden er afgørende for håndtering af lokal datalagring i dine ældre Objective-C-applikationer!
Lær Objective-C med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “SQLite-integration med FMDB” gratis?
Ja — hele teksten til “SQLite-integration med FMDB” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset, skal du opgradere til CoddyKit PRO. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “SQLite-integration med FMDB”?
Integrér SQLite-databaser i Deres Objective-C-apps med den populære FMDB-wrapper til direkte datamanipulation. Du øver dig i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer?
Der kræves ingen tidligere erfaring. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “SQLite-integration med FMDB”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion?
Ja. Alle Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Property lists og arkivering
- Grundlæggende om Core Data
- SQLite-integration med FMDB
- Lagring af indstillinger med NSUserDefaults