Salve a tutti,
come spero già saprete, giovedì avrò il piacere di tenere un technical forum incentrato sulle tecnologie Apple: cocoa e cocoa touch.
Sarebbe un’occasione splendida per incontrare gli amici e colleghi amanti della piattaforma (e non solo loro ovviamente!!).
Una modalità molto comoda su iPhone/iPod Touch per gestire una piccola base dati locale è quella d’usare SQLite, un piccolo ma potente db relazionale supportato nativamente dal cellulare di Cupertino.
Il primo passo è quello di creare un progetto di applicazione per iPhone OS, che per semplicità può essere una Window-based-Application. Successivamente sarà necessario aggiungere la libreria dinamica di SQLite: Target->Nome applicazione->tasto destro del mouse->Get Info e scegliere dal pannello successivo il tab general. A questo punto cliccando sull’icona “+” è possibile scegliere dalla lista la libreria desiderata, ovvero:
libsqlite3.0.dylib
ecco di seguito i passi successivi:
- Creare a riga di comando o con uno dei vari tool grafici un DB SQLite ed aggiungerlo al progetto
- “Copiare” programmaticamente il DB locale nella cartella “Documents” dell’iPhone:
NSArray * searchPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString * documentFolderPath = [searchPath objectAtIndex:0];
NSString * dbFilePath = [documentFolderPath
stringByAppendingPathComponent:@"data.db"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dbFilePath]) {
NSString * backupDbPath = [[NSBundle mainBundle]
pathForResource:@"data" ofType:@"db"];
if (backupDbPath == nil)
NSLog(@"Impossibile trovare il database originale!");
else {
BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:
backupDbPath toPath:dbFilePath error:nil];
if (!copiedBackupDb)
NSLog(@"Impossibile copiare il database originale!");
}
}
- Ora finalmente possiamo scrivere il codice per accedere ai dati contenuti nelle tabelle:
sqlite3 * db;
int dbrc;
const char * dbFilePathUTF8 = [dbFilePath UTF8String];
dbrc = sqlite3_open(dbFilePathUTF8, &db);
if (dbrc)
NSLog(@"Non posso aprire il database!");
else {
sqlite3_stmt * dbps;
NSString * queryNS = [NSString stringWithString:@"SELECT * FROM mia_tabella"];
const char * query = [queryNS UTF8String];
if (sqlite3_prepare_v2(db, query, -1, &dbps, NULL) == SQLITE_OK) {
while (sqlite3_step(dbps) == SQLITE_ROW)
NSLog(@"%d %s", sqlite3_column_int(dbps, 0), sqlite3_column_text(dbps, 1));
}
}
Ovviamente in ogni file sorgente in cui è necessario accedere alle API di SQLite è necessario importare l’header:
#include <sqlite3.h>
Il passo successivo potrebbe essere quello di usare il CoreData al posto di un accesso diretto al database, ma questa è un’altra storia
Salve a tutti,
da oggi abbiamo una nuova sezione dedicata al mondo Apple e volevo quindi per prima cosa ringraziare per l’interesse mostrato Stefano e Mirko!
Nei giorni scorsi ho pensato che forse per un’azienda come la nostra potrebbe essere interessante buttare l’occhio anche sulle piattaforme di Cupertino, visti i recenti successi specialmente di iPhone/iPod Touch e l’attenzione per il mondo mobile in generele. Magari potremmo “contarci” e verificare se esiste tra di noi un pubblico interessato a partecipare a qualche evento dedicato allo sviluppo con Objective C e Cocoa/CocoaTouch.
Un saluto a tutti
Gennaro E. Tangari