Damit Sie diese Lektion abschließen können, muss SQL Anywhere auf Ihrem Computer installiert sein. Wenn Sie Fehler oder Warnungen während dieser Lektion erhalten, vergewissern Sie sich, dass Sie Ihre Installation richtig konfiguriert haben und die richtigen Umgebungsvariablen eingestellt sind.
Jetzt kann die Names-Anwendung Namen in die UltraLite-Datenbank einfügen und daraus löschen. Sie werden jetzt die Synchronisation mit einer konsolidierten Datenbank auf Ihrem Computer hinzufügen.
Öffnen Sie Sybase Central.
Klicken Sie im Menü Extras auf SQL Anywhere 12 » Datenbank erstellen.
Klicken Sie auf Weiter im Fenster Willkommen und Einen Speicherort auswählen.
Wählen Sie einen Speicherort für die Datenbankdatei und benennen Sie sie Names.db. Klicken Sie auf Fertig stellen.
Für den Rest der Optionen können Sie die Standardwerte belassen.
Nachdem die Datenbank erstellt wurde, schließen Sie das Einblendfenster.
Für die Synchronisation müssen Sie zunächst eine Tabelle in der konsolidierten Datenbank erstellen:
Wenn die Auswahl im linken Fensterausschnitt Aufgaben oder Suche lautet, ändern Sie sie auf Ordner, indem Sie im Menü Ansicht auf Ordner klicken.
Klicken Sie im Teilfenster Ordner unter der Datenbank Names bei gedrückter Control-Taste auf das Element Tabellen und klicken Sie auf Neu » Tabelle.
Benennen Sie die Tabelle Names und klicken Sie auf Fertig stellen.
Damit wird die Tabelle erstellt und der Cursor bereitgemacht, um die Primärschlüsselspalte der Tabelle zu benennen.
Benennen Sie den Primärschlüssel der Tabelle id und wählen Sie dafür den Datentyp uniqueidentifier.
Klicken Sie auf das Schaltflächensymbol [...] unter Wert und legen Sie den Standardwert mit Benutzerdefinierter Wert: NEWID() fest.
Achten Sie darauf, dass die Option Literalzeichenfolge nicht aktiviert ist, und klicken Sie auf OK.
Fügen Sie mit einem Klick auf das Neue Spalte-Symbol in der Symbolleiste eine weitere Spalte hinzu.
Benennen Sie die neue Spalte name mit Datentyp VARCHAR und Größe 254.
Deaktivieren Sie die Option Null für die name-Spalte.
Klicken Sie auf die Option Eindeutig für die name-Spalte.
Klicken Sie auf das Symbol für Speichern in der Symbolleiste.
Trennen Sie die Verbindung mit der Datenbank.
Damit Sie MobiLink einrichten können, muss das System eine ODBC-Datenquelle für die konsolidierte Datenbank haben. Bevor Sie die ODBC-Datenquelle einrichten können, muss der SQL Anywhere ODBC-Treiber installiert werden:
Öffnen Sie die Terminal-Anwendung.
Führen Sie den folgenden Befehl aus, um die SQL Anywhere-Konfigurationsdatei zu sourcen:
source ./sa_config.sh |
Durch Beziehen der Konfigurationsdatei können Sie das Dienstprogramm dbdsn verwenden.
Führen Sie den folgenden Befehl aus, um die ODBC-Datenquelle zu erstellen:
dbdsn -w "Names" -c "UID=dba;PWD=sql;DBF=/Users/user/Names.db" |
Wenn der Speicherort der Datenbank nicht derselbe ist, aktualisieren Sie die DBF-Option.
Damit MobiLink eine Synchronisation durchführen kann, müssen Sie die Synchronisationsskripten konfigurieren. Um die Konfiguration zu erleichtern, stellt Sybase Central Skriptvorlagen für viele allgemeine Synchronisationsszenarios bereit.
Starten Sie Sybase Central.
Klicken Sie im Menü Extras auf MobiLink 12 » Neues Projekt.
Benennen Sie das Projekt mit NamesProject und klicken Sie auf Weiter.
Aktivieren Sie die Option Dem Projekt eine konsolidierte Datenbank hinzufügen. Geben Sie unter Anzeigename der Datenbank den Namen NamesCondb an. Geben Sie UID=dba;PWD=sql;DSN=Names
als Verbindungszeichenfolge an. Sie können diese Zeichenfolge auch erstellen, indem Sie auf Bearbeiten klicken. Klicken Sie auf Weiter.
Klicken Sie auf Neues Modell erstellen und anschließend auf Weiter.
Klicken Sie auf Dem Projekt einen Namen für ein entferntes Schema hinzufügen, geben Sie einen Namen ein und klicken Sie bei ausgewählter Option UltraLite-Schema auf Fertig stellen.
Sie werden gefragt, ob Sie die MobiLink-Systemeinrichtung installieren möchten. Das entfernte Schema wird nicht wirklich verwendet, aber da sich das entfernte Schema auf dem iPhone befindet, ist diese Option die einfachste.
In einer Meldung wird bekanntgegeben, dass MobiLink noch nicht installiert wurde, und gefragt, ob es jetzt installiert werden sollte. Klicken Sie auf Ja.
Damit werden die von MobiLink benötigten Tabellen in der Datenbank sowie einige gespeicherte Prozeduren erstellt.
Geben Sie NamesModel als Modellnamen ein und klicken Sie auf Weiter.
Aktivieren Sie alle drei Kontrollkästchen, um die Anforderungen von MobiLink zu bestätigen, und klicken Sie auf Weiter.
Damit die Synchronisation reibungslos funktioniert, geht MobiLink von einigen Annahmen bezüglich der Primärschlüssel der Tabellen aus. Da die "names"-Anwendung diese Annahmen erfüllt, sind keine Änderungen nötig.
Klicken Sie auf die konsolidierte Datenbank NamesCondb und anschließend auf Weiter.
Klicken Sie auf Nein, entferntes Datenbankschema erstellen und anschließend auf Weiter.
Wählen Sie die Names-Tabelle aus der Tabellenliste und klicken Sie auf Weiter.
Die anderen angeführten Tabellen werden von MobiLink im Hintergrund verwendet und können für die Synchronisation ignoriert werden.
Klicken Sie unter Downloadtyp auf Timestamp-based download.
Diese Option stellt eine gute Standardimplementierung einer Synchronisation dar, bei der nur die Änderungen seit der letzten Synchronisation aktualisiert werden. Diese Option spart Bandbreite für das iPhone, da keine unnötigen Daten übertragen werden.
Da alle anderen Einstellungen als Standardwerte beibehalten werden, klicken Sie auf Fertig stellen.
Wenn Sie die anderen Optionen sehen möchten, die als MobiLink-Vorlagen verfügbar sind, können Sie alle Schritte im Assistenten durcharbeiten.
Nachdem das Synchronisationsmodell erstellt wurde, ist es auf der linken Seite in der Ansicht Ordner sichtbar. Falls die Ansicht Ordner nicht sichtbar ist, klicken Sie auf Ansicht » Ordner.
So nehmen Sie das Deployment des Synchronisationsmodells vor:
Klicken Sie bei gedrückter Control-Taste auf NamesModel in der Ansicht Ordner und klicken Sie auf Bereitstellen.
Deaktivieren Sie die Option Entfernte Datenbank und Synchronisationsclient, lassen Sie die Optionen Konsolidierte Datenbank und MobiLink-Server aktiviert und klicken Sie auf Weiter.
Klicken Sie auf Änderungen in der folgenden SQL-Datei speichern und Mit der konsolidierten Datenbank verbinden, um die Änderungen direkt zu übernehmen, während in der Liste NamesCondb ausgewählt ist. Klicken Sie auf Weiter.
Akzeptieren Sie die Erstellung des neuen Verzeichnisses, sobald Sie dazu aufgefordert werden.
Geben Sie einen MobiLink-Benutzer und das Kennwort ein.
MobiLink-Benutzer unterscheiden sich von SQL Anywhere-Datenbankbenutzern. Sie sollten einen anderen Benutzernamen als dba verwenden. In dieser praktischen Einführung werden "Benutzer" bzw. "Kennwort" verwendet. Diese Werte werden später in der praktischen Einführung verwendet.
Vergewissern Sie sich, dass die Option Diesen Benutzer in der konsolidierten Datenbank für MobiLink-Authentifizierung verwenden aktiviert ist, und klicken Sie auf Fertig stellen.
Akzeptieren Sie die Erstellung des neuen Verzeichnisses, sobald Sie dazu aufgefordert werden.
Wenn angezeigt wird, dass das Deployment abgeschlossen ist, schließen Sie es mit Schließen.
Da das Synchronisationsmodell bereitgestellt wurde, enthält die konsolidierte Datenbank alle Informationen, die für MobiLink erforderlich sind. Das Deployment hat auch Skripten zum Start des MobiLink-Servers erstellt:
Öffnen Sie die Terminal-Anwendung.
Navigieren Sie in der Terminal-Sitzung dorthin, wo während des Deployments das Startskript gespeichert wurde. Standardmäßig ist dies: ~/NamesProject/NamesModel/mlsrv.
Vergewissern Sie sich, dass das Skript ausführbar ist:
chmod u+x NamesModel_mlsrv.sh |
Starten Sie den MobiLink-Server.
./NamesModel_mlsrv.sh "DSN=Names" |
Sie haben jetzt eine konsolidierte Datenbank und einen laufenden MobiLink-Server.
Damit die Anwendung eine Synchronisation durchführen kann, müssen Sie zunächst die Synchronisation aktivieren. In der openConnection-Methode der DataAccess-Klasse fügen Sie nach dem if-block, der die Datenbankerstellung (ULDatabaseManager::Init) enthält, die folgende Zeile hinzu:
ULDatabaseManager::EnableTcpipSynchronization(); |
Nachdem die Datenbank jetzt synchronisiert werden kann, können Sie der DataAccess-Klasse die folgende Methode hinzufügen. Sie müssen der Header-Datei auch die Methodensignatur hinzufügen.
- (void)synchronize { NSString * result = nil; ul_sync_info info; // Initialize the sync info struct connection->InitSyncInfo(&info); // Set the sync parameters info.user_name = (char*)"user"; // Set to your username info.password = (char*)"password"; // Set to your password info.version = (char*)"NamesModel"; info.stream = "tcpip"; info.stream_parms = (char*)"host=localhost"; // Display the network activity indicator in the status bar [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; // Sync and get the result if (connection->Synchronize(&info)) { result = @"Sync was successful."; } else { // Get the error message and log it. char errorMsg[80]; connection->GetLastError()->GetString(errorMsg, 80); NSLog(@"Sync failed: %s", errorMsg); result = [NSString stringWithFormat:@"Sync failed: %s", errorMsg]; } // Stop showing the activity indicator [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; [[[[UIAlertView alloc] initWithTitle:@"Synchronization" message:result delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil] autorelease] show]; } |
Dies ist die einfachste Synchronisation, die ein Client ausführen kann. In einer Unternehmensanwendung werden Sie wahrscheinlich eine Callback-Methode verwenden, um den Fortschritt der Synchronisation auf einem getrennten Thread abzurufen, damit die Anwendung nicht blockiert wird.
In der aktuellen Implementierung wird die Synchronisation ebenfalls im Haupt-Thread durchgeführt. Es wird nicht empfohlen, den Haupt-Thread auf diese Weise zu blockieren. In der nächsten Lektion verwenden Sie einen eigenen Thread, um die Synchronisation durchzuführen, und fügen eine Callback-Methode hinzu, um die Synchronisation zu beobachten und den Fortschritt anzuzeigen.
Damit der Benutzer wählen kann, wann die Synchronisation erfolgt, fügen Sie der Navigationsleiste eine Schaltfläche hinzu. Mit der Schaltfläche wird die folgende Methode in RootViewController aufgerufen:
- (void)sync { [[DataAccess sharedInstance] synchronize]; [self.tableView reloadData]; } |
Zum Erstellen der Schaltfläche fügen Sie folgenden Code in RootViewController der viewDidLoad-Methode hinzu:
// Little button with the refresh sign on the left in the nav bar self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(sync)]; |
Sie können jetzt die Anwendung erstellen und ausführen. Wenn Sie auf die Schaltfläche Aktualisieren tippen, wird die Datenbank auf dem iPhone mit der konsolidierten SQL Anywhere-Datenbank synchronisiert.
Vor der Synchronisation müssen Sie Daten in die konsolidierte Datenbank einfügen, um sie auf dem iPhone anzuzeigen, oder Daten auf dem iPhone einfügen, um sie in der konsolidierten Datenbank anzuzeigen.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |