FMDB ile SQLite Tümleştirmesi
Doğrudan veri işleme için popüler FMDB sarmalayıcısını kullanarak SQLite veritabanlarını Objective-C uygulamalarınıza entegre edin.
FMDB ile SQLite Tümleştirmesi, CoddyKit'te ücretsiz bir Objective-C iOS Development for Legacy & Enterprise Apps dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Objective-C iOS Development for Legacy & Enterprise Apps öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Objective-C iOS Development for Legacy & Enterprise Apps kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
SQLite & FMDB: An Introduction
Welcome! In this lesson, we'll explore integrating SQLite, a popular lightweight database, directly into your Objective-C applications. SQLite is embedded directly within your app, perfect for local data storage.
To make working with SQLite easier in Objective-C, we'll use FMDB, a powerful and user-friendly wrapper. It simplifies common database tasks.
Why Choose FMDB?
While you can use SQLite's C API directly, FMDB offers several advantages:
- Object-Oriented: It provides Objective-C classes for database, result sets, and statements.
- Simplified API: Easier to write and read than raw C code.
- Parameter Binding: Safely handles arguments, preventing SQL injection.
- Thread Safety: Includes
FMDatabaseQueuefor safe multi-threaded access.
Setting Up FMDB
To use FMDB in your project, the easiest way is via CocoaPods. Add pod 'FMDB' to your Podfile and run pod install. After installation, remember to #import "FMDB.h" in your Objective-C files.
Alternatively, you can manually drag the FMDB source files into your project.
Opening Your Database
First, you need to create or open a database file. FMDB's FMDatabase class makes this straightforward. If the file doesn't exist, it will be created.
Try running this example to open a 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;
}Creating a Table
Once the database is open, you can execute SQL commands like CREATE TABLE using executeUpdate:. This method is used for any SQL that doesn't return a result set (e.g., INSERT, UPDATE, DELETE).
Run this code to create a 'users' table:
#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;
}Inserting Data
To add data to your table, use executeUpdate: again. FMDB is great at handling parameters, preventing SQL injection. Use ? as placeholders for your values.
See how we insert two 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; }
[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;
}Querying Data
To retrieve data, use executeQuery:. This returns an FMResultSet object, which you can iterate through to get your results. Each row's columns can be accessed by name or index.
Let's fetch the users we just added:
#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;
}Updating and Deleting Data
Modifying or removing records also uses executeUpdate:. Just provide the appropriate SQL UPDATE or DELETE statements, again using ? for parameters.
This example updates 'Charlie's age and then deletes '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;
}Using Transactions for Reliability
For sequences of database operations that must all succeed or all fail, use transactions. FMDB provides beginTransaction, commit, and rollback methods to ensure data integrity.
If any operation within the transaction fails, you can roll back to the state before the transaction began.
#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;
}Check Your Understanding
Which of the following statements about using FMDB for SQLite in Objective-C are true?
Recap: SQLite & FMDB
Great job! You've learned how to integrate SQLite databases into your Objective-C apps using the FMDB wrapper.
- SQLite is a lightweight, embedded database.
- FMDB simplifies SQLite operations with an Objective-C API.
- You can open databases, create tables, and perform CRUD (Create, Read, Update, Delete) operations.
- Always use parameterized queries for safety and consider transactions for reliability.
This knowledge is crucial for managing local data storage in your legacy Objective-C applications!
Sıkça Sorulan Sorular
“FMDB ile SQLite Tümleştirmesi” dersi ücretsiz mi?
Evet — “FMDB ile SQLite Tümleştirmesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Objective-C iOS Development for Legacy & Enterprise Apps kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Objective-C iOS Development for Legacy & Enterprise Apps kursu toplamda 4 dersten oluşur.
“FMDB ile SQLite Tümleştirmesi” dersinde ne öğreneceğim?
Doğrudan veri işleme için popüler FMDB sarmalayıcısını kullanarak SQLite veritabanlarını Objective-C uygulamalarınıza entegre edin. Objective-C iOS Development for Legacy & Enterprise Apps ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Objective-C iOS Development for Legacy & Enterprise Apps öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Objective-C iOS Development for Legacy & Enterprise Apps, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“FMDB ile SQLite Tümleştirmesi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Objective-C iOS Development for Legacy & Enterprise Apps dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Objective-C iOS Development for Legacy & Enterprise Apps dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Özellik Listeleri ve Arşivleme
- Core Data Temelleri
- FMDB ile SQLite Tümleştirmesi
- NSUserDefaults ile Tercihleri Saklama