05.10.2013 Aufrufe

UltraLite Static Java Benutzerhandbuch - Downloads - Sybase

UltraLite Static Java Benutzerhandbuch - Downloads - Sybase

UltraLite Static Java Benutzerhandbuch - Downloads - Sybase

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong><br />

<strong>Benutzerhandbuch</strong><br />

Bestellnummer: DC50035-01-0902-01<br />

Stand: Oktober 2004


Copyright © 1989–2004 <strong>Sybase</strong> Inc. Teil-Copyright © 2001–2004 iAnywhere Solutions Inc. Alle Rechte vorbehalten.<br />

Diese Publikation darf weder ganz noch in Teilen, weder elektronisch, mechanisch, manuell, optisch oder auf sonstige Weise ohne vorherige<br />

schriftliche Genehmigung von iAnywhere Solutions, Inc reproduziert, übertragen oder übersetzt werden. iAnywhere Solutions Inc. ist eine<br />

Tochtergesellschaft von <strong>Sybase</strong> Inc.<br />

<strong>Sybase</strong>, SYBASE (Logo), AccelaTrade, ADA Workbench, Adaptable Windowing Environment, Adaptive Component Architecture, Adaptive<br />

Server, Adaptive Server Anywhere, Adaptive Server Enterprise, Adaptive Server Enterprise Monitor, Adaptive Server Enterprise Replication,<br />

Adaptive Server Everywhere, Adaptive Server IQ, Adaptive Warehouse, AnswerBase, Anywhere Studio, Application Manager, AppModeler,<br />

APT Workbench, APT-Build, APT-Edit, APT-Execute, APT-Library, APT-Translator, ASEP, AvantGo, AvantGo Application Alerts, AvantGo<br />

Mobile Delivery, AvantGo Mobile Document Viewer, AvantGo Mobile Inspection, AvantGo Mobile Marketing Channel, AvantGo Mobile Pharma,<br />

AvantGo Mobile Sales, AvantGo Pylon, AvantGo Pylon Application Server, AvantGo Pylon Conduit, AvantGo Pylon PIM Server, AvantGo<br />

Pylon Pro, Backup Server, BayCam, Bit-Wise, BizTracker, Certified PowerBuilder Developer, Certified SYBASE Professional, Certified SYBASE<br />

Professional-Logo, ClearConnect, Client Services, Client-Library, CodeBank, Column Design, ComponentPack, Connection Manager, Convoy/DM,<br />

Copernicus, CSP, Data Pipeline, Data Workbench, DataArchitect, Database Analyzer, DataExpress, DataServer, DataWindow, DB-Library,<br />

dbQueue, Developers Workbench, Direct Connect Anywhere, DirectConnect, Distribution Director, Dynamic Mobility Model, Dynamo, e-ADK,<br />

E-Anywhere, e-Biz Integrator, EC Gateway, ECMAP, ECRTP, eFulfillment Accelerator, Electronic Case Management, Embedded SQL, EMS,<br />

Enterprise Application Studio, Enterprise Client/Server, Enterprise Connect, Enterprise Data Studio, Enterprise Manager, Enterprise Portal (Logo),<br />

Enterprise SQL Server Manager, Enterprise Work Architecture, Enterprise Work Designer, Enterprise Work Modeler, eProcurement Accelerator,<br />

eremote, Everything Works Better When Everything Works Together, EWA, E-Whatever, Financial Fusion, Financial Fusion (and design), Financial<br />

Fusion Server, Formula One, Fusion Powered e-Finance, Fusion Powered Financial Destinations, Fusion Powered STP, Gateway Manager,<br />

GeoPoint, GlobalFIX, iAnywhere, iAnywhere Solutions, ImpactNow, Industry Warehouse Studio, InfoMaker, Information Anywhere, Information<br />

Everywhere, InformationConnect, InstaHelp, Intelligent Self-Care, InternetBuilder, iremote, iScript, Jaguar CTS, jConnect for JDBC,<br />

KnowledgeBase, Logical Memory Manager, Mail Anywhere Studio, MainframeConnect, Maintenance Express, Manage Anywhere Studio, MAP,<br />

M-Business Channel, M-Business Network, M-Business Server, MDI Access Server, MDI Database Gateway, media.splash, Message Anywhere<br />

Server, MetaWorks, MethodSet, ML Query, MobiCATS, My AvantGo, My AvantGo Media Channel, My AvantGo Mobile Marketing, MySupport,<br />

Net-Gateway, Net-Library, New Era of Networks, Next Generation Learning, Next Generation Learning Studio, O DEVICE, OASiS, OASiS-Logo,<br />

ObjectConnect, ObjectCycle, OmniConnect, OmniSQL Access Module, OmniSQL Toolkit, Open Biz, Open Business Interchange, Open Client,<br />

Open Client/Server, Open Client/Server Interfaces, Open ClientConnect, Open Gateway, Open Server, Open ServerConnect, Open Solutions,<br />

Optima++, Orchestration Studio, Partnerships that Work, PB-Gen, PC APT Execute, PC DB-Net, PC Net Library, PhysicalArchitect, Pocket<br />

PowerBuilder, PocketBuilder, Power Through Knowledge, power.stop, Power++, PowerAMC, PowerBuilder, PowerBuilder Foundation Class<br />

Library, PowerDesigner, PowerDimensions, PowerDynamo, Powering the New Economy, PowerJ, PowerScript, PowerSite, PowerSocket,<br />

Powersoft, Powersoft Portfolio, Powersoft Professional, PowerStage, PowerStudio, PowerTips, PowerWare Desktop, PowerWare Enterprise,<br />

ProcessAnalyst, QAnywhere, Rapport, Relational Beans, RepConnector, Replication Agent, Replication Driver, Replication Server, Replication<br />

Server Manager, Replication Toolkit, Report Workbench, Report-Execute, Resource Manager, RW-DisplayLib, RW-Library, S.W.I.F.T. Message<br />

Format Libraries, SAFE, SAFE/PRO, SDF, Secure SQL Server, Secure SQL Toolset, Security Guardian, SKILS, smart.partners, smart.parts,<br />

smart.script, SQL Advantage, SQL Anywhere, SQL Anywhere Studio, SQL Code Checker, SQL Debug, SQL Edit, SQL Edit/TPU,<br />

SQL Everywhere, SQL Modeler, SQL Remote, SQL Server, SQL Server Manager, SQL Server SNMP SubAgent, SQL Server/CFT,<br />

SQL Server/DBM, SQL SMART, SQL Station, SQL Toolset, SQLJ, Stage III Engineering, Startup.Com, STEP, SupportNow, <strong>Sybase</strong> Central,<br />

<strong>Sybase</strong> Client/Server Interfaces, <strong>Sybase</strong> Development Framework, <strong>Sybase</strong> Financial Server, <strong>Sybase</strong> Gateways, <strong>Sybase</strong> Learning Connection,<br />

<strong>Sybase</strong> MPP, <strong>Sybase</strong> SQL Desktop, <strong>Sybase</strong> SQL Lifecycle, <strong>Sybase</strong> SQL Workgroup, <strong>Sybase</strong> Synergy Program, <strong>Sybase</strong> User Workbench, <strong>Sybase</strong><br />

Virtual Server Architecture, <strong>Sybase</strong>Ware, Syber Financial, SyberAssist, SybMD, SyBooks, System 10, System 11, System XI (Logo), SystemTools,<br />

Tabular Data Stream, The Enterprise Client/Server Company, The Extensible Software Platform, The Future Is Wide Open, The Learning<br />

Connection, The Model For Client/Server Solutions, The Online Information Center, The Power of One, TotalFix, TradeForce, Transact-SQL,<br />

Translation Toolkit, Turning Imagination Into Reality, <strong>UltraLite</strong>, <strong>UltraLite</strong>.NET, UNIBOM, Unilib, Uninull, Unisep, Unistring, URK Runtime Kit<br />

for UniCode, Versacore, Viewer, VisualWriter, VQL, Warehouse Control Center, Warehouse Studio, Warehouse WORKS, WarehouseArchitect,<br />

Watcom, Watcom SQL, Watcom SQL Server, Web Deployment Kit, Web.PB, Web.SQL, WebSights, WebViewer, WorkGroup SQL Server,<br />

XA-Library, XA-Server und XP Server sind Marken von <strong>Sybase</strong> Inc. oder ihren Tochtergesellschaften.<br />

Copyright © 1997–2001 Certicom Corp. Teil-Copyright © 1997–1998, Consensus Development Corporation, eine 100% Tochtergesellschaft von<br />

Certicom Corp. Alle Rechte vorbehalten. Enthält eine Implementierung von NR-Signaturen, die im Rahmen des U.S.-Patents 5,600,725. lizenziert<br />

wurden. Durch U.S.-Patente 5,787,028, 4,745,568, 5,761,305 geschützt. Patente angemeldet.<br />

Alle anderen Marken gehören ihren jeweiligen Eigentümern.<br />

ii


Inhaltsverzeichnis<br />

Über dieses Handbuch v<br />

Dokumentation zu SQL Anywhere Studio . . . . . . . . . . . vi<br />

Konventionen in dieser Dokumentation . . . . . . . . . . . . . x<br />

Beispieldatenbank CustDB . . . . . . . . . . . . . . . . . . . xii<br />

Wenn Sie mehr wissen und uns Ihre Anregungen mitteilen<br />

möchten . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii<br />

1 Einführung in die <strong>Static</strong> <strong>Java</strong>-API Schnittstelle 1<br />

Erforderliche Systemausstattung und unterstützte Plattformen 2<br />

<strong>Static</strong> <strong>Java</strong>-Anwendungen entwickeln . . . . . . . . . . . . . 3<br />

Vorteile und Einschränkungen der <strong>Static</strong> <strong>Java</strong>-API . . . . . . 4<br />

2 Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen 5<br />

Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

Lektion 1: SQL-Anweisungen zur Referenzdatenbank hinzufügen<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

Lektion 2: <strong>UltraLite</strong>-Generator ausführen . . . . . . . . . . . . 11<br />

Lektion 3: Anwendungscode schreiben . . . . . . . . . . . . . 12<br />

Lektion 4: Anwendung erstellen und ausführen . . . . . . . . 16<br />

Lektion 5: Synchronisation zur Anwendung hinzufügen . . . . 18<br />

Lektion 6: Änderungen rückgängig machen . . . . . . . . . . 21<br />

3 Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API 23<br />

Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendung . . . . . . . . . . . . 25<br />

Mit der <strong>UltraLite</strong>-Datenbank verbinden und die Datenbank<br />

konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

SQL-Anweisungen in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen<br />

einbeziehen . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

Benutzerauthentifizierung zu Ihrer Anwendung hinzufügen . . 38<br />

Datenbankspeicher konfigurieren und verwalten . . . . . . . 41<br />

Anwendungen eine Synchronisationsfunktion hinzufügen . . 46<br />

Hinweise zur <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Entwicklung . . . . . . . . 57<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen erstellen . . . . . . . . . 58<br />

4 <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz 61<br />

<strong>UltraLite</strong>-API-Referenz . . . . . . . . . . . . . . . . . . . . . . 62<br />

iii


5 Referenz der Synchronisationsparameter 73<br />

Synchronisationsparameter . . . . . . . . . . . . . . . . . . . 74<br />

auth_parms-Synchronisatonsparameter . . . . . . . . . . . . 76<br />

auth_status-Parameter . . . . . . . . . . . . . . . . . . . . . . 77<br />

auth_value-Synchronisationsparameter . . . . . . . . . . . . 79<br />

download_only-Synchronisationsparameter . . . . . . . . . . 80<br />

ignored_rows-Synchronisationsparameter . . . . . . . . . . . 81<br />

new_password-Synchronisationsparameter . . . . . . . . . . 82<br />

num_auth_parms-Synchronisationsparameter . . . . . . . . 83<br />

observer-Synchronisationsparameter . . . . . . . . . . . . . . 84<br />

password-Synchronisationsparameter . . . . . . . . . . . . . 85<br />

ping-Synchronisationsparameter . . . . . . . . . . . . . . . . 86<br />

publication-Synchronisationsparameter . . . . . . . . . . . . 87<br />

security-Synchronisationsparameter . . . . . . . . . . . . . . 88<br />

security_parms-Synchronisationsparameter . . . . . . . . . . 89<br />

stream-Synchronisationsparameter . . . . . . . . . . . . . . . 91<br />

stream_parms-Synchronisationsparameter . . . . . . . . . . 94<br />

upload_ok-Synchronisationsparameter . . . . . . . . . . . . . 95<br />

upload_only-Synchronisationsparameter . . . . . . . . . . . . 96<br />

user_data-Synchronisationsparameter . . . . . . . . . . . . . 97<br />

user_name-Synchronisationsparameter . . . . . . . . . . . . 98<br />

version-Synchronisationsparameter . . . . . . . . . . . . . . 99<br />

Index 101<br />

iv


Über dieses Handbuch<br />

Gegenstand Dieses Handbuch beschreibt die <strong>Static</strong> <strong>Java</strong> API-Schnittstelle von <strong>UltraLite</strong>.<br />

Es stellt eine Ergänzung zum <strong>UltraLite</strong> Datenbankhandbuch dar.<br />

Zielgruppe Dieses Handbuch richtet sich an alle Anwendungsentwickler, die<br />

<strong>Java</strong>-Programme schreiben, in denen eine <strong>UltraLite</strong>-Datenbank verwendet<br />

wird. Dabei wird die Kenntnis von Adaptive Server Anywhere und<br />

relationalen Datenbanken vorausgesetzt.<br />

v


Dokumentation zu SQL Anywhere Studio<br />

Dokumentation zu<br />

SQL Anywhere Studio<br />

vi<br />

Dieses Handbuch ist Teil der SQL Anywhere-Dokumentation. Dieser<br />

Abschnitt enthält eine Liste der Handbücher und Hinweise zu ihrer<br />

Verwendung.<br />

Die Dokumentation zu SQL Anywhere Studio wird in unterschiedlichen<br />

Formaten bereitgestellt: Eine Online-Version kombiniert alle Bücher in einer<br />

großen Hilfedatei, eigene PDF-Dateien werden für jedes Buch angeboten,<br />

und gedruckte Ausgaben können zusätzlich erworben werden. Die<br />

Dokumentation besteht aus folgenden Handbüchern:<br />

♦ SQL Anywhere Studio Erste Orientierung Dieses Handbuch enthält<br />

einen Überblick über die Datenbankverwaltungs- und<br />

Synchronisationstechnologien von SQL Anywhere Studio. Es bietet<br />

praktische Einführungen zu einzelnen Bestandteilen von SQL Anywhere<br />

Studio.<br />

♦ Neues in SQL Anywhere Studio Dieses Handbuch richtet sich an<br />

Benutzer früherer Versionen dieser Software. Es enthält eine Liste neuer<br />

Funktionen in dieser und in früheren Versionen des Programms und eine<br />

Beschreibung der Upgrade-Prozeduren.<br />

♦ Adaptive Server Anywhere Datenbankadministration Dieses<br />

Handbuch befasst sich mit der Ausführung, Verwaltung und<br />

Konfiguration von Datenbanken und Datenbankservern.<br />

♦ Adaptive Server Anywhere SQL-<strong>Benutzerhandbuch</strong> In diesem<br />

Handbuch wird beschrieben, wie Datenbanken entworfen und<br />

eingerichtet, Daten importiert, exportiert, geändert bzw. abgerufen und<br />

gespeicherte Prozeduren und Trigger erstellt werden.<br />

♦ Adaptive Server Anywhere SQL-Referenzhandbuch Dieses<br />

Handbuch ist ein umfassendes Nachschlagwerk für die SQL-Sprache, die<br />

von Adaptive Server Anywhere benutzt wird. Auch die Adaptive Server<br />

Anywhere-Systemtabellen und Prozeduren werden darin beschrieben.<br />

♦ Adaptive Server Anywhere Handbuch für Programmierer In diesem<br />

Handbuch wird beschrieben, wie Datenbankanwendungen in den<br />

Programmiersprachen C, C++ und <strong>Java</strong> aufgebaut und bereitgestellt<br />

werden. Benutzer von Programmen wie Visual Basic und PowerBuilder<br />

können deren Programmierschnittstellen einsetzen. In diesem Handbuch<br />

wird auch der Adaptive Server Anywhere ADO.NET-Datenprovider<br />

beschrieben.<br />

♦ Adaptive Server Anywhere Handbuch zum<br />

SNMP-Erweiterungsagenten In dieser Dokumentation wird


eschrieben, wie der Adaptive Server Anywhere<br />

SNMP-Erweiterungsagent für den Einsatz mit<br />

SNMP-Managementanwendungen in der Verwaltung von Adaptive<br />

Server Anywhere-Datenbanken konfiguriert wird.<br />

♦ Adaptive Server Anywhere Fehlermeldungen Dieses Handbuch<br />

enthält eine vollständige Liste der Fehlermeldungen in Adaptive Server<br />

Anywhere sowie Diagnosehinweise.<br />

♦ SQL Anywhere Studio Sicherheitshandbuch Dieses Handbuch<br />

enthält Hinweise zu den Sicherheitskomponenten in Adaptive Server<br />

Anywhere-Datenbanken. Adaptive Server Anywhere 7.0 wurde die<br />

Sicherheitseinstufung TCSEC (Trusted Computer System Evaluation<br />

Criteria) C2 der US-Regierung verliehen. Dieses Handbuch kann für den<br />

Personenkreis von Interesse sein, der die aktuelle Version von Adaptive<br />

Server Anywhere in einer Umgebung ausführen möchte, die dem<br />

C2-Zertifikat entspricht.<br />

♦ MobiLink Administrationshandbuch In diesem Handbuch wird der<br />

Einsatz des MobiLink-Datensynchronisationssystems für die mobile<br />

Datenverarbeitung erläutert. Mit diesem System können Daten einer<br />

Oracle-, <strong>Sybase</strong>-, Microsoft- oder IBM-Datenbank auf viele Adaptive<br />

Server Anywhere- bzw. <strong>UltraLite</strong>-Datenbanken übertragen und flexibel<br />

genutzt werden.<br />

♦ MobiLink Clients In diesem Handbuch wird beschrieben, wie entfernte<br />

Adaptive Server Anywhere- und <strong>UltraLite</strong>-Datenbanken synchronisiert<br />

werden.<br />

♦ MobiLink Handbuch zur serverinitiierten Synchronisation In diesem<br />

Handbuch wird die vom MobiLink-Server initiierte Synchronisation<br />

beschrieben, mit der Sie eine Synchronisation von der konsolidierten<br />

Datenbank aus durchführen können.<br />

♦ MobiLink Praktische Einführungen Dieses Handbuch enthält mehrere<br />

praktische Einführungen für die Einrichtung und den Betrieb von<br />

MobiLink-Anwendungen.<br />

♦ QAnywhere <strong>Benutzerhandbuch</strong> Diese Dokumentation behandelt<br />

MobiLink QAnywhere, eine Plattform für die Nachrichtenverarbeitung,<br />

die die Entwicklung und das Deployment von Nachrichtenanwendungen<br />

für mobile und drahtlose Clients ebenso wie für traditionelle Desktops<br />

und Laptops ermöglicht.<br />

♦ ODBC-Treiber für MobiLink und Ferndatenzugriff Dieses Buch<br />

beschreibt, wie Sie ODBC-Treiber einrichten, um vom<br />

vii


MobiLink-Synchronisationsserver und über den Fern-Datenzugriff von<br />

Adaptive Server Anywhere auf konsolidierte Datenbanken zuzugreifen,<br />

die keine Adaptive Server Anywhere-Datenbanken sind.<br />

♦ SQL Remote <strong>Benutzerhandbuch</strong> In diesem Handbuch werden alle<br />

Aspekte des SQL Remote-Datenreplikationssystems für mobile<br />

Datenverarbeitung beschrieben, das die gemeinsame Datennutzung von<br />

einer einzelnen Adaptive Server Anywhere- bzw. Adaptive Server<br />

Enterprise-Datenbank und vielen Adaptive Server<br />

Anywhere-Datenbanken über eine indirekte Verbindung wie etwa E-Mail<br />

oder Datenübertragung ermöglicht.<br />

♦ SQL Anywhere Studio-Hilfe Diese Dokumentation enthält die<br />

kontextsensitive Hilfe für <strong>Sybase</strong> Central, Interactive SQL und andere<br />

grafische Programme. Sie wird nicht als gedrucktes Handbuch geliefert.<br />

♦ <strong>UltraLite</strong> Datenbankhandbuch Dieses Handbuch richtet sich an alle<br />

<strong>UltraLite</strong>-Entwickler. Es stellt eine Einführung in das<br />

<strong>UltraLite</strong>-Datenbanksystem dar und enthält Informationen, die für alle<br />

<strong>UltraLite</strong>-Programmierschnittstellen gelten.<br />

♦ Dokumentation der <strong>UltraLite</strong>-Programmierschnittstellen Für jede<br />

<strong>UltraLite</strong>-Programmierschnittstelle wird ein eigenes Handbuch<br />

mitgeliefert. Einige dieser Schnittstellen werden als<br />

<strong>UltraLite</strong>-Komponenten für die rasche Entwicklung von Anwendungen<br />

mitgeliefert, andere als statische Schnittstellen für die Entwicklung unter<br />

C, C++ und <strong>Java</strong>.<br />

Zusätzlich zu dieser Dokumentation werden PowerDesigner und InfoMaker<br />

mit eigener Dokumentation geliefert.<br />

Dokumentationsformate SQL Anywhere Studio umfasst Dokumentationen in folgenden Formaten:<br />

viii<br />

♦ Online-Dokumentation Die Online-Dokumentation enthält die<br />

vollständige SQL Anywhere Studio-Dokumentation, einschließlich der<br />

gedruckten Handbücher und der kontextsensitiven Hilfe für die<br />

SQL Anywhere-Dienstprogramme. Die Online-Dokumentation wird mit<br />

jeder Wartungsversion des Produkts aktualisiert. Dies ist die<br />

vollständigste und aktuellste Informationsquelle.<br />

Wenn Sie unter Windows-Betriebssystemen auf die<br />

Online-Dokumentation zugreifen wollen, klicken Sie auf Start ➤<br />

Programme ➤ <strong>Sybase</strong> SQL Anywhere 9 ➤ Online-Dokumentation. Der<br />

Zugriff auf den Inhalt erfolgt über die HTML-Inhaltsangabe, den Index<br />

und die Suchfunktion im linken Fensterausschnitt sowie über Links und<br />

Menüs im rechten Fensterausschnitt.


Wenn Sie auf die Online-Dokumentation unter UNIX-Betriebssystemen<br />

zugreifen wollen, nutzen Sie entsprechende Hinweise in der<br />

HTML-Dokumentation in Ihrer SQL Anywhere-Installation.<br />

♦ Handbücher im PDF-Format Die SQL Anywhere-Handbücher werden<br />

in Form von PDF-Dateien geliefert, die mit dem Adobe Acrobat Reader<br />

gelesen werden können.<br />

Die Handbücher im PDF-Format können aus der Online-Dokumentation<br />

oder über das Windows Startmenü aufgerufen werden.<br />

♦ Gedruckte Handbücher Die komplette Handbuchreihe kann beim<br />

<strong>Sybase</strong>-Vertrieb oder im eShop bezogen werden. eShop ist der <strong>Sybase</strong><br />

Online-Shop unter http://eshop.sybase.com/eshop/documentation.<br />

ix


Konventionen in dieser Dokumentation<br />

In diesem Abschnitt werden die Konventionen für die Schreibweise und der<br />

grafische Aufbau beschrieben, der in dieser Dokumentation verwendet wird.<br />

Syntaxkonventionen Folgende Konventionen werden bei SQL-Syntaxbeispielen verwendet:<br />

x<br />

♦ Schlüsselwörter Alle SQL-Schlüsselwörter werden wie die Wörter<br />

ALTER TABLE im folgenden Beispiel in Großschreibung angezeigt:<br />

ALTER TABLE [ Eigentümer.]Tabellenname<br />

♦ Platzhalter Elemente, die durch entsprechende Bezeichner oder<br />

Ausdrücke ersetzt werden müssen, werden wie die Wörter Eigentümer<br />

und Tabellenname im folgenden Beispiel angezeigt:<br />

ALTER TABLE [ Eigentümer.]Tabellenname<br />

♦ Wiederholungen Listen mit sich wiederholenden Elementen werden<br />

mit einem Element der Liste, gefolgt von drei Punkten gezeigt, wie<br />

Spalten-Integritätsregel im folgenden Beispiel:<br />

ADD Spaltendefinition [ Spalten-Integritätsregel, . . . ]<br />

Ein oder mehrere Listenelemente sind zulässig. In diesem Beispiel gilt:<br />

Wenn mehr als ein Element angegeben wird, muss eine Trennung der<br />

Elemente durch Kommas erfolgen.<br />

♦ Fakultative Bestandteile Fakultative Bestandteile einer Anweisung<br />

werden in eckige Klammern gesetzt.<br />

RELEASE SAVEPOINT [ Savepoint-Name ]<br />

Diese eckigen Klammern zeigen an, dass der Savepoint-Name fakultativ<br />

ist. Die eckigen Klammern werden nicht eingegeben.<br />

♦ Optionen Wenn aus einer Liste kein oder nur ein Element ausgewählt<br />

werden darf, werden die Elemente durch Senkrechtstriche voneinander<br />

getrennt, und die komplette Liste wird in eckige Klammern gesetzt.<br />

[ ASC | DESC ]<br />

Sie können z.B. entweder ASC, DESC oder keines wählen. Die eckigen<br />

Klammern werden nicht eingegeben.<br />

♦ Alternativen Wenn nur eine der Optionen gewählt werden darf, werden<br />

die Alternativen in geschweifte Klammern gesetzt und mit einem<br />

Senkrechtstrich getrennt.<br />

[ QUOTES { ON | OFF } ]


Wenn die Option QUOTES ausgewählt wird, muss entweder ON oder<br />

OFF angegeben werden. Eckige und geschweifte Klammern sind nicht<br />

einzugeben.<br />

Grafische Symbole Die nachstehenden Symbole werden in dieser Dokumentation verwendet.<br />

♦ Eine Clientanwendung<br />

♦ Ein Datenbankserver, wie zum Beispiel Adaptive Server Anywhere.<br />

♦ Eine Datenbank. In einigen abstrakten Diagrammen kann dieses Symbol<br />

die Datenbank und gleichzeitig auch den Datenbankserver, der sie<br />

steuert, repräsentieren.<br />

♦ Replikations- oder Synchronisations-Middleware. Mithilfe derartiger<br />

Software können Daten in mehreren Datenbanken gleichzeitig verwendet<br />

werden. Beispiele sind der MobiLink-Synchronisationsserver und der<br />

SQL Remote Nachrichtenagent.<br />

♦ Eine Programmierschnittstelle<br />

xi


Beispieldatenbank CustDB<br />

xii<br />

Viele der Beispiele in der MobiLink- und der <strong>UltraLite</strong>-Dokumentation<br />

verwenden die <strong>UltraLite</strong>-Beispieldatenbank.<br />

Die Referenzdatenbank für die <strong>UltraLite</strong>-Beispieldatenbank befindet sich in<br />

einer Datei mit dem Namen custdb.db im Unterverzeichnis<br />

Samples\<strong>UltraLite</strong>\CustDB des SQL Anywhere-Verzeichnisses. Zum<br />

Lieferumfang gehört auch eine auf dieser Datenbank aufgebaute<br />

vollständige Anwendung.<br />

Die Beispieldatenbank ist eine Vertriebsanwendung für<br />

Hardware-Produzenten. Sie enthält Kunden-, Produkt- und Vertriebsdaten<br />

für das Unternehmen.<br />

In der nachstehend abgebildeten Strukturdarstellung werden die Tabellen der<br />

Datenbank “CustDB” und ihre Beziehungen zueinander erläutert.<br />

ULCustomer<br />

cust_id integer<br />

cust_name varchar(30)<br />

last_modified timestamp<br />

cust_id = cust_id<br />

ULOrder<br />

order_id integer<br />

cust_id integer<br />

prod_id integer<br />

emp_id integer<br />

disc integer<br />

quant integer<br />

notes varchar(50)<br />

status varchar(20)<br />

last_modified timestamp<br />

prod_id = prod_id<br />

ULProduct<br />

prod_id integer<br />

price integer<br />

prod_name varchar(30)<br />

cust_id = cust_id<br />

emp_id = emp_id<br />

ULEmpCust<br />

emp_id integer<br />

cust_id integer<br />

action char(1)<br />

last_modified timestamp<br />

emp_id = emp_id<br />

ULEmployee<br />

emp_id integer<br />

emp_name varchar(30)<br />

last_download timestamp<br />

emp_id = pool_emp_id<br />

ULOrderIDPool<br />

pool_order_id integer<br />

pool_emp_id integer<br />

last_modified timestamp<br />

ULIdentifyEmployee<br />

emp_id integer<br />

emp_id = pool_emp_id<br />

ULCustomerIDPool<br />

pool_cust_id integer<br />

pool_emp_id integer<br />

last_modified timestamp


Wenn Sie mehr wissen und uns Ihre Anregungen<br />

mitteilen möchten<br />

Weitere<br />

Informationsquellen<br />

Weitere Informationen und Ressourcen, darunter auch Austausch von<br />

Programmcode, finden Sie im iAnywhere Developer Network unter<br />

http://www.ianywhere.com/developer/.<br />

Wenn Sie Fragen haben oder Hilfe brauchen, können Sie sich bei den<br />

nachstehenden iAnywhere Solutions Newsgroups informieren.<br />

Wenn Sie in diesen Newsgroups Fragen stellen, achten Sie darauf, Ihr<br />

Problem so detailliert wie möglich darzustellen und vergessen Sie nicht die<br />

Build-Nummer Ihrer Version von SQL Anywhere Studio. Diese<br />

Informationen erhalten Sie, wenn Sie an einer Systemeingabeaufforderung<br />

dbeng9 -v eingeben.<br />

Die Newsgroups finden Sie auf dem News-Server forums.sybase.com.<br />

Folgende Newsgroups wurden eingerichtet:<br />

♦ sybase.public.sqlanywhere.general<br />

♦ sybase.public.sqlanywhere.linux<br />

♦ sybase.public.sqlanywhere.mobilink<br />

♦ sybase.public.sqlanywhere.product_futures_discussion<br />

♦ sybase.public.sqlanywhere.replication<br />

♦ sybase.public.sqlanywhere.ultralite<br />

♦ ianywhere.public.sqlanywhere.qanywhere<br />

Newsgroup-Verpflichtungsausschluss<br />

iAnywhere Solutions ist weder verpflichtet, Lösungen, Informationen<br />

oder Ideen in seinen Newsgroups bereitzustellen, noch verpflichtet sich<br />

iAnywhere Solutions, mehr bereitzustellen als einen Systemadministrator,<br />

der den Service überwacht und seine Abwicklung sowie die Verfügbarkeit<br />

gewährleistet.<br />

Die technischen Mitarbeiter von iAnywhere Solutions stehen, ebenso wie<br />

andere Mitarbeiter, für den Newsgroup-Service bereit, sofern sie Zeit dazu<br />

haben. Sie stellen ihre Hilfe freiwillig zur Verfügung und sind möglicherweise<br />

nicht regelmäßig verfügbar, um Lösungen und Informationen<br />

bereitzustellen. Ihre Einsatzfähigkeit ist abhängig von ihrer aktuellen<br />

Arbeitsauslastung.<br />

xiii


Kommentare und<br />

Anregungen<br />

xiv<br />

Wir würden gerne Ihre Meinung erfahren und sind an Ihren Vorschlägen und<br />

Anregungen zu dieser Dokumentation interessiert.<br />

Senden Sie bitte Ihre Kommentare und Anregungen per E-Mail an das SQL<br />

Anywhere-Dokumentationsteam unter iasdoc@ianywhere.com. Auf die an<br />

diese Adresse gesendeten e-Mails erfolgt zwar keine Antwort, aber alle<br />

Anregungen werden mit Interesse gelesen.<br />

Außerdem können Sie Ihre Kommentare und Anregungen zur<br />

Dokumentation und zur Software über die oben angegebenen Newsgroups<br />

vermitteln.


KAPITEL 1<br />

Einführung in die <strong>Static</strong> <strong>Java</strong>-API<br />

Schnittstelle<br />

Über dieses Kapitel In diesem Kapitel wird die <strong>Static</strong> <strong>Java</strong>-API für <strong>UltraLite</strong>-Datenbanken<br />

beschrieben. Dabei wird davon ausgegangen, dass Sie das<br />

<strong>UltraLite</strong>-Datenbanksystem und die von ihm gebotenen<br />

Entwicklungsmodelle kennen.<br />

☞ Weitere Hinweise finden Sie unter “Willkommen bei <strong>UltraLite</strong>”<br />

[<strong>UltraLite</strong> Datenbankhandbuch, Seite 3].<br />

Inhalt Thema: Seite<br />

Erforderliche Systemausstattung und unterstützte Plattformen 2<br />

<strong>Static</strong> <strong>Java</strong>-Anwendungen entwickeln 3<br />

Vorteile und Einschränkungen der <strong>Static</strong> <strong>Java</strong>-API 4<br />

1


Erforderliche Systemausstattung und unterstützte<br />

Plattformen<br />

2<br />

Die unterstützte Zielplattform ist Sun Personal <strong>Java</strong> 1.2.<br />

Die Anwendungsentwicklung erfordert einen unterstützten JDK. Sie müssen<br />

auch über eine Adaptive Server Anywhere-Referenzdatenbank verfügen.<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong>-Entwicklungsplattformen”<br />

[SQL Anywhere Studio Erste Orientierung, Seite 107] und<br />

“<strong>UltraLite</strong>-Zielplattformen” [SQL Anywhere Studio Erste Orientierung,<br />

Seite 118].


Kapitel 1. Einführung in die <strong>Static</strong> <strong>Java</strong>-API Schnittstelle<br />

<strong>Static</strong> <strong>Java</strong>-Anwendungen entwickeln<br />

Wenn Sie <strong>Static</strong> <strong>Java</strong> <strong>UltraLite</strong>-Anwendungen entwickeln, benutzen Sie eine<br />

JDBC-ähnliche Programmierschnittstelle. Um diese Anwendungen zu<br />

entwickeln, müssen Sie die Programmiersprache <strong>Java</strong> kennen.<br />

Der Entwicklungsprozess für <strong>Static</strong> <strong>Java</strong> <strong>UltraLite</strong>-Anwendungen sieht wie<br />

folgt aus:<br />

1. Planen Sie das Design Ihrer Datenbank.<br />

Bereiten Sie eine Adaptive Server Anywhere-Referenzdatenbank vor, die<br />

die Tabellen und Indizes enthält, die in Ihre <strong>UltraLite</strong>-Datenbank<br />

integriert werden sollen.<br />

2. Fügen Sie der Datenbank SQL-Anweisungen hinzu.<br />

Die SQL-Anweisungen, die Sie in Ihrer Anwendung verwenden wollen,<br />

müssen der Referenzdatenbank hinzugefügt werden.<br />

3. Generieren Sie die Klassen für Ihre Anwendung.<br />

Der <strong>UltraLite</strong>-Generator stellt die Klassen bereit, die Ihre Anwendung<br />

benötigt.<br />

4. Schreiben Sie Ihren Anwendungscode.<br />

Datenzugriffsfunktionen in Ihrem Anwendungscode benutzen JDBC und<br />

andere Funktionsaufrufe.<br />

☞ Eine Anleitung für die Schnittstelle finden Sie unter “<strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong> API-Referenz” auf Seite 61.<br />

5. Kompilieren Sie Ihre .java-Dateien.<br />

Sie können die generierten .java-Dateien genau so kompilieren wie<br />

andere .java-Dateien.<br />

☞ Eine vollständige Beschreibung des Entwicklungsprozesses finden Sie<br />

unter “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen erstellen” auf Seite 58.<br />

3


Vorteile und Einschränkungen der <strong>Static</strong> <strong>Java</strong>-API<br />

4<br />

<strong>UltraLite</strong> bietet mehrere Programmierschnittstellen, darunter Modelle für die<br />

statische Entwicklung (z.B. die <strong>Static</strong> <strong>Java</strong>-Schnittstelle) und<br />

<strong>UltraLite</strong>-Komponenten. Eine <strong>Java</strong>-basierte Komponente (Native <strong>UltraLite</strong><br />

für <strong>Java</strong>) steht unter Anderem zur Verfügung.<br />

Die <strong>Static</strong> <strong>Java</strong>-API hat folgende Vorteile:<br />

♦ Pure <strong>Java</strong>-Lösung Die <strong>UltraLite</strong>-Laufzeitbibliothek für die <strong>Static</strong><br />

<strong>Java</strong>-API ist eine Pure <strong>Java</strong>-Anwendung. Dies ist bei der Native <strong>UltraLite</strong><br />

für <strong>Java</strong>-Komponente anders, die dieselbe C++-basierte<br />

<strong>UltraLite</strong>-Laufzeitbibliothek verwendet wie andere<br />

<strong>UltraLite</strong>-Schnittstellen. In der Native <strong>UltraLite</strong> für <strong>Java</strong>-Komponente<br />

erfolgt der Zugriff auf die <strong>UltraLite</strong>-Laufzeitbibliothek über<br />

systemeigene Methoden.<br />

♦ Erweiterte SQL-Unterstützung Mit der <strong>Static</strong> <strong>Java</strong>-API können Sie<br />

einen breiteren Bereich von SQL in Ihren Anwendungen abdecken als<br />

mit der auf den Komponenten basierten Schnittstelle.<br />

Die <strong>Static</strong> <strong>Java</strong>-API hat folgende Nachteile:<br />

♦ Komplexes Entwicklungsmodell Der Einsatz einer<br />

Referenzdatenbank für die Speicherung des <strong>UltraLite</strong>-Datenbankschemas<br />

und das Erfordernis, Klassen für Ihre spezifische Anwendung zu<br />

generieren, führt dazu, dass der Entwicklungsprozess mit <strong>Static</strong> <strong>Java</strong>-API<br />

komplex wird. Die <strong>UltraLite</strong>-Komponenten, einschließlich Native<br />

<strong>UltraLite</strong> für <strong>Java</strong>, bieten einen viel einfacheren Entwicklungsprozess.<br />

♦ SQL muss zum Designzeitpunkt angegeben werden Nur<br />

SQL-Anweisungen, die zum Kompilierungszeitpunkt definiert wurden,<br />

können in Ihre Anwendung eingebaut werden. Die<br />

<strong>UltraLite</strong>-Komponenten ermöglichen die dynamische Verwendung von<br />

SQL-Anweisungen.<br />

Die Wahl des Entwicklungsmodells richtet sich nach den Anforderungen<br />

Ihres Projekts, nach den verfügbaren Programmierkenntnissen und der<br />

verfügbaren Erfahrung.


KAPITEL 2<br />

Praktische Einführung: Anwendung mit<br />

<strong>Java</strong> erstellen<br />

Informationen zu diesem<br />

Kapitel<br />

Dieses Kapitel enthält eine praktische Einführung, die Sie durch den<br />

Entwicklungsprozess einer <strong>UltraLite</strong>-Anwendung mithilfe der <strong>Static</strong> <strong>Java</strong><br />

API-Schnittstelle leitet. Im ersten Abschnitt wird beschrieben, wie Sie eine<br />

einfache Anwendung erstellen. Im zweiten Abschnitt wird beschrieben, wie<br />

Sie Ihrer Anwendung die Synchronisation hinzufügen.<br />

☞ Einen Überblick über den Entwicklungsprozess und<br />

Hintergrundinformationen zu der <strong>UltraLite</strong>-Datenbank finden Sie unter<br />

“<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen erstellen” auf Seite 58.<br />

☞ Hinweise zum Entwickeln von <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen<br />

finden Sie unter “Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API” auf Seite 23.<br />

Inhalt Thema: Seite<br />

Überblick 6<br />

Lektion 1: SQL-Anweisungen zur Referenzdatenbank hinzufügen 8<br />

Lektion 2: <strong>UltraLite</strong>-Generator ausführen 11<br />

Lektion 3: Anwendungscode schreiben 12<br />

Lektion 4: Anwendung erstellen und ausführen 16<br />

Lektion 5: Synchronisation zur Anwendung hinzufügen 18<br />

Lektion 6: Änderungen rückgängig machen 21<br />

5


Überblick<br />

Überblick<br />

6<br />

Diese praktische Einführung beschreibt, wie Sie eine einfache Anwendung<br />

mithilfe von <strong>Java</strong> erstellen. Es handelt sich dabei um eine<br />

Befehlszeilenanwendung, die mit Sun JDK entwickelt wurde und Daten in<br />

der Tabelle ULProduct der <strong>UltraLite</strong> 9.0 Beispieldatenbank abfragt.<br />

In dieser praktischen Einführung erstellen Sie eine <strong>Java</strong>-Quelldatei, ein<br />

Projekt in einer Referenzdatenbank und verwenden diese Quellen, um Ihre<br />

Anwendung zu erstellen und auszuführen. Die ersten Lektionen beschreiben<br />

eine Version der Anwendung ohne Synchronisation. Die Synchronisation<br />

wird in einer späteren Lektion hinzugefügt.<br />

Für die Ausführung der Anweisungen in der praktische Einführung muss<br />

außerdem ein <strong>Java</strong> Development Kit installiert sein.<br />

In der ersten Lektion schreiben und erstellen Sie eine Anwendung, die<br />

folgende Aufgaben ausführt:<br />

1. Verbindung zu einer <strong>UltraLite</strong>-Datenbank herstellen, die eine einzige<br />

Tabelle umfasst. Die Tabelle ist eine Teilmenge der Tabelle ULProduct<br />

der <strong>UltraLite</strong>-Beispieldatenbank.<br />

2. Zeilen in die Tabelle einfügen. Ausgangsdaten werden in eine<br />

<strong>UltraLite</strong>-Anwendung gewöhnlich durch die Synchronisation mit einer<br />

konsolidierten Datenbank eingefügt. Die Synchronisation wird später in<br />

diesem Kapitel hinzugefügt.<br />

3. Die Zeilen der Tabelle auf die Standardausgabe schreiben<br />

Um die Anwendung zu erstellen, müssen Sie folgende Schritte ausführen:<br />

1. Eine Adaptive Server Anywhere-Referenzdatenbank erstellen.<br />

Hier wird die <strong>UltraLite</strong>-Beispieldatenbank (CustDB) verwendet.<br />

2. Die SQL-Anweisungen hinzufügen, die in Ihrer Anwendung für die<br />

Referenzdatenbank verwendet werden sollen<br />

3. Den <strong>UltraLite</strong>-Generator ausführen, um den <strong>Java</strong>-Code und eine<br />

zusätzliche Quelldatei für diese <strong>UltraLite</strong>-Datenbank zu generieren.<br />

Der Generator erzeugt eine .java-Datei, die die SQL-Anweisungen in<br />

einer Form enthält, die Sie in Ihrer Anwendung verwenden können, und<br />

eine .java-Datei mit dem Code, der die Abfragen ausführt.


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

4. Quellcode schreiben, der die Logik der Anwendung implementiert.<br />

Hier umfasst der Quellcode eine einzelne Datei namens Sample.java.<br />

5. Die Anwendung kompilieren und ausführen.<br />

Verzeichnis für Ihre Dateien erstellen<br />

Im zweiten Abschnitt fügen Sie Ihrer Anwendung die Synchronisation<br />

hinzu.<br />

In dieser praktischen Einführung erstellen Sie eine Reihe von Dateien,<br />

einschließlich der Quell- und Programmdateien. Sie sollten ein Verzeichnis<br />

für diese Dateien erstellen. Außerdem sollten Sie eine Kopie der<br />

<strong>UltraLite</strong>-Beispieldatenbank erstellen, sodass Sie sie verändern können,<br />

ohne die Original-Beispieldatenbank für andere Projekte zu verlieren.<br />

Kopien der in dieser Einführung benutzten Dateien finden Sie im<br />

Unterverzeichnis Samples\<strong>UltraLite</strong>\<strong>Java</strong>Tutorial des<br />

SQL Anywhere-Verzeichnisses.<br />

❖ So bereiten Sie ein Verzeichnis für die praktische Einführung vor<br />

1. Erstellen Sie ein Verzeichnis, in dem die zu erstellenden Dateien<br />

gespeichert werden sollen. In den verbleibenden Teilen dieser praktischen<br />

Einführung wird davon ausgegangen, dass dieses Verzeichnis<br />

c:\<strong>Java</strong>Tutorial heißt.<br />

2. Erstellen Sie im Verzeichnis der praktischen Einführung eine<br />

Sicherungskopie der Beispieldatenbank von <strong>UltraLite</strong> 9.0. Die<br />

Beispieldatenbank von <strong>UltraLite</strong> 9.0 ist die Datei custdb.db und befindet<br />

sich im Unterverzeichnis Samples\<strong>UltraLite</strong>\CustDB Ihres<br />

SQL Anywhere-Installationsverzeichnisses. In dieser praktischen<br />

Einführung wird die Originalbeispieldatenbank von <strong>UltraLite</strong> 9.0<br />

verwendet und am Ende der praktischen Einführung können Sie die<br />

unveränderte Version aus dem Verzeichnis APITutorial zurück kopieren.<br />

7


Lektion 1: SQL-Anweisungen zur<br />

Referenzdatenbank hinzufügen<br />

8<br />

Die Referenzdatenbank für diese praktische Einführung ist die <strong>UltraLite</strong><br />

9.0-Beispieldatenbank. In einem späteren Schritt werden Sie diese<br />

Datenbank als konsolidierte Datenbank für die Synchronisation verwenden.<br />

Diese zwei Verwendungsmöglichkeiten sind voneinander getrennt und in der<br />

Praxis werden Sie als Referenzdatenbank und konsolidierte Datenbank zwei<br />

verschiedene Datenbanken verwenden.<br />

Fügen Sie die SQL-Anweisungen der Referenzdatenbank mithilfe der<br />

gespeicherten Prozedur ul_add_statement hinzu. In dieser einfachen<br />

Anwendung verwenden Sie folgende Anweisungen:<br />

♦ Einfügen Eine INSERT-Anweisung fügt in die Tabelle ULProduct eine<br />

Erstkopie der Daten ein. Diese Anweisung wird nicht benötigt, wenn der<br />

Anwendung die Synchronisation hinzugefügt wurde.<br />

♦ Select (Auswählen) Eine SELECT-Anweisung fragt die Tabelle<br />

ULProduct ab.<br />

Wenn Sie eine SQL-Anweisung hinzufügen, müssen Sie sie einem<br />

<strong>UltraLite</strong>-Projekt zuordnen. Hier verwenden wir den Projektnamen Product.<br />

Sie müssen auch einen Namen für die Anweisung einfügen, der aus<br />

Großbuchstaben bestehen muss.<br />

❖ So fügen Sie der Referenzdatenbank die SQL-Anweisungen hinzu<br />

1. Starten Sie <strong>Sybase</strong> Central und stellen Sie eine Verbindung zur <strong>UltraLite</strong><br />

9.0-Beispieldatenquelle her, indem Sie das Adaptive Server<br />

Anywhere-Plugin benutzen.<br />

a. Im Menü “Start” wählen Sie Programme ➤ SQL Anywhere 9 ➤<br />

<strong>Sybase</strong> Central. <strong>Sybase</strong> Central erscheint.<br />

b. Wählen Sie aus dem Menü “Datei” die Option Extras ➤ Verbinden.<br />

Das Dialogfeld “Neue Verbindung” wird angezeigt.<br />

c. Wählen Sie das Adaptive Server Anywhere-Plug-In und klicken Sie<br />

auf OK. Das Dialogfeld “Verbinden” wird angezeigt.<br />

d. Geben Sie im Register “Identifizierung” den<br />

ODBC-Datenquellennamen und geben Sie <strong>UltraLite</strong> 9.0 Sample ein.<br />

2. Fügen Sie der Datenbank ein Projekt hinzu:<br />

a. In <strong>Sybase</strong> Central öffnen Sie die Datenbank custdb.


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

b. Öffnen Sie den Ordner <strong>UltraLite</strong>-Projekt.<br />

Der Ordner enthält bereits ein Projekt: Das Projekt custapi, das für die<br />

Beispielanwendung benutzt wird. Erstellen Sie ein neues Projekt.<br />

c. Wählen Sie Datei ➤ Neu ➤ <strong>UltraLite</strong>-Projekt.<br />

d. Geben Sie den Projektnamen Product ein und klicken Sie auf “Fertig<br />

stellen”.<br />

3. Fügen Sie dem Projekt Product die INSERT-Anweisung hinzu.<br />

a. Doppelklicken Sie auf Product, um das Projekt zu öffnen.<br />

b. Wählen Sie Datei ➤ Neu ➤ <strong>UltraLite</strong>-Anweisung.<br />

c. Geben Sie InsertProduct als Anweisungsnamen ein. Klicken Sie auf<br />

“Weiter”.<br />

d. Geben Sie den Anweisungstext ein:<br />

INSERT INTO ULProduct ( prod_id, price, prod_name)<br />

VALUES (?,?,?)<br />

Die Fragezeichen in der SQL-Anweisung sind Platzhalter für Werte,<br />

die Sie in die Tabelle ULProduct eingeben können. Diese Werte<br />

werden während des Programmablaufs eingegeben.<br />

e. Klicken Sie auf Fertig stellen, um den Vorgang abzuschließen.<br />

Dieser Vorgang in <strong>Sybase</strong> Central entspricht der Ausführung der<br />

folgenden gespeicherten Prozedur:<br />

call ul_add_statement(’Product’,<br />

’InsertProduct’,<br />

’INSERT INTO ULProduct( prod_id, price, prod_name)<br />

VALUES (?,?,?) ’ )<br />

Das erste Argument für ul_add_statement ist der Projektname, das zweite<br />

der Anweisungsname und das dritte ist die SQL-Anweisung.<br />

4. Fügen Sie dem Projekt “Product” die SELECT-Anweisung hinzu.<br />

a. Wählen Sie aus dem Projekt “Product” die Option Datei ➤ Neu ➤<br />

<strong>UltraLite</strong>-Anweisung.<br />

b. Geben Sie SelectProduct als Anweisungsnamen ein. Klicken Sie auf<br />

“Weiter”.<br />

c. Geben Sie den Anweisungstext ein:<br />

SELECT prod_id, prod_name, price<br />

FROM ULProduct<br />

d. Klicken Sie auf Fertig stellen, um den Vorgang abzuschließen.<br />

9


10<br />

Dieser Vorgang in <strong>Sybase</strong> Central entspricht der Ausführung der<br />

folgenden gespeicherten Prozedur:<br />

call ul_add_statement(’Product’,<br />

’SelectProduct’,<br />

’SELECT prod_id, prod_name, price FROM ULProduct’)<br />

5. Schließen Sie <strong>Sybase</strong> Central.<br />

Sie haben damit die SQL-Anweisungen in die Datenbank eingefügt und<br />

können nun die <strong>UltraLite</strong>-Datenbank generieren.<br />

☞ Weitere Hinweise finden Sie unter “ul_add_project-Systemprozedur”<br />

[<strong>UltraLite</strong> Datenbankhandbuch, Seite 229] und<br />

“ul_add_statement-Systemprozedur” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 228].


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

Lektion 2: <strong>UltraLite</strong>-Generator ausführen<br />

Der <strong>UltraLite</strong>-Generator erzeugt zwei <strong>Java</strong>-Dateien. Eine der Dateien enthält<br />

die SQL-Anweisungen als Schnittstellendefinition, die hier<br />

ISampleSQL.java heißt. Sie können diese Schnittstellendefinition im<br />

Hauptanwendungscode verwenden. Die zweite Datei enthält den Code, der<br />

die Abfragen und die Datenbank implementiert und heißt hier<br />

SampleDB.java.<br />

❖ So generieren Sie den <strong>UltraLite</strong>-Datenbankcode<br />

1. Öffnen Sie eine Eingabeaufforderung und gehen Sie zu Ihrem<br />

Verzeichnis <strong>Java</strong>Tutorial.<br />

2. Starten Sie den <strong>UltraLite</strong>-Generator mit folgenden Argumenten (alle auf<br />

einer Zeile):<br />

ulgen -a -t java -c "dsn=<strong>UltraLite</strong> 9.0 Sample"<br />

-j Product -s ISampleSQL -f SampleDB<br />

Die Argumente haben folgende Bedeutung:<br />

♦ -a SQL-Zeichenfolge in Großbuchstaben generieren. Die<br />

Anweisungen InsertProduct und SelectProduct werden zu<br />

INSERT_PRODUCT und SELECT_PRODUCT konvertiert.<br />

♦ -t Die Sprache des generierten Codes. Es wird <strong>Java</strong>-Code an Stelle<br />

von C-Code generiert.<br />

♦ –c Die Verbindungszeichenfolge für die Verbindung zur Datenbank.<br />

♦ -j Der <strong>UltraLite</strong>-Projektname. Dieser Name entspricht dem<br />

Projektnamen, den Sie angegeben haben, als Sie die SQL-Anweisung<br />

in die Datenbank eingefügt haben. Der Generator erzeugt nur für die<br />

Anweisungen Code, die diesem Projekt zugeordnet sind.<br />

♦ -s Der Name der Schnittstelle, die die SQL-Anweisungen als<br />

Zeichenfolgen enthält.<br />

♦ -f Der Name der Datei, die den generierten Datenbankcode und den<br />

Code für die Ausführung der Abfrage enthält.<br />

11


Lektion 3: Anwendungscode schreiben<br />

12<br />

Der folgendende Code enthält eine einfache <strong>UltraLite</strong>-Anwendung.<br />

Sie können den Code in eine neue Datei kopieren und unter dem Namen<br />

Sample.java im Verzeichnis c:\<strong>Java</strong>Tutorial speichern oder eine neue Datei<br />

öffnen und den Inhalt eingeben.<br />

// (1) Import required packages<br />

import java.sql.*;<br />

import ianywhere.ultralite.jdbc.*;<br />

import ianywhere.ultralite.runtime.*;<br />

// (2) Class implements the interface containing SQL statements<br />

public class Sample implements ISampleSQL<br />

{<br />

public static void main( String[] args )<br />

{<br />

try{<br />

// (3) Connect to the database<br />

java.util.Properties p = new<br />

java.util.Properties();<br />

p.put( "persist", "file" );<br />

SampleDB db = new SampleDB( p );<br />

Connection conn = db.connect();<br />

// (4) Initialize the database with data<br />

PreparedStatement pstmt1 =<br />

conn.prepareStatement( INSERT_PRODUCT );<br />

pstmt1.setInt(1, 1);<br />

pstmt1.setInt(2, 400);<br />

pstmt1.setString(3, "4x8 Drywall x100");<br />

int rows1=pstmt1.executeUpdate();<br />

pstmt1.setInt(1, 2);<br />

pstmt1.setInt(2, 3000);<br />

pstmt1.setString(3, "8’ 2x4 Studs x1000");<br />

int rows2=pstmt1.executeUpdate();<br />

// (5) Query the data and write out the results<br />

Statement stmt = conn.createStatement();<br />

ResultSet result = stmt.executeQuery(<br />

SELECT_PRODUCT );<br />

while( result.next() ) {<br />

int id = result.getInt( 1 );<br />

String name = result.getString( 2 );<br />

int price = result.getInt( 3 );<br />

System.out.println ( name +<br />

" \tId=" + id +<br />

" \tPrice=" + price );<br />

}<br />

// (6) Close the connection to end<br />

conn.close();<br />

} catch (SQLException e) {<br />

Support.printException( e );<br />

}<br />

}<br />

}


Erläuterung des<br />

Beispielprogramms<br />

Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

Dieses Beispiel ist zwar zu einfach, um sinnvoll eingesetzt werden zu<br />

können, es enthält aber dennoch Elemente, die in jeder für den<br />

Datenbankzugriff verwendeten <strong>Java</strong>-Datei enthalten sein müssen. Im<br />

Folgenden sind die wichtigsten Elemente des Beispielprogramms<br />

beschrieben. Sie können diese Schritte als Richtlinie für die Erstellung Ihrer<br />

eigenen <strong>UltraLite</strong>-Anwendung verwenden.<br />

Die nummerierten Schritte beziehen sich jeweils auf die nummerierten<br />

Kommentare im Quellcode.<br />

1. Erforderliche Pakete importieren.<br />

Das Beispielprogramm verwendet JDBC-Schnittstellen und -Klassen und<br />

muss dieses Paket daher importieren. Außerdem werden die<br />

<strong>UltraLite</strong>-Laufzeitklassen und die generierte Schnittstelle benötigt, die<br />

die SQL-Anweisungszeichenfolgen enthält.<br />

2. Klasse definieren<br />

Die in der Anwendung eingesetzten SQL-Anweisungen werden in einer<br />

separaten Datei als Schnittstelle gespeichert. Die Klasse muss<br />

deklarieren, dass sie die Schnittstelle implementiert, damit sie die<br />

SQL-Anweisungen für das Projekt verwenden kann. Die Klassennamen<br />

basieren auf den Anweisungsnamen, die Sie bereitstellen, wenn Sie die<br />

Anweisungen zur Datenbank hinzufügen.<br />

3. Stellen Sie eine Verbindung zur Datenbank her.<br />

Die Verbindung wird mithilfe einer Instanz der Datenbankklasse<br />

hergestellt. Der Datenbankname muss mit dem Namen der generierten<br />

<strong>Java</strong>-Klasse übereinstimmen (in diesem Fall SampleDB). Der Wert file<br />

des Eigenschaftsobjekts persist gibt an, dass die Datenbank beständig<br />

ist.<br />

4. Beispieldaten eingeben.<br />

In einer Produktionsanwendung fügen Sie gewöhnlich keine<br />

Beispieldaten ein. Stattdessen erhalten Sie durch die Synchronisation<br />

eine Erstkopie der Daten. In der ersten Phase der Entwicklung kann die<br />

direkte Dateneingabe die Arbeit erleichtern.<br />

♦ Objekt PreparedStatement mithilfe der Methode<br />

prepareStatement() erstellen.<br />

♦ Um SQL-Befehle auszuführen, müssen Sie ein Statement- oder<br />

PreparedStatement-Objekt erstellen. Mit einem Statement-Objekt<br />

können Sie einfache SQL-Befehle ohne Parameter ausführen und mit<br />

einem PreparedStatement-Objekt SQL-Befehle mit Parametern. Das<br />

Beispielprogramm erstellt zuerst ein PreparedStatement-Objekt, um<br />

einen Einfügebefehl auszuführen:<br />

13


14<br />

PreparedStatement pstmt1 =<br />

conn.prepareStatement( INSERT_PRODUCT );<br />

Die Methode prepareStatement benötigt eine SQL-Zeichenfolge als<br />

Argument. Diese SQL-Zeichenfolge wird über die generierte<br />

Schnittstelle einbezogen.<br />

5. Select-SQL-Befehl mithilfe eines Statement-Objekts ausführen<br />

♦ Es wird ein Statement-Objekt mithilfe der Methode<br />

createStatement() erstellt.<br />

Im Unterschied zum Objekt PreparedStatement brauchen Sie bei der<br />

Erstellung eines Statement-Objekts keine SQL-Anweisung<br />

anzugeben. Aus diesem Grund kann ein einziges Statement-Objekt<br />

verwendet werden, um mehrere SQL-Anweisungen auszuführen.<br />

Statement stmt = conn.createStatement();<br />

♦ SQL-Abfrage ausführen.<br />

Mit der Methode executeQuery() wird eine Auswahlabfrage<br />

ausgeführt. Eine Select-Anweisung gibt ein ResultSet-Objekt zurück.<br />

♦ Eine Schleife implementieren, um sequenziell Abfrageergebnisse zu<br />

erhalten.<br />

Das Objekt ResultSet hat einen Cursor, der zunächst vor die erste<br />

Zeile zeigt. Der Cursor wird jedesmal um eine Zeile erhöht, wenn die<br />

Methode next() aufgerufen wird. Die Methode next() gibt den Wert<br />

TRUE zurück, wenn sich der Cursor zu einer Zeile mit Daten bewegt,<br />

und den Wert FALSE, wenn er hinter die letzte Zeile positioniert<br />

wurde.<br />

while(result.next()) {<br />

...<br />

}<br />

♦ Abfrageergebnisse mit der Methode getxxx() abrufen.<br />

Diese Methoden brauchen die Spaltennummer als Argument. Das<br />

Beispielprogramm verwendet die Methode getInt(), um die<br />

Produkt-ID (“id”) und den Preis (“price”) aus den ersten beiden<br />

Spalten abzurufen, und die Methode getString(), um den<br />

Produktnamen (“name”) aus der dritten Spalte abzurufen.<br />

int id = result.getInt( 1 );<br />

int price = result.getInt( 2 );<br />

String name = result.getString( 3 );<br />

6. Programm beenden.<br />

♦ Verbindung zur Datenbank mit der Methode Connection.close()<br />

schließen:


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

conn.close();<br />

15


Lektion 4: Anwendung erstellen und ausführen<br />

16<br />

Wenn Sie im vorigen Abschnitt mithilfe des Beispielcodes die Quelldatei<br />

Sample.java erstellt haben, können Sie nun Ihre <strong>UltraLite</strong>-Anwendung<br />

erstellen.<br />

❖ So erstellen Sie Ihre Anwendung<br />

1. Starten Sie den Personal Datenbankserver von Adaptive Server<br />

Anywhere.<br />

Wenn Sie den Datenbankserver starten, hat der <strong>UltraLite</strong>-Generator<br />

Zugriff auf Ihre Referenzdatenbank. Starten Sie den Datenbankserver<br />

über das die Menü “Start”:<br />

Start ➤ Programme ➤ <strong>Sybase</strong> SQL Anywhere 9 ➤ <strong>UltraLite</strong> ➤ Personal<br />

Server-Beispiel für Ultralite.<br />

2. Kompilieren Sie Ihre <strong>Java</strong>-Quelldateien.<br />

Beziehen Sie folgende Speicherpositionen in Ihren Klassenpfad ein:<br />

♦ Das aktuelle Verzeichnis (verwenden Sie einen Punkt in Ihrem<br />

Klassenpfad).<br />

♦ Die <strong>Java</strong>-Laufzeitklassen. Für JDK 1.2 beziehen Sie die Datei<br />

jre\lib\rt.jar in Ihren Klassenpfad ein. Für JDK 1.1 beziehen Sie die in<br />

Ihrer <strong>Java</strong>-Installation enthaltene Datei classes.zip ein.<br />

♦ Die <strong>UltraLite</strong>-Laufzeitklassen. Diese Klassen befinden sich an der<br />

folgenden Position:<br />

%ASANY9%\<strong>UltraLite</strong>\java\lib\ulrt.jar<br />

Dabei gilt: %ASANY9% repräsentiert Ihr<br />

SQL Anywhere-Verzeichnis.<br />

Führen Sie den javac-Compiler wie folgt aus:<br />

javac *.java<br />

Nun können Sie Ihre Anwendung ausführen.<br />

❖ So führen Sie Ihre Anwendung aus<br />

1. Öffnen Sie eine Eingabeaufforderung und gehen Sie zu Ihrem<br />

Verzeichnis <strong>Java</strong>tutorial.<br />

2. Beziehen Sie dieselben Klassen in den Klassenpfad ein wie im<br />

vorherigen Vorgang.


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

3. Geben Sie folgenden Befehl ein, um die Anwendung zu starten:<br />

java Sample<br />

Die Liste der beiden Einträge wird angezeigt und die Anwendung wird<br />

beendet.<br />

Damit haben Sie Ihre erste <strong>UltraLite</strong>-<strong>Java</strong>-Anwendung erstellt und<br />

ausgeführt. Im nächsten Schritt fügen Sie der Anwendung die<br />

Synchronisation hinzu.<br />

17


Lektion 5: Synchronisation zur Anwendung<br />

hinzufügen<br />

18<br />

Wenn Sie getestet und sichergestellt haben, dass Ihr Programm korrekt<br />

abläuft, können Sie die Codezeilen löschen, die Code manuell in die Tabelle<br />

ULProduct einfügen. Ersetzen Sie diese Anweisungen durch einen Aufruf<br />

der Funktion JdbcConnection.synchronize(), um die entfernte Datenbank<br />

mit der konsolidierten Datenbank zu synchronisieren. Dieser Prozess füllt<br />

die Tabellen mit Daten an, sodass Sie nachfolgend eine Auswahlabfrage<br />

ausführen können.<br />

Das Hinzufügen der Synchronisation vereinfacht den Code. Ihre<br />

ursprüngliche Version von Sample.java enthält folgende Zeilen, die einige<br />

Daten in Ihre <strong>UltraLite</strong>-Datenbank einfügen.<br />

PreparedStatement pstmt1 = conn.prepareStatement( ADD_PRODUCT_1<br />

);<br />

pstmt1.setInt(1, 1);<br />

pstmt1.setInt(2, 400);<br />

pstmt1.setString(3, "4x8 Drywall x100");<br />

int rows1=pstmt1.executeUpdate();<br />

pstmt1.setInt(1, 2);<br />

pstmt1.setInt(2, 3000);<br />

pstmt1.setString(3, "8’ 2x4 Studs x1000");<br />

int rows2=pstmt1.executeUpdate();<br />

Dieser Code ist enthalten, damit Ihre Anwendung erste Daten enthält. In<br />

einer Produktionsanwendung fügen Sie gewöhnlich keine Erstkopie Ihrer<br />

Daten über den Quellcode ein, sondern führen ein Synchronisation aus.<br />

❖ So fügen Sie Ihrer Anwendung die Synchronisationsfunktion hinzu<br />

1. Löschen Sie die generierte Datenbank (udb file) aus der Lektion 4.<br />

In dieser Lektion werden Daten durch Synchronisation hinzugefügt, und<br />

daher ist eine saubere <strong>UltraLite</strong>-Datenbank erforderlich.<br />

2. Ersetzen Sie die hartkodierten Einfügungen durch einen<br />

Synchronisationsaufruf.<br />

a. Löschen Sie die oben aufgeführten Anweisungen, die den Code<br />

einfügen.<br />

b. Fügen Sie an ihrer Stelle folgende Zeilen ein:


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

UlSynchOptions synch_opts = new UlSynchOptions();<br />

synch_opts.setUserName( "50" );<br />

synch_opts.setPassword( "pwd50" );<br />

synch_opts.setScriptVersion( "ul_default" );<br />

synch_opts.setStream( new UlSocketStream() );<br />

synch_opts.setStreamParms( "host=localhost" );<br />

( (JdbcConnection)conn ).synchronize( synch_opts );<br />

Das Argument ULSocketStream weist die Anwendung an, über<br />

TCP/IP mit einem MobiLink-Synchronisationsserver auf dem lokalen<br />

Rechner (localhost) mittels dem MobiLink-Benutzernamen 50 zu<br />

synchronisieren.<br />

3. Kompilieren und verknüpfen Sie Ihre Anwendung.<br />

Geben Sie folgenden Befehl mit einem CLASSPATH ein, der das aktuelle<br />

Verzeichnis, die <strong>UltraLite</strong>- und die <strong>Java</strong>-Laufzeitklassen einbezieht:<br />

javac *.java<br />

4. Starten Sie den MobiLink-Synchronisationsserver mit der<br />

Beispieldatenbank .<br />

In der Eingabeaufforderung in Ihrem <strong>Java</strong>Tutorial-Verzeichnis geben Sie<br />

folgenden Befehl ein:<br />

start dbmlsrv9 -c "dsn=<strong>UltraLite</strong> 9.0 Sample"<br />

5. Führen Sie die Anwendung aus.<br />

In der Eingabeaufforderung in Ihrem <strong>Java</strong>Tutorial-Verzeichnis geben Sie<br />

folgenden Befehl ein:<br />

java Sample<br />

Die Anwendung stellt die Verbindung her, synchronisiert, um Daten zu<br />

empfangen, und schreibt die Informationen in die Befehlszeile. Die<br />

Ausgabe lautet wie folgt:<br />

Connecting to server:port = localhost(a.b.c.d):2439<br />

4x8 Drywall x100 Id=1 Price=400<br />

8’ 2x4 Studs x1000 Id=2 Price=3000<br />

Drywall Screws 10lb Id=3 Price=40<br />

Joint Compound 100lb Id=4 Price=75<br />

Joint Tape x25x500 Id=5 Price=100<br />

Putty Knife x25 Id=6 Price=400<br />

8’ 2x10 Supports x 200 Id=7 Price=3000<br />

400 Grit Sandpaper Id=8 Price=75<br />

Screwmaster Drill Id=9 Price=40<br />

200 Grit Sandpaper Id=10 Price=100<br />

In dieser Lektion haben Sie einer einfachen <strong>UltraLite</strong>-Anwendung die<br />

Synchronisation hinzugefügt.<br />

19


20<br />

☞ Weitere Hinweise über die Funktion JdbcConnection.synchronize()<br />

finden Sie im Abschnitt “synchronize-Methode” auf Seite 67.


Kapitel 2. Praktische Einführung: Anwendung mit <strong>Java</strong> erstellen<br />

Lektion 6: Änderungen rückgängig machen<br />

Um die praktische Einführung abzuschließen, fahren Sie den<br />

MobiLink-Synchronisationsserver herunter und stellen die<br />

Beispieldatenbank von <strong>UltraLite</strong> 9.0 wieder her.<br />

❖ So beenden Sie die praktische Einführung<br />

1. Fahren Sie den MobiLink-Synchronisationsserver herunter.<br />

2. Stellen Sie die <strong>UltraLite</strong> 9.0-Beispieldatenbank wieder her.<br />

♦ Löschen Sie die Dateien custdb.db und custdb.log im Unterverzeichnis<br />

samples\<strong>UltraLite</strong>\custdb Ihres SQL Anywhere-Verzeichnisses.<br />

♦ Kopieren Sie die Datei custdb.db aus dem Verzeichnis APITutorial in<br />

das Verzeichnis samples\<strong>UltraLite</strong>\custdb.<br />

3. Löschen Sie die <strong>UltraLite</strong>-Datenbank.<br />

♦ Die <strong>UltraLite</strong>-Datenbank befindet sich im selben Verzeichnis wie die<br />

JAR-Dateien und hat die Erweiterung .udb. Wenn die Anwendung das<br />

nächste Mal gestartet wird, wird sie eine neue Datenbank initialisieren.<br />

21


KAPITEL 3<br />

Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Informationen zu diesem<br />

Kapitel<br />

Dieses Kapitel beschreibt den spezifisch für die <strong>Static</strong> <strong>Java</strong>-API geltenden<br />

<strong>UltraLite</strong>-Entwicklungsprozess im Detail. Es wird erklärt, wie Sie<br />

<strong>UltraLite</strong>-Anwendungen mithilfe von <strong>Java</strong> schreiben und wie Sie eine<br />

<strong>UltraLite</strong>-Anwendung bereitstellen.<br />

Inhalt Thema: Seite<br />

Überblick 24<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendung 25<br />

Mit der <strong>UltraLite</strong>-Datenbank verbinden und die Datenbank konfigurieren<br />

SQL-Anweisungen in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen einbeziehen<br />

Benutzerauthentifizierung zu Ihrer Anwendung hinzufügen 38<br />

Datenbankspeicher konfigurieren und verwalten 41<br />

Anwendungen eine Synchronisationsfunktion hinzufügen 46<br />

Hinweise zur <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Entwicklung 57<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen erstellen 58<br />

30<br />

37<br />

23


Überblick<br />

24<br />

<strong>UltraLite</strong>-Anwendungen können in der Programmiersprache <strong>Java</strong> mithilfe<br />

von JDBC für den Datenbankzugriff geschrieben werden.<br />

Der <strong>UltraLite</strong>-Entwicklungsprozess für <strong>Java</strong> ist dem für <strong>Static</strong><br />

C/C++-Anwendungen sehr ähnlich. Eine Beschreibung finden Sie unter<br />

“Verwendung von statischen Schnittstellen in <strong>UltraLite</strong>” [<strong>UltraLite</strong><br />

Datenbankhandbuch, Seite 209].<br />

Dieses Kapitel beschreibt nur die Aspekte der Anwendungsentwicklung, die<br />

für <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen spezifisch sind. Es wird davon<br />

ausgegangen, dass Sie mit <strong>Java</strong> und JDBC vertraut sind.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendung<br />

Dieser Abschnitt beschreibt, wie Sie die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Version der<br />

Beispielanwendung “CustDB” kompilieren und ausführen.<br />

Die Beispielanwendung befindet sich im Unterverzeichnis<br />

Samples\<strong>UltraLite</strong>\CustDB\java Ihres SQL Anywhere-Verzeichnisses.<br />

Die Applet-Version des Beispiels verwendet den Appletviewer von Sun, um<br />

die Datei custdb.html anzuzeigen, die eine einfache -Marke<br />

enthält.<br />

Die Appletviewer-Sicherheitseinschränkungen erfordern, dass das Applet<br />

von einem Webserver eingelesen und nicht über das Dateisystem gestartet<br />

wird, damit die Socketverbindungen zugelassen werden und die<br />

Synchronisation erfolgreich ist.<br />

Die Anwendungsversion von “CustDB” schreibt ihre Daten in eine Datei,<br />

während die Appletversion keine beständigen Daten verwendet.<br />

☞ Hinweise zu der C/C++-Version der Anwendung, die ähnliche<br />

Funktionen hat, finden Sie unter “Praktische Einführung: Die<br />

<strong>UltraLite</strong>-Beispielanwendung CustDB” [<strong>UltraLite</strong> Datenbankhandbuch,<br />

Seite 15].<br />

Die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispieldateien<br />

Der Code für die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispiele befindet sich im<br />

Unterverzeichnis Samples\<strong>UltraLite</strong>\CustDB\java Ihres SQL<br />

Anywhere-Verzeichnisses.<br />

Das Verzeichnis enthält folgende Dateien:<br />

♦ Datenzugriffscode Die Datei CustDB.java enthält die<br />

<strong>UltraLite</strong>-spezifische Datenzugriffslogik. Die SQL-Anweisungen sind in<br />

SQL.sql gespeichert.<br />

♦ Code für die Benutzeroberflächen Die Dateien DialogDelOrder.java,<br />

Dialogs.java, DialogNewOrder.java und DialogUserID.java enthalten alle<br />

Funktionen für die Benutzeroberfläche.<br />

♦ readme.txt Eine Textdatei, die detaillierte, versionsunabhängige<br />

Informationen über die Beispielanwendung enthält.<br />

♦ Unterverzeichnisse Es gibt zwei Unterverzeichnisse, in denen Sie die<br />

Beispieldatei ausführen können. Dies sind die Verzeichnisse java11 (für<br />

<strong>Java</strong> 1) und java13 (für <strong>Java</strong> 2). Wenn Sie eine 1.1.x-Version von JDK<br />

verwenden, sollten Sie das erste der beiden genannten Verzeichnisse zu<br />

25


Ihrem aktuellen Verzeichnis machen. Wenn Sie Version 1.2.x oder später<br />

verwenden, sollten Sie das zweite Verzeichnis zum aktuellen Verzeichnis<br />

deklarieren. Diese Unterverzeichnisse enthalten Batchdateien zur<br />

Ausführung der Beispiele. In jedem Verzeichnis hängen die Batchdateien<br />

jeweils von der Umgebunsgvariablen JAVA_HOME ab, die auf das<br />

Verzeichnis gesetzt werden sollte, in dem sich JDK befindet. Zum<br />

Beispiel:<br />

SET JAVA_HOME=c:\jdk1.3.1<br />

♦ Batchdateien zur Erstellung der Anwendung Die Dateien build.bat<br />

und clean.bat kompilieren die Anwendung bzw. löschen alle Dateien<br />

außer den Quelldateien.<br />

♦ Dateien zum Ausführen der Beispielanwendung Die Datei<br />

Application.java enthält die nötigen Anweisungen zum Ausführen des<br />

Beispiels als <strong>Java</strong>-Anwendung, und run.bat startet die<br />

Beispielanwendung.<br />

♦ Dateien zum Ausführen des Beispiels als Applet Die Datei<br />

Applet.java enthält die Anweisungen, die erforderlich sind, um das<br />

Beispiel als <strong>Java</strong>-Applet auszuführen, avapplet.bat startet das Applet und<br />

verwendet custdb.html als Webseite.<br />

Um das Beispiel als Applet auszuführen, müssen Sie einen Webserver<br />

installieren und starten. Das Applet kann mithilfe des<br />

Appletviewer-Dienstprogramms oder eines Web-Browsers ausgeführt<br />

werden. Weitere Hinweise finden Sie in der Datei<br />

Samples\<strong>UltraLite</strong>\CustDB\<strong>Java</strong>\readme.txt.<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendungen erstellen<br />

26<br />

Dieser Abschnitt beschreibt, wie Sie die <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong>-Beispielanwendung für die Umgebung von Sun <strong>Java</strong> 1 oder 2 erstellen.<br />

❖ So erstellen Sie die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendung<br />

1. Stellen Sie sicher, dass die richtige JDK-Version installiert ist.<br />

Sie müssen JDK 1.1 oder JDK 1.3 installiert haben, um die<br />

Beispielanwendung zu erstellen, und die JDK-Tools müssen sich im Pfad<br />

befinden.<br />

2. Öffnen Sie eine Eingabeaufforderung.<br />

3. Wechseln Sie in das Unterverzeichnis<br />

Samples\<strong>UltraLite</strong>\CustDB\java\java13 Ihres


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

SQL Anywhere-Verzeichnisses oder in das Verzeichnis java11, wenn Sie<br />

<strong>Java</strong> 1 verwenden.<br />

4. Erstellen Sie die Beispielanwendung:<br />

♦ Setzen Sie die Umgebungsvariable JAVA_HOME. Zum Beispiel:<br />

SET JAVA_HOME=c:\jdk1.3.1<br />

♦ An der Eingabeaufforderung geben Sie folgenden Befehl ein:<br />

build<br />

Die Erstellungsprozedur führt folgende Vorgänge aus:<br />

♦ Sie lädt SQL-Anweisungen in die <strong>UltraLite</strong>-Beispieldatenbank.<br />

Für diesen Schritt werden Interactive SQL, die Datei SQL.sql und die<br />

Datenquellen der Beispieldatenbank von <strong>UltraLite</strong> 9.0 verwendet.<br />

♦ Sie generiert die <strong>Java</strong>-Datenbankklasse custdb.Database.<br />

Dieser Schritt verwendet den <strong>UltraLite</strong>-Generator und die Datenquelle<br />

der Beispieldatenbank von <strong>UltraLite</strong> 9.0.<br />

♦ Sie kompiliert die <strong>Java</strong>-Dateien.<br />

Dieser Schritt verwendet den JDK-Compiler ( javac) und das<br />

Dienstprogramm jar.<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispielanwendung ausführen<br />

Sie können die Beispielanwendung als <strong>Java</strong>-Anwendung oder als Applet<br />

ausführen. In beiden Fällen müssen Sie vorab den<br />

MobiLink-Synchronisationsserver starten, der auf demselben Rechner läuft<br />

wie die Anwendung selbst.<br />

❖ So bereiten Sie die Ausführung der Beispielanwendung vor<br />

1. Starten Sie den MobiLink-Synchronisationsserver für die<br />

<strong>UltraLite</strong>-Beispieldatenbank:<br />

Im Menü “Start” wählen Sie Programme ➤ SQL Anywhere 9 ➤<br />

MobiLink ➤ Synchronisationsserver-Beispiel.<br />

❖ So starten Sie das Beispiel als Anwendung<br />

1. Öffnen Sie im Verzeichnis Samples\<strong>UltraLite</strong>\CustDB\java\java13 (oder<br />

im Verzeichnis java11, wenn Sie <strong>Java</strong> 1 verwenden) eine Befehlszeile.<br />

2. Führen Sie die Beispielanwendung aus:<br />

♦ Setzen Sie die Umgebungsvariable JAVA_HOME. Zum Beispiel:<br />

SET JAVA_HOME=c:\jdk1.3.1<br />

27


28<br />

♦ Geben Sie folgenden Befehl ein:<br />

run<br />

Die Anwendung wird gestartet und das Dialogfeld Enter ID erscheint.<br />

3. Geben Sie die Mitarbeiter-ID ein.<br />

Geben Sie die Mitarbeiter-ID “50” ein und klicken Sie auf “OK”.<br />

Das Fenster <strong>UltraLite</strong> Customer Demonstration wird angezeigt. Wenn Sie<br />

das Beispiel zuvor als Anwendung oder als Applet ausgeführt haben,<br />

enthält die Datenbank Daten.<br />

4. Wenn keine Daten in der Datenbank enthalten sind, synchronisieren Sie<br />

sie.<br />

Im Menü “Actions” wählen Sie “Synchronize”. Die Anwendung wird<br />

synchronisiert, und im Fenster wird eine Bestellung angezeigt.<br />

Sie können nun die Daten in der Datenbank bearbeiten.<br />

☞ Weitere Hinweise zur Beispieldatenbank und den damit durchführbaren<br />

<strong>UltraLite</strong>-Funktionen finden Sie unter “Praktische Einführung: Die<br />

<strong>UltraLite</strong>-Beispielanwendung CustDB” [<strong>UltraLite</strong> Datenbankhandbuch,<br />

Seite 15].<br />

❖ So starten Sie das Beispiel als Applet mit dem Appletviewer<br />

1. Starten Sie einen Webserver und stellen Sie sicher, dass das richtige<br />

Unterverzeichnis als Standardverzeichnis für den Server oder als eines<br />

der virtuellen Verzeichnisse konfiguriert ist.<br />

2. Öffnen Sie im Verzeichnis <strong>UltraLite</strong>\samples\CustDB\java\java13 (oder<br />

im Verzeichnis java11, wenn Sie <strong>Java</strong> 1 verwenden) eine<br />

Eingabeaufforderung.<br />

3. Geben Sie folgenden Befehl ein:<br />

avapplet<br />

♦ Das Applet wird gestartet, und es erscheint ein Feld, in das Sie eine<br />

Mitarbeiter-ID eingeben können.<br />

4. Geben Sie die Mitarbeiter-ID ein.<br />

Geben Sie die Mitarbeiter-ID “50” ein und klicken Sie auf “OK”.<br />

Das Fenster <strong>UltraLite</strong> Customer Demonstration wird angezeigt. Wenn Sie<br />

das Beispiel erstmals starten, enthält die Datenbank keine Daten. Wenn<br />

Sie das Beispiel zuvor als Anwendung oder als Applet ausgeführt haben,<br />

enthält die Datenbank Daten.


Beispielanwendung<br />

zurücksetzen<br />

5. Synchronisieren Sie die Anwendung:<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Im Menü “Actions” wählen Sie “Synchronize”. Die Anwendung wird<br />

synchronisiert, und im Fenster wird eine Bestellung angezeigt.<br />

Sie können nun die Daten in der Datenbank bearbeiten.<br />

❖ So starten Sie das Beispiel als Applet mit einem Web-Browser<br />

1. Starten Sie einen Webserver und stellen Sie sicher, dass das richtige<br />

Unterverzeichnis als Standardverzeichnis für den Server oder als eines<br />

der virtuellen Verzeichnisse konfiguriert ist.<br />

2. Starten Sie einen Web-Browser und geben Sie den URL für die Datei<br />

Samples\<strong>UltraLite</strong>\CustDB\java\custdb.htm in den Browser ein.<br />

♦ Das Applet wird gestartet, und es erscheint ein Feld, in das Sie eine<br />

Mitarbeiter-ID eingeben können.<br />

3. Geben Sie die Mitarbeiter-ID ein.<br />

Geben Sie die Mitarbeiter-ID “50” ein und klicken Sie auf “OK”.<br />

Das Fenster <strong>UltraLite</strong> Customer Demonstration wird angezeigt. Wenn Sie<br />

das Beispiel erstmals starten, enthält die Datenbank keine Daten. Wenn<br />

Sie das Beispiel zuvor als Anwendung oder als Applet ausgeführt haben,<br />

enthält die Datenbank Daten.<br />

4. Synchronisieren Sie die Anwendung:<br />

Im Menü “Actions” wählen Sie “Synchronize”. Die Anwendung wird<br />

synchronisiert, und im Fenster wird eine Bestellung angezeigt.<br />

☞ Weitere Hinweise zur Beispieldatenbank und den damit durchführbaren<br />

<strong>UltraLite</strong>-Funktionen finden Sie unter “Praktische Einführung: Die<br />

<strong>UltraLite</strong>-Beispielanwendung CustDB” [<strong>UltraLite</strong> Datenbankhandbuch,<br />

Seite 15].<br />

Sie können alle kompilierten Dateien, die Beispieldatenbank und den<br />

generierten Code löschen, indem Sie die Datei clean.bat ausführen.<br />

29


Mit der <strong>UltraLite</strong>-Datenbank verbinden und die<br />

Datenbank konfigurieren<br />

Dieser Abschnitt beschreibt, wie Sie sich mit einer <strong>UltraLite</strong>-Datenbank<br />

verbinden. Er stellt die empfohlene <strong>UltraLite</strong>-Methode zur Verbindung mit<br />

Ihrer Datenbank vor und bespricht, wie Sie das<br />

JDBC-Standardverbindungsmodell für die Verbindung verwenden können.<br />

Verbindungen zu <strong>UltraLite</strong>-Datenbanken haben keine Benutzer-IDs oder<br />

Kennwörter. Weitere Hinweise finden Sie unter “Benutzerauthentifizierung<br />

in <strong>UltraLite</strong>” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 45].<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken können beständig (engl. persistent;<br />

Speicherung in einer Datei, wenn die Anwendung geschlossen wird) oder<br />

flüchtig (vorübergehend, engl. transient; die Datenbank verschwindet, wenn<br />

die Anwendung geschlossen wird) sein. Standardmäßig sind sie flüchtig.<br />

Sie konfigurieren die Beständigkeit Ihrer <strong>UltraLite</strong>-Datenbank, wenn Sie<br />

sich mit ihr verbinden. Dieser Abschnitt beschreibt, wie Sie Ihre<br />

<strong>UltraLite</strong>-Datenbank konfigurieren.<br />

<strong>UltraLite</strong>-Methode “JdbcDatabase.connect” verwenden<br />

30<br />

Der generierte <strong>UltraLite</strong>-Datenbankcode hat die Form einer Klasse, die<br />

JdbcDatabase erweitert. Diese wiederum hat eine connect-Methode, die<br />

eine Verbindung einrichtet.<br />

Folgendes Beispiel illustriert typischen Code für die generierte<br />

Datenbankklasse SampleDB:<br />

try {<br />

SampleDB db = new SampleDB();<br />

java.sql.Connection conn = db.connect();<br />

} catch( SQLException e ){<br />

// error processing here<br />

}<br />

Die generierte Datenbankklasse wird in der Befehlszeile des<br />

<strong>UltraLite</strong>-Generators mit der Option -f angegeben.<br />

Wenn Sie eine beständige Datenbank verwenden wollen, werden die<br />

Merkmale für die Verbindung als Properties-Objekt festgelegt. Folgendes<br />

Beispiel illustriert typischen Code:<br />

java.util.Properties p = new java.utils.Properties();<br />

p.put( "persist", "file" );<br />

p.put( "persistfile", "c:\\dbdir\\database.udb" );<br />

SampleDB db = new SampleDB( p );<br />

java.sql.Connection conn = db.connect( );


JDBC-Treiber laden und registrieren<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Die Eigenschaften werden für den Datenbank-Konstruktor verwendet. Es ist<br />

nicht möglich, das Beständigkeitsmodell der Datenbank zwischen<br />

Verbindungen zu ändern.<br />

Die zwei Eigenschaften legen fest, dass die Datenbank beständig ist und in<br />

der Datei c:\dbdir\Datenbank.udb gespeichert wird.<br />

☞ Weitere Informationen zu den Möglichkeiten der Einstellungen für<br />

URLs finden Sie unter “JDBC-URLs in <strong>UltraLite</strong>” auf Seite 32.<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank<br />

konfigurieren” auf Seite 34 und “Die generierte Datenbankklasse” auf<br />

Seite 71.<br />

Die <strong>UltraLite</strong>-Methode JdbcDatabase.connect(), die im vorangehenden<br />

Abschnitt beschrieben wurde, ist die einfachste Möglichkeit, sich mit einer<br />

<strong>UltraLite</strong>-Datenbank zu verbinden. Sie können eine Verbindung jedoch auch<br />

auf dem Standardweg mit JDBC herstellen. In diesem Abschnitt wird<br />

beschrieben, wie Sie dabei vorgehen.<br />

<strong>UltraLite</strong>-Anwendungen verbinden sich mit ihrer Datenbank über einen<br />

JDBC-Treiber, der in den <strong>UltraLite</strong>-Laufzeitklassen enthalten ist (ulrt.jar).<br />

Sie müssen den JDBC-Treiber in Ihre Anwendung laden und registrieren,<br />

bevor Sie sich mit der Datenbank verbinden. Laden Sie den Treiber mit der<br />

Methode Class.forName(). Diese Methode benötigt den Namen des<br />

Treiberpakets als Argument.<br />

Class.forName( "ianywhere.ultralite.jdbc.JdbcDriver");<br />

Der JDBC-Treiber registriert sich selbständig, wenn er geladen wird.<br />

Mehrere Treiber laden Gewöhnlich wird nur ein Treiber in einer Anwendung registriert. Es ist<br />

jedoch möglich, mehrere Treiber für eine Anwendung zu laden. Laden Sie<br />

jeden Treiber mit der oben angegebenen Methode. Der DriverManager<br />

bestimmt, welcher Treiber für die Verbindung zu einer Datenbank verwendet<br />

wird.<br />

getDriver-Methode Die Methode DriverManager.getDriver gibt den Driver für die<br />

angegebene URL zurück.<br />

Fehlerbehandlung Wenn der Treiber nicht gefunden wird, führen Sie<br />

ClassNotFoundException wie folgt aus:<br />

31


Mit der Datenbank über JDBC verbinden<br />

getConnection-<br />

Prototypen<br />

try{<br />

Class.forName(<br />

"ianywhere.ultralite.jdbc.JdbcDriver");<br />

} catch(ClassNotFoundException e){<br />

System.out.println( "Exception: " + e.getMessage() );<br />

e.printStackTrace();<br />

}<br />

Wenn der Treiber deklariert wurde, können Sie sich mit der<br />

JDBC-Standardmethode DriverManager.getConnection mit der Datenbank<br />

verbinden.<br />

Die JDBC-Methode DriverManager.getConnection verfügt über mehrere<br />

Prototypen. Diese haben folgende Argumente:<br />

DriverManager.getConnection( String url, Properties info )<br />

DriverManager.getConnection( String url )<br />

Der <strong>UltraLite</strong>-Treiber unterstützt alle diese Prototypen. Die Argumente<br />

werden in den folgenden Abschnitten besprochen.<br />

Treiber-Manager Die Treiber-Manager-Klasse DriverManager verwaltet eine Liste der<br />

Driver-Klassen, die aktuell geladen sind. Sie fragt die einzelnen Treiber in<br />

der Liste, ob sie die Verbindung zum URL herstellen können. Wenn ein<br />

entsprechender Treiber gefunden wird, versucht der DriverManager, ihn<br />

für die Verbindung mit der Datenbank einzusetzen.<br />

Fehlerbehandlung Wenn keine Verbindung hergestellt werden kann, führen Sie SQLException<br />

wie folgt aus:<br />

JDBC-URLs in <strong>UltraLite</strong><br />

32<br />

try{<br />

Class.forName(<br />

"ianywhere.ultralite.jdbc.JdbcDriver");<br />

Connection conn = DriverManager.getConnection(<br />

"jdbc:ultralite:asademo" );<br />

} catch(SQLException e){<br />

System.out.println( "Exception: " + e.getMessage() );<br />

e.printStackTrace();<br />

}<br />

Der URL ist ein erforderliches Argument für die Methode<br />

DriverManager.getConnection, die für die Verbindung mit<br />

<strong>UltraLite</strong>-Datenbanken verwendet wird.<br />

☞ Einen Überblick über Verbindungsmethoden finden Sie unter “Mit der


Datenbank über JDBC verbinden” auf Seite 32.<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Die Syntax für <strong>UltraLite</strong>-JDBC-URLs lautet wie folgt:<br />

jdbc:ultralite:[database:persist:persistfile][;option=value...]<br />

Alle Komponenten unterscheiden zwischen Klein- und Großschreibung und<br />

haben folgende Bedeutung:<br />

♦ jdbc Kennzeichnet den Treiber als JDBC-Treiber. Die Angabe ist<br />

obligatorisch.<br />

♦ ultralite Kennzeichnet den Treiber als den <strong>UltraLite</strong>-Treiber. Die<br />

Angabe ist obligatorisch.<br />

♦ database Der Klassenname für die Datenbank. Der Name muss<br />

angegeben und vollständig qualifiziert werden. Wenn die<br />

Datenbankklasse in einem Paket enthalten ist, müssen Sie den<br />

Paketnamen ebenfalls angeben.<br />

Beispiel: Der URL jdbc:ultralite:MeinProjekt bewirkt, dass der<br />

Klassenname MeinProjekt geladen wird.<br />

Da eine <strong>Java</strong>-Klasse ihren Namen mit der .java-Datei teilt, in der sie<br />

definiert wird, stimmt diese Komponente mit dem Parameter der<br />

Ausgabedatei des <strong>UltraLite</strong>-Generators überein.<br />

☞ Weitere Hinweise finden Sie unter “Der <strong>UltraLite</strong>-Generator”<br />

[<strong>UltraLite</strong> Datenbankhandbuch, Seite 99].<br />

♦ persist Legt fest, ob die Datenbank beständig oder flüchtig ist.<br />

Standardmäßig ist sie flüchtig (“transient”).<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank<br />

konfigurieren” auf Seite 34.<br />

♦ persistfile Bei beständigen Datenbanken geben Sie hier den<br />

Dateinamen an.<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank<br />

konfigurieren” auf Seite 34. Die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Eigenschaften sind<br />

denen für C/C++-Anwendungen sehr änlich. Ihre Namen unterscheiden<br />

sich nur durch die Abwesenheit von Unterstrichen, außer dass persistfile<br />

analog zu file_name ist. Siehe “UL_STORE_PARMS-Makro” [<strong>UltraLite</strong><br />

C/C++ <strong>Benutzerhandbuch</strong>, Seite 238].<br />

♦ options Die folgenden Optionen sind verfügbar:<br />

• uid Eine Benutzer-ID.<br />

• pwd Ein Kennwort für die Benutzer-ID.<br />

33


Sie können sich alternativ auch anhand eines Eigenschaftsobjekts verbinden.<br />

Die folgenden Eigenschaften können angegeben werden: Jede hat die<br />

gleiche Bedeutung wie in der expliziten obigen URL-Syntax:<br />

♦ database<br />

♦ persist<br />

♦ persistfile<br />

♦ user (Benutzer)<br />

♦ password<br />

Mit einem Properties-Objekt Verbindungsinformationen speichern<br />

Sie können ein Properties-Objekt verwenden, um<br />

Verbindungsinformationen zu speichern, und dieses Objekt zusammen mit<br />

dem URL als Argument für getConnection angeben.<br />

☞ Einen Überblick über Verbindungsmethoden finden Sie unter “Mit der<br />

Datenbank über JDBC verbinden” auf Seite 32.<br />

Eine Beschreibung der folgenden Komponenten des URL finden Sie unter<br />

“JDBC-URLs in <strong>UltraLite</strong>” auf Seite 32. Sie können als Teil des URL oder<br />

als Mitglied eines Properties-Objekts angegeben werden.<br />

♦ persist<br />

♦ persistfile<br />

♦ Die jdbc:ultralite-Komponenten müssen im URL angegeben<br />

werden.<br />

Wenn Sie Ihre Datenbank verschlüsseln wollen, können Sie dazu eine<br />

Schlüssel-Eigenschaft verwenden. Weitere Hinweise finden Sie unter<br />

“<strong>UltraLite</strong>-Datenbanken verschlüsseln” auf Seite 41.<br />

Mit mehreren Datenbanken verbinden<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen können mit mehr als einer Datenbank<br />

eine Verbindung herstellen. Um Verbindungen zu mehreren Datenbanken<br />

herzustellen, erstellen Sie einfach mehrere Verbindungsobjekte.<br />

☞ Weitere Hinweise finden Sie unter “Mit der Datenbank über JDBC<br />

verbinden” auf Seite 32.<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank konfigurieren<br />

34<br />

Sie können die folgenden Aspekte einer <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank<br />

konfigurieren:


Flüchtige und beständige<br />

Datenbanken<br />

Flüchtige Datenbanken<br />

initialisieren<br />

♦ Ob die Datenbank flüchtig oder beständig ist<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

♦ Wenn die Datenbank beständig ist, können Sie einen Dateinamen<br />

angeben.<br />

♦ Wenn die Datenbank flüchtig ist, können Sie einen URL für eine<br />

Initialisierungsdatenbank angeben.<br />

♦ Sie können einen Chiffrierschlüssel festlegen.<br />

Sie können diese Aspekte konfigurieren, indem Sie im Datenbank-URL<br />

spezifische Wert angeben oder bei der Erstellung der Datenbank ein<br />

Eigenschaftsobjekt verwenden. Sie können den Chiffrierschlüssel nicht auf<br />

den URL setzen, sondern müssen ihn in einem Eigenschaftsobjekt<br />

unterbringen.<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong>-Methode<br />

“JdbcDatabase.connect” verwenden” auf Seite 30 und “Mit einem<br />

Properties-Objekt Verbindungsinformationen speichern” auf Seite 34.<br />

Standardmäßig sind <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken flüchtig. Sie werden<br />

initialisiert, wenn das Datenbankobjekt instanziert wird, und verschwinden,<br />

wenn die Anwendung geschlossen wird. Wenn die Anwendung das nächste<br />

Mal gestartet wird, muss sie die Datenbank neu initialisieren.<br />

Sie können <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken beständig machen, indem Sie<br />

sie in einer Datei speichern. Dazu legen Sie die Elemente persist und<br />

persistfile des JDBC-URL fest oder geben die Eigenschaften persist und<br />

persistfile für die Datenbankmethode connect an.<br />

Die Datenbank für die meisten <strong>UltraLite</strong>-Anwendungen wird beim ersten<br />

Synchronisationsaufruf initialisiert. Für <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen,<br />

die eine flüchtige Datenbank verwenden, gibt es eine alternative Methode,<br />

die Datenbank zu initialisieren. Sie geben den URL für eine<br />

<strong>UltraLite</strong>-Datenbank, die als Ausgangsdatenbank verwendet wird, in der<br />

Komponente persistfile des URLs an.<br />

Datenbank konfigurieren Die Komponenten des URL für die Datenbankkonfiguration lauten wie folgt:<br />

♦ persist Diese Komponente kann folgende Werte annehmen:<br />

• none In diesem Fall ist die Datenbank flüchtig. Sie wird im Speicher<br />

gehalten, während die Anwendung läuft, und verschwindet, wenn die<br />

Anwendung beendet wird.<br />

• Datei In diesem Fall wird die Datenbank in einer Datei gespeichert.<br />

Der Standarddatenbankname ist Datenbank.udb, wobei Datenbank der<br />

Name der Datenbankklasse ist.<br />

Die Standardeinstellung ist none.<br />

35


36<br />

♦ persistfile Die Bedeutung dieser Komponente hängt von der<br />

Einstellung von persist ab.<br />

• Wenn die Komponente persist den Wert none hat, ist die Komponente<br />

persistfile ein URL für eine <strong>UltraLite</strong>-Datenbankdatei, mit der die<br />

Datenbank initialisiert wird.<br />

Sowohl das Schema als auch die Daten aus dem URL werden dazu<br />

verwendet, die Anwendungsdatenbank zu initialisieren, doch es gibt<br />

keine weitere Verbindung zwischen den beiden. Alle Änderungen, die<br />

von Ihrer Anwendung durchgeführt werden, gelten nur für die<br />

flüchtige Datenbank und nicht für die Initialisierungsdatenbank.<br />

Beispiel eines JDBC-URL:<br />

jdbc:ultralite:transient:none:http://www.address.com/transient.u<br />

db<br />

Sie können die Initialisierungsdatenbank mit einer Anwendung vorbereiten,<br />

die die beständige Form des URL verwendet, um die Datenbank zu erstellen,<br />

zu synchronisieren und zu beenden.<br />

♦ Wenn die Komponente persist den Wert file hat, ist die Komponente<br />

persistfile ein Dateiname für die beständige <strong>UltraLite</strong>-Datenbank. Der<br />

Dateiname muss alle Erweiterungen (wie z.B. .udb) einbeziehen, die Sie<br />

verwenden wollen.


SQL-Anweisungen in <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong>-Anwendungen einbeziehen<br />

SQL-Anweisungen für<br />

Ihre Anwendung<br />

definieren<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Dieser Abschnitt beschreibt, wie Sie Ihrer <strong>UltraLite</strong>-Anwendung<br />

SQL-Anweisungen hinzufügen.<br />

☞ Weitere Hinweise zu SQL-Funktionen, die in <strong>UltraLite</strong>-Anwendungen<br />

verwendet werden können, finden Sie unter “Überblick der<br />

SQL-Unterstützung in <strong>UltraLite</strong>” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 154].<br />

☞ Sie müssen die SQL-Anweisungen, die in Ihrer Anwendung für die<br />

Referenzdatenbank verwendet werden sollen, zur Referenzdatenbank<br />

hinzufügen. Der <strong>UltraLite</strong>-Generator erstellt eine Schnittstelle, die diese<br />

SQL-Anweisungen als öffentliche statische endgültige Zeichenfolgen<br />

definiert. Sie rufen die Anweisungen in Ihrer Anwendung auf, indem Sie die<br />

Schnittstelle implementieren und die SQL-Anweisung durch ihren<br />

Bezeichner referenzieren oder indem Sie sie direkt von der Schnittstelle aus<br />

referenzieren.<br />

Sie legen die SQL-Anweisungen, die in die <strong>UltraLite</strong>-Anwendung<br />

einbezogen werden sollen, und die Struktur der <strong>UltraLite</strong>-Datenbank selbst<br />

fest, indem Sie die SQL-Anweisungen in die Referenzdatenbank für Ihre<br />

Anwendung einfügen.<br />

☞ Weitere Hinweise zur Referenzdatenbank finden Sie unter<br />

“Referenzdatenbank vorbereiten” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 214].<br />

Projekte festlegen Jede in der Referenzdatenbank gespeicherte SQL-Anweisung ist einem<br />

Projekt zugeordnet. Bei einem Projekt handelt es sich um einen in der<br />

Referenzdatenbank festgelegten Namen, der die SQL-Anweisungen für eine<br />

Anwendung gruppiert. Sie können SQL-Anweisungen für mehrere<br />

Anwendungen in einer Referenzdatenbank speichern, indem Sie mehrere<br />

Projekte definieren.<br />

Dem Projekt<br />

Anweisungen hinzufügen<br />

☞ Weitere Hinweise zum Erstellen von Projekten finden Sie unter<br />

“<strong>UltraLite</strong>-Projekt erstellen” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 219].<br />

Sie müssen Ihrem Projekt die Datenzugriffsanweisungen hinzufügen, die Sie<br />

in Ihrer <strong>UltraLite</strong>-Anwendung verwenden wollen.<br />

☞ Weitere Hinweise zum Hinzufügen von SQL-Anweisungen zu einer<br />

Datenbank finden Sie unter “Einem <strong>UltraLite</strong>-Projekt SQL-Anweisungen<br />

hinzufügen” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 220].<br />

37


Benutzerauthentifizierung zu Ihrer Anwendung<br />

hinzufügen<br />

Benutzerauthentifizierung aktivieren<br />

38<br />

☞ Eine allgemeine Beschreibung der <strong>UltraLite</strong>-Benutzerauthentifizierung<br />

finden Sie unter “Benutzerauthentifizierung in <strong>UltraLite</strong>” [<strong>UltraLite</strong><br />

Datenbankhandbuch, Seite 45].<br />

☞ Wenn Sie eine <strong>UltraLite</strong>-Datenbank mit aktivierter Authentifizierung<br />

erstellen, wird ein authentifizierter Benutzer erstellt, der die ID DBA und das<br />

Kennwort SQL erhält. <strong>UltraLite</strong> erlaubt es, dass bis zu vier Benutzer<br />

gleichzeitig definiert sind, wobei sowohl Benutzer-ID als auch Kennwort<br />

kürzer als 16 Zeichen sein müssen. Jeder Benutzer hat vollen Zugriff auf die<br />

Datenbank, wenn er erfolgreich authentifiziert wurde.<br />

☞ Die Berücksichtigung der Groß- und Kleinschreibung der <strong>UltraLite</strong><br />

Benutzer-ID und des Kennworts wird durch die Referenzdatenbank<br />

bestimmt. Wenn die Referenzdatenbank die Groß- und Kleinschreibung<br />

berücksichtigt (Standard), berücksichtigt auch die <strong>UltraLite</strong>-Datenbank die<br />

Groß- und Kleinschreibung, einschließlich der Benutzerauthentifizierung.<br />

Zum Aktivieren der Benutzerauthentifizierung muss die Anwendung bei der<br />

Verbindung zur <strong>UltraLite</strong>-Datenbank eine gültige <strong>UltraLite</strong> Benutzer-ID und<br />

ein Kennwort liefern. Wenn Sie die Benutzerauthentifizierung nicht<br />

ausdrücklich aktivieren, authentifiziert <strong>UltraLite</strong> die Benutzer nicht.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

❖ So aktivieren Sie die Benutzerauthentifizierung<br />

1. Rufen Sie die Methode JdbcSupport.enableUserAuthentication auf,<br />

bevor Sie ein neues Datenbankobjekt erstellen: Zum Beispiel:<br />

JdbcSupport.enableUserAuthentication();<br />

java.util.Properties p = new java.util.Properties();<br />

p.put( "persist", "file" );<br />

SampleDB db = new SampleDB( p );<br />

☞ Sobald Sie die Benutzerauthentifizierung aktiviert haben, müssen Sie<br />

Ihrer Anwendung Code für die Benutzerverwaltung hinzufügen. Weitere<br />

Hinweise finden Sie unter “Benutzer-IDs und Kennwörter verwalten” auf<br />

Seite 39.<br />

Benutzer-IDs und Kennwörter verwalten<br />

Beispiel für eine Benutzerauthentifizierung<br />

Das folgende Codefragment führt Benutzerverwaltung und<br />

-authentifizierung für eine <strong>UltraLite</strong> <strong>Java</strong>-Anwendung durch.<br />

Ein komplettes Beispiel finden Sie im Unterverzeichnis<br />

Samples\<strong>UltraLite</strong>\javaauth des SQL Anywhere-Verzeichnisses. Das<br />

Codebeispiel basiert auf dem Programmcode in<br />

Samples\<strong>UltraLite</strong>\javaauth\Sample.java.<br />

39


40<br />

JdbcSupport.enableUserAuthentication();<br />

// Create database environment<br />

java.util.Properties p = new java.util.Properties();<br />

p.put( "persist", "file" );<br />

SampleDB db = new SampleDB( p );<br />

// Get new user ID and password<br />

try{<br />

conn = db.connect( "dba", "sql" );<br />

// Set user ID and password<br />

// a real application would prompt the user.<br />

uid = "50";<br />

pwd = "pwd50";<br />

db.grant( uid, pwd );<br />

db.revoke( "dba" );<br />

conn.close();<br />

}<br />

catch( SQLException e ){<br />

// dba connection failed - prompt for user ID and password<br />

uid = "50";<br />

pwd = "pwd50";<br />

}<br />

// Connect<br />

conn = db.connect( uid, pwd );<br />

Der Code führt die folgenden Aufgaben aus:<br />

1. Er öffnet das Datenbankobjekt.<br />

2. Er versucht, mit der Standardbenutzer-ID und dem Standardkennwort<br />

eine Verbindung herzustellen.<br />

3. Er fügt einen neuen Benutzer hinzu, wenn der Verbindungsversuch<br />

erfolgreich ist.<br />

4. Er löscht den Standardbenutzer aus der <strong>UltraLite</strong>-Datenbank.<br />

5. Er trennt die Verbindung. Nun werden der Datenbank eine aktualisierte<br />

Benutzer-ID und ein aktualisiertes Kennwort hinzugefügt.<br />

6. Mit der aktualisierten Benutzer-ID und dem aktualisierten Kennwort wird<br />

eine Verbindung hergestellt.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Datenbankspeicher konfigurieren und verwalten<br />

Sie können die folgenden Aspekte einer beständigen Speicherung in<br />

<strong>UltraLite</strong> konfigurieren:<br />

♦ Die Speichermenge, die von der <strong>UltraLite</strong>-Datenbankengine als<br />

Cachespeicher verwendet wird<br />

♦ Datenbankverschlüsselung<br />

♦ Vorabzuweisung von Dateisystemspeicher<br />

♦ Dateiname der Datenbank<br />

♦ Datenbank-Seitengröße<br />

<strong>UltraLite</strong>-Datenbanken verschlüsseln<br />

Standardmäßig befinden sich <strong>UltraLite</strong>-Datenbanken unverschlüsselt auf der<br />

Festplatte und im beständigen Speicher. Text- und Binärspalten können<br />

normal gelesen werden, wenn Sie ein Ansichtstool, wie z.B. einen<br />

Hex-Editor, verwenden. Um größere Sicherheit zu bieten, werden zwei<br />

Optionen bereitgestellt:<br />

♦ Verschleierung Das Verschleiern von Datenbanken bietet Sicherheit<br />

vor einfachen Versuchen, Daten in der Datenbank direkt mithilfe eines<br />

Ansichtstools einzusehen. Dies ist kein Schutz vor geschickten und<br />

zielgerichteten Versuchen, Zugriff auf die Daten zu erhalten. Die<br />

Verschleierung hat geringe oder gar keine Auswirkungen auf die<br />

Performance.<br />

☞ Weitere Hinweise finden Sie unter “Eine <strong>UltraLite</strong>-Datenbank<br />

verschleiern” auf Seite 42.<br />

♦ Starke Verschlüsselung <strong>UltraLite</strong>-Datenbankdateien können mit dem<br />

AES 128-Bit-Algorithmus stark verschlüsselt werden, demselben<br />

Algorithmus, mit dem Adaptive Server Anywhere-Datenbanken<br />

verschlüsselt werden. Die Verwendung der starken Verschlüsselung bietet<br />

Sicherheit vor geschickten und zielgerichteten Versuchen, Zugriff auf die<br />

Daten zu gewinnen, doch sie hat deutliche Auswirkungen auf die<br />

Performance.<br />

Achtung<br />

Wenn der Chiffrierschlüssel für eine stark verschlüsselte Datenbank<br />

verloren geht oder vergessen wird, gibt es keine Möglichkeit, auf die<br />

Datenbank zuzugreifen. In diesem Fall kann auch der technische Kundendienst<br />

nicht mehr auf die Datenbank zugreifen. Sie muss verworfen<br />

und eine neue Datenbank muss erstellt werden.<br />

41


Eine <strong>UltraLite</strong>-Datenbank verschleiern<br />

<strong>UltraLite</strong>-Datenbanken verschlüsseln<br />

42<br />

☞ Weitere Hinweise finden Sie unter “<strong>UltraLite</strong>-Datenbanken<br />

verschlüsseln” auf Seite 42 und “Chiffrierschlüssel einer Datenbank<br />

ändern” auf Seite 43.<br />

❖ So verschleiern Sie eine <strong>UltraLite</strong>-Datenbank<br />

1. Fügen Sie Ihrem Code folgende Zeile hinzu, bevor Sie die Datenbank<br />

erstellen (d.h. bevor Sie sich erstmals mit der Datenbank verbinden):<br />

UlDatabase.setDefaultObfuscation( true );<br />

<strong>UltraLite</strong>-Datenbanken werden beim ersten Verbindungsversuch erstellt. Um<br />

eine <strong>UltraLite</strong>-Datenbank zu verschlüsseln, stellen Sie vor diesem<br />

Verbindungsversuch einen Chiffrierschlüssel bereit. Beim ersten Versuch<br />

wird der bereitgestellte Schlüssel verwendet, um die Datenbank zu<br />

verschlüsseln. Bei nachfolgenden Versuchen wird der bereitgestellte<br />

Schlüssel mit dem Chiffrierschlüssel verglichen und die Verbindung schlägt<br />

fehl, wenn die Schlüssel nicht übereinstimmen.<br />

❖ So verschlüsseln Sie eine <strong>UltraLite</strong>-Datenbank stark<br />

1. Legen Sie die mit “key” benannte Eigenschaft fest, bevor Sie ein erstes<br />

Datenbankobjekt erstellen.<br />

Mit dem folgenden Code wird der Chiffrierschlüssel aus der Befehlszeile<br />

ausgelesen.<br />

InputStreamReader isr = new InputStreamReader( System.in );<br />

BufferedReader br = new BufferedReader( isr );<br />

String key = null ;<br />

System.out.print( "Enter encryption key:" );<br />

key = br.readLine() ;<br />

System.out.println( "The key is: " + key );<br />

// Connect to the database<br />

java.util.Properties p = new java.util.Properties();<br />

p.setProperty( "persist", "file" );<br />

p.setProperty( "key", key );<br />

SampleDB db = new SampleDB( p );<br />

Hier ist “SampleDB” der Datenbankdateiname, so wie er in der<br />

Befehlszeilenoption -f des <strong>UltraLite</strong>-Generators angegeben wurde.<br />

☞ Weitere Hinweise finden Sie unter “Der <strong>UltraLite</strong>-Generator”<br />

[<strong>UltraLite</strong> Datenbankhandbuch, Seite 99] und “Mit einem Properties-Objekt<br />

Verbindungsinformationen speichern” auf Seite 34.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

2. Erstellen Sie das Datenbankobjekt mit den Eigenschaften.<br />

Zum Beispiel:<br />

Chiffrierschlüssel einer Datenbank ändern<br />

Connection conn = db.connect();<br />

Nach dem ersten Verbindungsversuch führen nachfolgende Versuche, mit<br />

einem falschen Schlüssel auf die Datenbank zuzugreifen, zur<br />

SQLException Fehlerhafter oder fehlender<br />

Chiffrierschlüssel.<br />

Im Verzeichnis \Samples\<strong>UltraLite</strong>\<strong>Java</strong>Security finden Sie eine<br />

<strong>Java</strong>-Beispielanwendung mit Verschlüsselung. Der Verschlüsselungscode<br />

befindet sich in \Samples\<strong>UltraLite</strong>\<strong>Java</strong>Security\Sample.java.<br />

Im Folgenden sehen Sie einen Codeausschnitt aus dem Beispiel:<br />

// Obtain the encryption key<br />

InputStreamReader isr = new InputStreamReader( System.in );<br />

BufferedReader br = new BufferedReader( isr );<br />

String key = null ;<br />

System.out.print( "Enter encryption key:" );<br />

key = br.readLine() ;<br />

System.out.println( "The key is: " + key );<br />

java.util.Properties p = new java.util.Properties();<br />

p.setProperty( "persist", "file" );<br />

p.setProperty( "key", key );<br />

SampleDB db = new SampleDB( p );<br />

Connection conn = db.connect();<br />

Sie können den Chiffrierschlüssel einer Datenbank ändern. Die Anwendung<br />

muss bereits mit dem alten Chiffrierschlüssel mit der Datenbank verbunden<br />

sein, bevor diese Änderung durchgeführt wird.<br />

Achtung<br />

Wenn der Schlüssel geändert wird, wird jede Zeile in der Datenbank<br />

mit dem alten Schlüssel entschlüsselt und mit dem neuen Schlüssel neu<br />

verschlüsselt. Dieser Vorgang kann nicht rückgängig gemacht werden.<br />

Wenn die Anwendung während des Vorgangs unterbrochen wird, ist die<br />

Datenbank beschädigt und es kann nicht mehr auf sie zugegriffen werden.<br />

Es muss nun eine neue Datenbank erstellt werden.<br />

❖ So ändern Sie die Verschlüsselung für eine <strong>UltraLite</strong>-Datenbank<br />

1. Rufen Sie die Funktion changeEncryptionKey für das Datenbankobjekt<br />

auf und geben Sie den neuen Schlüssel als Argument an.<br />

db.changeEncryptionKey( "new key" );<br />

43


<strong>UltraLite</strong>-Datenbanken defragmentieren<br />

44<br />

☞ Weitere Hinweise finden Sie unter “changeEncryptionKey-Methode”<br />

auf Seite 69.<br />

Der <strong>UltraLite</strong>-Speicher ist so angelegt, dass er freien Speicherplatz effizient<br />

wiederverwendet, sodass unter normalen Umständen keine explizite<br />

Defragmentierung erforderlich ist. Dieser Abschnitt beschreibt ein<br />

Verfahren, mit dem <strong>UltraLite</strong>-Datenbanken explizit defragmentiert werden<br />

können, um sie für Anwendungen mit besonders strengen<br />

Speicherplatzanforderungen zu verwenden.<br />

<strong>UltraLite</strong> verfügt über eine schrittweise Defragmentierungsfunktion, die<br />

einen kleinen Teil der Datenbank defragmentiert. Um die gesamte<br />

Datenbank gleichzeitig zu defragmentieren, rufen Sie die schrittweise<br />

Defragmentierungsfunktion in einer Schleife auf, bis sie ul_true zurückgibt.<br />

Dies kann ein kostenträchtiger Vorgang sein. SQLCODE muss überprüft<br />

werden, um mögliche Fehler festzustellen (ein Fehler hier weist gewöhnlich<br />

auf einen Datei-I/O-Fehler hin).<br />

Die explizite Defragmentierung wird während der Leerlaufzeit schrittweise<br />

und unter der Steuerung der Anwendung ausgeführt. Jeder Schritt ist ein<br />

kleiner Vorgang.<br />

☞ Weitere Hinweise finden Sie unter “JdbcDefragIterator-Klasse” auf<br />

Seite 71.<br />

❖ So defragmentieren Sie eine <strong>UltraLite</strong>-Datenbank<br />

1. Verwandeln Sie eine Verbindung (Connection) in ein<br />

JdbcConnection-Objekt. Beispiel:<br />

...<br />

Connection conn = db.connect();<br />

JdbcConnection jconn = (JdbcConnection)conn ;<br />

<strong>UltraLite</strong> verfügt über eine schrittweise Defragmentierungsfunktion, die<br />

einen kleinen Teil der Datenbank defragmentiert. Um die gesamte<br />

Datenbank gleichzeitig zu defragmentieren, rufen Sie die schrittweise<br />

Defragmentierungsfunktion in einer Schleife auf, bis sie ul_true<br />

zurückgibt. Dies kann ein kostenträchtiger Vorgang sein. SQLCODE<br />

muss überprüft werden, um mögliche Fehler festzustellen (ein Fehler hier<br />

weist gewöhnlich auf einen Datei-I/O-Fehler hin).<br />

2. Rufen Sie getDefragIterator() auf, um ein JdbcDefragIterator-Objekt<br />

zu erhalten. Beispiel:<br />

JdbcDefragIterator defrag = jconn.getDefragIterator();


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

3. Während der Leerlaufzeit rufen Sie ulStoreDefragStep() auf, um einen<br />

Teil der Datenbank zu defragmentieren.<br />

defrag.ulStoreDefragStep();<br />

45


Anwendungen eine Synchronisationsfunktion<br />

hinzufügen<br />

Bei der Synchronisation handelt es sich um eine der wichtigsten Funktionen<br />

vieler <strong>UltraLite</strong>-Anwendungen. Dieser Abschnitt beschreibt, wie Sie Ihrer<br />

Anwendung eine Synchronisationsfunktion hinzufügen.<br />

Die Synchronisationslogik, die <strong>UltraLite</strong>-Anwendungen mit der<br />

konsolidierten Datenbank abstimmt, ist nicht in der Anwendung selbst<br />

gespeichert. Synchronisationsskripten in der konsolidierten Datenbank<br />

steuern zusammen mit dem MobiLink-Synchronisationsserver und der<br />

<strong>UltraLite</strong>-Laufzeitbibliothek, wie Änderungen beim Senden verarbeitet<br />

werden und welche Änderungen eingelesen werden.<br />

Überblick Die Details der einzelnen Synchronisationen werden von einer Reihe von<br />

Synchronisationsparametern gesteuert. Diese Parameter werden in einem<br />

Objekt zusammengefasst, das als Argument im Aufruf einer<br />

Synchronisationsfunktion bereitgestellt wird. Die Methode ist bei allen<br />

Entwicklungsmodellen gleich.<br />

Synchronisationsparameter<br />

46<br />

❖ So fügen Sie Ihrer Anwendung die Synchronisationsfunktion hinzu<br />

1. Initialisieren Sie das Objekt, das die Synchronisationsparameter enthält.<br />

☞ Weitere Hinweise finden Sie unter “Synchronisationsparameter<br />

initialisieren” auf Seite 47.<br />

2. Weisen Sie die Parameterwerte für Ihre Anwendung zu.<br />

☞ Hinweise dazu finden Sie unter “Netzwerkprotokolloptionen für<br />

<strong>UltraLite</strong>-Synchronisationsclients” [MobiLink Clients, Seite 371].<br />

3. Rufen Sie die Synchronisationsfunktion auf und geben Sie die Struktur<br />

bzw. das Objekt als Argument an.<br />

☞ Weitere Hinweise finden Sie unter “Synchronisation aufrufen” auf<br />

Seite 48.<br />

Sie müssen sicherstellen, dass keine noch nicht festgeschriebenen<br />

Änderungen vorhanden sind, wenn Sie synchronisieren. Weitere Hinweise<br />

finden Sie unter “Alle Änderungen vor der Synchronisation festschreiben”<br />

auf Seite 50.<br />

Die Einzelheiten der Synchronisation werden durch eine Reihe von<br />

Synchronisationsparametern gesteuert. Weitere Hinweise zu diesen<br />

Parametern finden Sie unter “Netzwerkprotokolloptionen für<br />

<strong>UltraLite</strong>-Synchronisationsclients” [MobiLink Clients, Seite 371].


Synchronisationsparameter initialisieren<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Die Synchronisationsparameter werden in einem <strong>Java</strong>-Objekt gespeichert.<br />

Die Details einer Synchronisation, einschließlich des URLs und des<br />

MobiLink-Synchronisationsservers, der zu verwendenden Skriptversion, des<br />

MobiLink-Benutzernamens usw., werden in einem UlSynchOptions-Objekt<br />

gespeichert.<br />

☞ Eine komplette Liste der Synchronisationsparameter finden Sie unter<br />

“Synchronisationsparameter” auf Seite 74.<br />

❖ So initialisieren Sie die Synchronisationsparameter<br />

1. Erstellen Sie ein UlSynchOptions-Objekt. Zum Beispiel:<br />

UlSynchOptions opts = new UlSynchOptions();<br />

2. Definieren Sie die erforderlichen Parameter.<br />

Synchronisationsparameter festlegen<br />

Das Objekt UlSynchOptions() verfügt über eine Gruppe von Methoden<br />

zum Festsetzen und Abfragen von Feldern: Eine Liste finden Sie unter<br />

“Synchronisationsparameter” [MobiLink Clients, Seite 344]. Verwenden Sie<br />

diese Methoden, um die erforderlichen Synchronisationsparameter vor<br />

der Synchronisation festzulegen. Zum Beispiel:<br />

opts.setUserName( "50" );<br />

opts.setScriptVersion( "default" );<br />

opts.setStream( new UlSocketStream() );<br />

Die Synchronisationsdatenströme für <strong>UltraLite</strong>-<strong>Java</strong>-Anwendungen sind<br />

Objekte und werden von ihren Konstruktoren festgesetzt. Folgende<br />

Datenströme sind verfügbar:<br />

♦ UlSocketStream TCP/IP-Synchronisation<br />

♦ UlSecureSocketStream TCP/IP-Synchronisation mit Certicom<br />

Ellipsenkurven-Transportschichtsicherheit.<br />

♦ UlSecureRSASocketStream TCP/IP-Synchronisation mit Certicom<br />

RSA-Transportschichtsicherheit.<br />

♦ UlHTTPStream HTTP-Synchronisation.<br />

♦ UlHTTPSStream HTTPS-Synchronisation.<br />

47


Synchronisation aufrufen<br />

48<br />

Folgende Zeile setzt den Datenstrom auf TCP/IP:<br />

synch_opts.setStream( new UlSocketStream() );<br />

☞ Weitere Hinweise finden Sie unter “Synchronisationsparameter”<br />

[MobiLink Clients, Seite 344].<br />

Getrennt lizenzierbare Option erforderlich<br />

Die Nutzung von UlHTTPSStream, UlSecureSocketStream und UlSecureRSASocketStream<br />

erfordert die Certicom-Technologie, die wiederum<br />

voraussetzt, dass Sie die getrennt lizenzierbare SQL Anywhere Studio-<br />

Sicherheitsoption erwerben, und ist außerdem Exportbeschränkungen unterworfen.<br />

Weitere Hinweise zu dieser Option finden Sie unter “Willkommen<br />

bei SQL Anywhere Studio” [SQL Anywhere Studio Erste Orientierung,<br />

Seite 4].<br />

☞ Weitere Hinweise zu den einzelnen Parametern finden Sie unter<br />

“Netzwerkprotokolloptionen für <strong>UltraLite</strong>-Synchronisationsclients”<br />

[MobiLink Clients, Seite 371].<br />

Wenn Sie die Synchronisationsparameter initialisiert haben und sie auf die<br />

für Ihre Anwendung zutreffenden Werte setzen, können Sie die<br />

Synchronisation mithilfe der Methode JdbcConnection.synchronize()<br />

einleiten.<br />

Die Methode hat das Objekt UlSynchOptions als Argument. Die Aufrufe<br />

für die Synchronisation lauten wie folgt:<br />

UlSynchOptions opts = new UlSynchOptions();<br />

opts.setUserName( "50" );<br />

opts.setScriptVersion( "default" );<br />

opts.setStream( new UlSocketStream() );<br />

opts.setStreamParms( "host=123.45.678.90" );<br />

conn.synchronize( opts );<br />

Wie die Synchronisation im Einzelnen aufgerufen wird, hängt von der<br />

Zielplattform und vom Synchronisationsdatenstrom ab.<br />

Der Synchronisationsprozess kann nur korrekt ablaufen, wenn das Gerät, auf<br />

dem die <strong>UltraLite</strong>-Anwendung ausgeführt wird, mit dem<br />

Synchronisationsserver kommunizieren kann. Auf einigen Plattformen<br />

bedeutet das, dass Sie das Gerät physisch verbinden müssen, indem Sie es in<br />

seine Dockingstation setzen oder mit einem Kabel an einen Server<br />

anschließen. Sie müssen in Ihrer Anwendung für den Fall, dass die<br />

Synchronisation nicht ausgeführt werden kann, einen


Fehlerbehandlungscode einfügen.<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

❖ So rufen Sie die Synchronisation auf (TCP/IP-, HTTP- oder<br />

HTTPS-Datenströme)<br />

1. Konstruieren Sie ein neues ULSynchInfo-Objekt, um die<br />

Synchronisationsparameter zu initialisieren, und<br />

JdbcConnection.synchronize(), um zu synchronisieren. Siehe<br />

“Anwendungen eine Synchronisationsfunktion hinzufügen” auf Seite 46.<br />

Der Synchronisationsaufruf setzt eine Struktur voraus, die eine Gruppe von<br />

Parametern enthalten kann, die die Details der Synchronisation beschreiben.<br />

Die einzelnen Parameter sind vom jeweiligen Datenstrom abhängig.<br />

Transportschichtsicherheit verwenden<br />

Um zusätzliche Sicherheit während der Synchronisation zu erhalten, können<br />

Sie die Verschlüsselungsnachrichten der Transportschichtsicherheit nutzen,<br />

wenn sie zwischen der <strong>UltraLite</strong>-Anwendung und der konsolidierten<br />

Datenbank ausgetauscht werden.<br />

☞ Weitere Hinweise zur Verschlüsselungstechnik finden Sie unter<br />

“MobiLink-Transportschichtsicherheit” [MobiLink Administrationshandbuch,<br />

Seite 183].<br />

☞ Die Transportschichtsicherheit von <strong>UltraLite</strong>-<strong>Java</strong>-Clientanwendungen<br />

verwendet einen separaten Synchronisationsdatenstrom. Sie müssen Ihren<br />

MobiLink-Synchronisationsserver ebenso wie Ihren <strong>UltraLite</strong>-Client<br />

einrichten, um diesen Synchronisationsdatenstrom zu verwenden.<br />

Clientänderungen ☞ Auf dem Client wählen Sie den Synchronisationsdatenstrom<br />

UlSecureSocketStream oder UlSecureRSASocketStream und geben eine<br />

Gruppe von Datenstromparametern an. Die Datenstromparameter umfassen<br />

Parameter, die die Sicherheit steuern.<br />

Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions opts = new UlSynchOptions();<br />

opts.setStream(new UlSecureSocketStream() );<br />

opts.setStreamParms( "host=myserver;"<br />

+ "port=2439;"<br />

+ "certificate_company=<strong>Sybase</strong> Inc.;"<br />

+ "certificate_unit="MEC;"<br />

+ "certificate_name=Mobilink");<br />

// set other options here<br />

conn.synchronize( opts );<br />

☞ Weitere Hinweise zu den Datenstromparametern finden Sie unter<br />

“UlSecureSocketStream-Synchronisationsparameter” [MobiLink Clients,<br />

49


MobiLink-Server<br />

einrichten<br />

Seite 380].<br />

Da die sicheren Synchronisationsdatenströme für <strong>Java</strong>-Anwendungen<br />

separate Datenströme sind, müssen Sie sicherstellen, dass der<br />

MobiLink-Synchronisationsserver sie erkennt. Um dies zu erreichen,<br />

müssen Sie die Synchronisationsdatenströme java_certicom_tls oder<br />

java_rsa_tls angeben, je nach der Wahl des Clients.<br />

Folgende Befehlszeile ist ein Beispiel hierfür:<br />

dbmlsrv9 -x java_certicom_<br />

tls(certificate=mycertificate.crt;port=1234)<br />

Die Sicherheitsparameter für die java_certicom_tls- und<br />

java_rsa_tls-Datenströme lauten wie folgt:<br />

♦ certificate Der Name der Zertifikatsdatei, die die Serveridentität<br />

enthält. Die Datei muss neben dem Zertifikat des Servers die Zertifikate<br />

aller Zetrifikatsautoritäten in der Zertifikatssignaturkette und den privaten<br />

Schlüssel des Servers enthalten.<br />

Der Zertifikatsparameter ist standardmäßig sample.crt für<br />

java_certicom_tls und rsaserver.crt für java_rsa_tls, welche die<br />

Standardidentität für MobiLink ist. Diese Dateien sind mit<br />

SQL Anywhere Studio in demselben Verzeichnis wie der<br />

MobiLink-Server verfügbar.<br />

♦ certificate_password Das Kennwort, das für die Verschlüsselung des<br />

privaten Schlüssels in der Zertifikatsdatei verwendet wird.<br />

Der Standardwert ist das Kennwort für den privaten Schlüssel in<br />

sample.crt und rsaserver.crt, und zwar ist es test.<br />

Alle Änderungen vor der Synchronisation festschreiben<br />

Eine <strong>UltraLite</strong>-Datenbank darf keine noch nicht festgeschriebenen<br />

Änderungen enthalten, wenn sie synchronisiert wird. Wenn Sie versuchen,<br />

eine <strong>UltraLite</strong>-Datenbank zu synchronisieren, wenn eine Verbindung eine<br />

noch nicht festgeschriebene Transaktion enthält, schlägt die Synchronisation<br />

fehl. Außerdem wird eine Ausnahmebedingung erzeugt und der Fehler<br />

SQLE_UNCOMMITTED_TRANSACTIONS protokolliert. Dieser<br />

Fehlercode erscheint im MobiLink-Serverlog für die Synchronisation.<br />

☞ Hinweise zur Synchronisation mit reinem Download finden Sie unter<br />

“Synchronisationsparameter “Download only”” [MobiLink Clients, Seite 348].<br />

Ausgangsdaten in die Anwendung einfügen<br />

50<br />

Viele <strong>UltraLite</strong>-Anwendungen benötigen Daten, um damit arbeiten zu


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

können. Sie können Daten in Ihre Anwendung einlesen, indem Sie sie<br />

synchronisieren. Sie sollten in Ihre Anwendung eine entsprechende Logik<br />

aufnehmen, um sicherzustellen, dass bei ihrem ersten Aufruf und vor allen<br />

anderen Aktionen alle erforderlichen Daten eingelesen werden.<br />

Entwicklungstipp<br />

Es ist einfacher, Fehler zu finden, wenn Sie eine Anwendung in verschiedenen<br />

Stufen entwickeln. Bei der Entwicklung eines Prototyps sollten Sie<br />

vorübergehend INSERT-Anweisungen in Ihre Anwendung einfügen, um<br />

Daten für Test- und Vorführzwecke bereitzustellen. Wenn Ihr Prototyp<br />

einwandfrei arbeitet, aktivieren Sie die Synchronisation und entfernen die<br />

temporären INSERT-Anweisungen.<br />

Erweiterte Hinweise zur Entwicklung von Synchronisationen finden Sie<br />

unter “Entwicklungstipps” [MobiLink Administrationshandbuch, Seite 51].<br />

Synchronisation überwachen und abbrechen<br />

Synchronisation<br />

überwachen<br />

Dieser Abschnitt beschreibt, wie Sie die Synchronisation von<br />

<strong>UltraLite</strong>-Anwendungen aus überwachen und abbrechen können.<br />

♦ Eine API-Schnittstelle zur Überwachung des Synchronisationsfortschritts<br />

und zum Abbruch der Synchronisation.<br />

♦ Eine Komponente zur Anzeige des Fortschritts, die die Schnittstelle<br />

implementiert und die Sie zu Ihrer Anwendung hinzufügen können.<br />

Um die Synchronisation zu überwachen, schreiben Sie eine Klasse, die die<br />

UlSynchObserver-Schnittstelle implementiert. Diese Schnittstelle enthält<br />

eine einzige Methode:<br />

void updateSynchronizationStatus( UlSynchStatus status )<br />

♦ Registrieren Sie Ihr UlSynchObserver-Objekt mithilfe der<br />

UlSynchOptions-Klasse.<br />

♦ Rufen Sie die Methode synchronize() auf, um zu synchronisieren.<br />

♦ <strong>UltraLite</strong> ruft die Methode updateSynchronizationStatus Ihrer<br />

Beobachtungsklasse auf, wenn sich der Synchronisationsstatus ändert. Im<br />

folgenden Abschnitt wird der Synchronisationsstatus beschrieben.<br />

Nachstehend wird eine typische Sequenz von Anweisungen zur<br />

Synchronisation gezeigt. In diesem Beispiel implementiert die Klasse<br />

MyObserver die UlSynchObserver-Schnittstelle:<br />

51


UlSynchObserver observer = new MyObserver ();<br />

UlSynchOptions opts = new UlSynchOptions();<br />

// set options<br />

opts.setUserName( "mluser" );<br />

opts.setPassword( "mlpwd" );<br />

opts.setStream( new UlSocketStream() );<br />

opts.setStreamParms( "localhost" );<br />

opts.setObserver( observer );<br />

opts.setUserData( myDataObject );<br />

// synchronize<br />

conn.synchronize( opts );<br />

Informationen über den Synchronisationsstatus verarbeiten<br />

52<br />

In der Klasse, die UlSynchObserver implementiert, enthält das<br />

UlSynchStatus-Objekt Informationen zum Synchronisationsstatus. Dieses<br />

Objekt wird von <strong>UltraLite</strong> jedesmal mit Informationen über den<br />

Synchronisationsstatus gefüllt, wenn die Methode<br />

updateSynchronizationStatus aufgerufen wird.<br />

Das Objekt UlSynchStatus enthält folgende Methoden:<br />

int getState()<br />

int getTableCount()<br />

int getTableIndex()<br />

Object getUserData()<br />

UlSynchOptions getSynchOptions()<br />

UlSqlStmt getStatement()<br />

int getErrorCode()<br />

boolean isOKToContinue()<br />

void cancelSynchronization()<br />

♦ getState Einer der folgenden Statuswerte:<br />

• STARTING Es wurden noch keine Synchronisationsaktionen<br />

unternommen.<br />

• CONNECTING Der Synchronisationsdatenstrom wurde erstellt, aber<br />

noch nicht geöffnet.<br />

• SENDING_HEADER Der Synchronisationsdatenstrom wurde<br />

geöffnet und der Header wird demnächst gesendet.<br />

• SENDING_TABLE Es wird gerade eine Tabelle gesendet.<br />

• SENDING_DATA Schemainformationen oder Daten werden<br />

gesendet.<br />

• FINISHING_UPLOAD Die Upload-Phase ist beendet und eine<br />

Festschreibung wird ausgeführt.<br />

• RECEIVING_UPLOAD_ACK Es wird gerade eine Bestätigung<br />

darüber empfangen, dass der Sendevorgang abgeschlossen wurde.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

• RECEIVING_TABLE Es wird gerade eine Tabelle empfangen.<br />

• SENDING_DATA Schemainformationen oder Daten werden<br />

empfangen.<br />

• COMMITTING_DOWNLOAD Die Download-Phase ist beendet und<br />

eine Festschreibung wird ausgeführt.<br />

• SENDING_DOWNLOAD_ACK Es wird gerade eine Bestätigung<br />

gesendet, dass der Empfangsvorgang abgeschlossen wurde.<br />

• DISCONNECTING Der Synchronisationsdatenstrom wird demnächst<br />

geschlossen.<br />

• DONE Die Synchronisation wurde erfolgreich abgeschlossen.<br />

• ERROR Die Synchronisation wurde abgeschlossen, jedoch mit<br />

einem Fehler.<br />

☞ Eine Beschreibung des Synchronisationsprozesses finden Sie unter<br />

“Der Synchronisationsprozess” [MobiLink Administrationshandbuch,<br />

Seite 15].<br />

♦ getTableCount Gibt die Anzahl der Tabellen an, die synchronisiert<br />

werden. Für jede Tabelle gibt es eine Sende- und Empfangsphase, daher<br />

kann diese Zahl höher sein als die Anzahl der synchronisierten Tabellen.<br />

♦ getTableIndex Die Tabelle, für die gerade ein Upload oder Download<br />

läuft, beginnend bei 0. Diese Zahl kann Werte überspringen, wenn nicht<br />

alle Tabellen synchronisiert werden.<br />

♦ getSynchOptions Gibt das UlSynchOptions-Objekt zurück<br />

♦ sent.inserts Die Anzahl der bisher eingefügten heraufgeladenen<br />

Zeilen.<br />

♦ sent.updates Die Anzahl der bisher aktualisierten heraufgeladenen<br />

Zeilen.<br />

♦ sent.deletes Die Anzahl der bisher gelöschten heraufgeladenen Zeilen.<br />

♦ sent.bytes Die Anzahl der Byte, die bisher heraufgeladen wurden.<br />

♦ received.inserts Die Anzahl der bisher eingefügten heruntergeladenen<br />

Zeilen.<br />

♦ received.updates Die Anzahl der bisher aktualisierten<br />

heruntergeladenen Zeilen.<br />

♦ received.deletes Die Anzahl der bis dahin gelöschten<br />

heruntergeladenen Zeilen.<br />

53


♦ received.bytes Die Anzahl der Bytes, die bisher heruntergeladen<br />

wurden.<br />

♦ cancelSynchronization Setzen Sie dieses Mitglied auf TRUE, um die<br />

Synchronisation zu unterbrechen. Die SQL-Ausnahmebedingung<br />

SQLE_INTERRUPTED wird gesetzt, und die Synchronisation wird<br />

gestoppt, als ob ein Kommunikationsfehler aufgetreten wäre. Der<br />

Beobachter wird immer entweder mit dem Zustand DONE oder ERROR<br />

aufgerufen, sodass er richtig aufräumen kann.<br />

♦ getUserData Gibt das Benutzerdatenobjekt zurück<br />

♦ getStatement Gibt die Anweisung zurück, die die Synchronisation<br />

aufgerufen hat. Die Anweisung ist eine interne <strong>UltraLite</strong>-Anweisung, und<br />

es ist unwahrscheinlich, dass diese Methode von praktischem Nutzen ist.<br />

Sie wurde nur der Vollständigkeit halber eingeschlossen.<br />

♦ getErrorCode Wenn der Synchronisationstatus auf ERROR gesetzt ist,<br />

gibt diese Methode einen Diagnosefehlercode zurück.<br />

♦ isOKToContinue Wird auf false gesetzt, wenn cancelSynchronization<br />

aufgerufen ist. Andernfalls erscheint true.<br />

Beispiel Der folgende Codeausschnitt zeigt eine sehr einfache Beobachtungsfunktion:<br />

void updateSynchronizationStatus( UlSynchStatus status )<br />

{<br />

int state = status.getState();<br />

System.out.println( "Sync status: " + state );<br />

if( state == UlSynchStatus.SENDING_TABLE ||<br />

state == UlSynchStatus.RECEIVING_TABLE ){<br />

System.out.println( "send/receive table " +<br />

( status.getTableIndex() + 1 ) +<br />

" of " + status.getTableCount() );<br />

}<br />

}<br />

CustDB-Beispiel Die Beispielanwendung “CustDB” enthält ein Beispiel einer<br />

Beobachtungsfunktion. Die Implementierung in “CustDB” umfasst ein<br />

Dialogfeld, das den Verarbeitungsfortschritt der Synchronisation anzeigt und<br />

dem Benutzer gestattet, die Synchronisation abzubrechen. Durch die<br />

Komponente für die Benutzeroberfläche wird die Beobachtungsfunktion<br />

plattformspezifisch.<br />

54<br />

Der Beispielcode von “CustDB” befindet sich im Unterverzeichnis<br />

Samples\<strong>UltraLite</strong>\CustDB Ihres SQL Anywhere-Verzeichnisses. Die<br />

Beobachtungsfunktion befindet sich in den plattformspezifischen<br />

Unterverzeichnissen des CustDB-Verzeichnisses.


Die Fortschrittsanzeige verwenden<br />

Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Die <strong>UltraLite</strong> Laufzeit-Bibliothek umfasst zwei Fortschrittsanzeigeklassen,<br />

die die Implementierung des Monitorings der Synchronisation<br />

gewährleisten, sowie dem Endanwender die Möglichkeit einräumen, die<br />

Synchronisation zu unterbrechen. Es gibt folgende<br />

Fortschrittsanzeigeklassen:<br />

♦ ianywhere.ultralite.ui.SynchProgressViewer Eine umfassende<br />

AWT-Version<br />

♦ ianywhere.ultralite.ui.JSynchProgressViewer Eine Swing-Version<br />

des Beobachters, die das Swing Threading-Model berücksichtigt<br />

Die beiden Klassen werden gleich verwendet. Der Betrachter zeigt ein<br />

modales oder modusfreies Dialogfeld an, das eine Reihe von Meldungen<br />

und einen Balken zu Fortschrittsanzeige beinhaltet. Sowohl die Meldungen<br />

als auch die Fortschrittsanzeige werden während der Synchronisation<br />

aktualisiert. Der Betrachter verfügt auch über eine Schaltfläche<br />

“Abbrechen”. Wenn der Benutzer die Schaltfläche “Abbrechen” drückt, wird<br />

die Synchronisation angehalten und die SQL-Ausnahme<br />

SQLE_INTERRUPTED ausgelöst.<br />

Thread-Themen Bei einer <strong>Java</strong>-Anwendung geschehen alle Ereignisse auf einem einzigen<br />

Thread, dem Event Thread. Auch alle Objekte der Benutzeroberfläche<br />

werden auf dem Event Thread erstellt, selbst wenn die Anwendung zu dieser<br />

Zeit auf einem anderen Thread arbeitet. Es gibt nur einen Event Thread je<br />

Anwendung.<br />

Modalbetrachter<br />

anzeigen<br />

Der Event Thread darf nie blockieren. Daher sollten Sie keine zu langen<br />

Vorgänge auf dem Event Thread ausführen, da dies zu Painter-Fehlern führt.<br />

Selbst das Aufrufen der show()-Methode in einem modalen Dialogfeld hält<br />

die Ausführung des Event Threads an. Sie sollten daher auf jeden Fall<br />

vermeiden, die synchronize()-Methode auf dem Event Thread aufzurufen.<br />

Der folgende Codeausschnitt illustriert, wie eine Modalinstanz des<br />

Betrachters aufgerufen wird. Die import-Anweisung verwendet folgende<br />

AWT-Version:<br />

55


Modusfreien Betrachter<br />

anzeigen<br />

import ianywhere.ultralite.ui.SynchProgressViewer;<br />

// create a frame to display a dialog<br />

java.awt.Frame frame = ...;<br />

// get <strong>UltraLite</strong> connection<br />

Connection conn = ...;<br />

// set synchronization options<br />

UlSynchOptions options = new UlSynchOptions();<br />

options.setUserName( "my_user" );<br />

...<br />

// create the viewer<br />

SynchProgressViewer viewer = new SynchProgressViewer( frame );<br />

viewer.synchronize( frame, options );<br />

// execution stops here until synchronization is complete<br />

Wenn der Betrachter auf diese Weise aufgerufen wurde, führt er folgende<br />

Vorgänge aus:<br />

1. Er registriert sich selbst als Synchronisationsbeobachter.<br />

2. Er stößt einen Thread zur Synchronisation an.<br />

3. Er zeigt sich an und blockiert den aktuellen Thread.<br />

4. Wenn die Synchronisation zu Ende ist, beseitigt der Beobachter das<br />

Dialogfeld, sodass der Thread fortgesetzt werden kann.<br />

Der folgende Codeausschnitt veranschaulicht, wie eine modusfreie Instanz<br />

des Betrachters aufgerufen wird.<br />

SynchProgressViewer viewer = new SynchProgressViewer( frame,<br />

false );<br />

options.setObserver( viewer );<br />

conn.synchronize( options );<br />

In diesem Fall müssen Sie sicherstellen, dass die Synchronisation auf einem<br />

anderen als dem Event Thread erfolgt, sodass der Betrachter nicht blockiert<br />

wird.<br />

Hinweise ♦ Alle Meldungen stammen aus dem SynchProgressViewerResources<br />

Ressourcenpaket.<br />

56<br />

♦ Der Betrachter implementiert die UlSynchObserver-Schnittstelle, sodass<br />

er in den Synchronisationsprozess einsteigen kann.<br />

♦ Die CustDB-Beispielanwendung beinhaltet eine Fortschrittsanzeige. Der<br />

Beispielcode von “CustDB” befindet sich im Unterverzeichnis<br />

<strong>UltraLite</strong>\samples\CustDB\java Ihres SQL Anywhere-Verzeichnisses.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

Hinweise zur <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Entwicklung<br />

Dieser Abschnitt enthält Hinweise zur Entwicklung von <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong>-Anwendungen.<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Applets erstellen<br />

Applet in eine<br />

HTML-Seite einbeziehen<br />

Wenn Sie Ihr JDBC-Programm als Applet erstellen, kann Ihre Anwendung<br />

nur mit dem Rechner synchronisieren, von dem das Applet geladen wird.<br />

Dabei handelt es sich gewöhnlich um den HTML-Rechner selbst.<br />

Im Folgenden finden Sie ein Beispiel einer HTML-Seite, mit der ein<br />

<strong>UltraLite</strong>-Applet erstellt wird:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Die Applet-Marke legt Folgendes fest:<br />

♦ Die Klasse, die das Applet startet:<br />

code="CustDbApplet.class"<br />

♦ Die Größe des Fensters im Webbrowser, in dem das Applet angezeigt<br />

wird.<br />

width=440 height=188<br />

♦ Die Zip-Dateien, die erforderlich sind, um das Applet auszuführen.<br />

archive="custdb.zip,ulrt.jar"<br />

In diesem Fall sind die Datei custdb.zip und die Zip-Datei der<br />

<strong>UltraLite</strong>-Laufzeitdatenbank nötig, um die <strong>UltraLite</strong>-Beispielanwendung<br />

“CustDB” auszuführen.<br />

57


<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen erstellen<br />

Dieser Abschnitt behandelt folgende Themen:<br />

♦ “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Klassen generieren” auf Seite 58<br />

♦ “<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen kompilieren” auf Seite 59<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Klassen generieren<br />

Wenn Sie eine Referenzdatenbank vorbereitet, ein <strong>UltraLite</strong>-Projekt für Ihre<br />

Anwendung festgelegt und SQL-Anweisungen hinzugefügt haben, um Ihre<br />

Datenzugriffsfunktionen festzulegen, enthält Ihre Referenzdatenbank alle<br />

Informationen, die der Generator braucht.<br />

☞ Weitere Hinweise zum <strong>UltraLite</strong>-Generator finden Sie unter<br />

“<strong>UltraLite</strong>-Datenzugriffscode generieren” [<strong>UltraLite</strong> Datenbankhandbuch,<br />

Seite 224]. Befehlszeilenoptionen finden Sie unter “Der <strong>UltraLite</strong>-Generator”<br />

[<strong>UltraLite</strong> Datenbankhandbuch, Seite 99].<br />

Die Ausgabe des Generators ist eine <strong>Java</strong>-Quelldatei mit einem von Ihnen<br />

gewählten Dateinamen. Abhängig von der Struktur Ihrer Datenbank und der<br />

Komplexität der Datenbankfunktionalität, die Ihre Anwendung erfordert,<br />

kann diese Datei in Größe und Inhalt sehr unterschiedlich sein.<br />

Abhängig von der Art Ihrer Anwendung gibt es mehrere Möglichkeiten, die<br />

Ausgabe des <strong>UltraLite</strong>-Generators anzupassen.<br />

Überblick Sie generieren die Klassen, indem Sie den <strong>UltraLite</strong>-Generator mit der<br />

Referenzdatenbank starten.<br />

Häufige Befehlszeilenkombinationen<br />

58<br />

❖ So starten Sie den <strong>UltraLite</strong>-Generator<br />

1. Geben Sie folgenden Befehl an einer Eingabeaufforderung ein:<br />

ulgen -c "connection-string" options<br />

Dabei gilt: Die Optionen sind von den Projektgegebenheiten abhängig.<br />

Wenn Sie <strong>Java</strong>-Code generieren, können Sie eine Reihe von Optionen<br />

angeben:<br />

♦ -t java <strong>Java</strong>-Code generieren. Der Generator ist dasselbe Tool, das für<br />

die C/C++-Entwicklung verwendet wird. Diese Option wird daher bei der<br />

Verwendung von <strong>Java</strong> immer eingesetzt.<br />

♦ -i Einige <strong>Java</strong>-Compiler unterstützen interne Klassen nicht korrekt. Das<br />

Standardverhalten des Generators ist, keinen <strong>Java</strong>-Code zu generieren,<br />

der innere Klassen einbezieht. Wenn Sie einen Compiler verwenden<br />

wollen, der interne Klassen unterstützt, verwenden Sie diese Option.


Kapitel 3. Datenzugriff über <strong>Static</strong> <strong>Java</strong>-API<br />

♦ -p Die generierten Klassen werden gewöhnlich in ein Paket einbezogen,<br />

das andere Klassen Ihrer Anwendung enthalten kann. Mit dieser Option<br />

können Sie den Generator anweisen, einen Paketnamen für die Klassen in<br />

den generierten Dateien einzubeziehen.<br />

♦ -s Zusätzlich zum Code für die Ausführung der SQL-Anweisungen<br />

generieren Sie mit dieser Option die SQL-Anweisungen selbst als<br />

Schnittstelle. Ohne diese Option werden die Zeichenfolgen als Mitglied<br />

der Datenbankklasse erstellt.<br />

♦ -a Mit dieser Option werden die Namen der SQL-Zeichenfolgen in<br />

Großbuchstaben gesetzt. Wenn Sie die Option -a wählen, wird der<br />

Bezeichner in der generierten Datei, der die einzelnen SQL-Anweisungen<br />

repräsentiert, von dem Namen abgeleitet, den Sie der Anweisung<br />

gegeben haben, als Sie sie der Datenbank hinzugefügten. In <strong>Java</strong> gibt es<br />

die Konvention, Konstante in Großbuchstaben zu schreiben. Da die<br />

SQL-Zeichenfolgen in Ihrem <strong>Java</strong>-Code Konstante sind, diese Option<br />

verwenden, um Bezeichner für Zeichenfolgen zu generieren, die der<br />

allgemeinen Konvention entsprechen.<br />

Beispiel: ♦ Folgender Befehl (der auf einer einzigen Zeile stehen muss) generiert<br />

z.B. den Code, der die SQL-Anweisung im Projekt CustDemo<br />

repräsentiert, sowie das erforderliche Datenbankschema. Die Ausgabe<br />

wird in die Datei uldemo.java geschrieben.<br />

ulgen -c "dsn=Ultralite 9.0 Sample;uid=DBA;pwd=SQL"<br />

-a -t java -s IStatements CustDemo uldemo.java<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen kompilieren<br />

❖ So kompilieren Sie die generierte Datei<br />

1. Setzen Sie Ihren Klassenpfad:<br />

Wenn Sie Ihre <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendung kompilieren, muss der<br />

<strong>Java</strong>-Compiler Zugriff auf folgende Klassen haben:<br />

♦ Die <strong>Java</strong>-Laufzeitklassen.<br />

♦ Die <strong>UltraLite</strong>-Laufzeitklassen<br />

♦ Die Zielklassen (gewöhnlich im aktuellen Verzeichnis)<br />

Folgender Klassenpfad liefert Zugriff auf diese Klassen:<br />

%JAVA_HOME%\jre\lib\rt.jar;%ASANY9%\ultralite\java\lib\<br />

ulrt.jar;.<br />

Dabei gilt: JAVA_HOME repräsentiert Ihr <strong>Java</strong>-Installationsverzeichnis<br />

und ASANY9 Ihr SQL Anywhere-Installationsverzeichnis.<br />

59


Bei der JDK 1.1-Entwicklung befindet sich ulrt.jar im Unterverzeichnis<br />

jdk11\lib des Verzeichnisses <strong>UltraLite</strong>\java.<br />

2. Kompilieren Sie die Klassen:<br />

Wenn der Klassenpfad wie in Schritt 1 angegeben gesetzt ist, verwenden<br />

Sie javac und geben folgenden Befehl ein (in einer einzigen Zeile):<br />

javac file.java<br />

<strong>Java</strong>-Anwendungen bereitstellen<br />

60<br />

Der Compiler erstellt die Klassendateien für file.java.<br />

Der Kompilierungsschritt erstellt eine Reihe von Klassendateien. Sie müssen<br />

alle generierten .class-Dateien beim Bereitstellen Ihrer Anwendung<br />

einbeziehen.<br />

Ihre <strong>UltraLite</strong>-Anwendung besteht aus folgenden Elementen:<br />

♦ Von Ihnen erstellte Klassendateien zum Implementieren Ihrer<br />

Anwendung<br />

♦ Generierte Klassendateien<br />

♦ <strong>Java</strong>-Kernklassen (rt.jar)<br />

♦ JAR-Datei der <strong>UltraLite</strong>-Laufzeitdatenbank (ulrt.jar)<br />

Sie können Ihre <strong>UltraLite</strong>-Anwendung auf eine beliebige angemessene<br />

Weise bereitstellen. Sie können diese Klassendateien z.B. in einer JAR-Datei<br />

zusammenpacken, um die Systemeinführung zu vereinfachen.<br />

Ihre <strong>UltraLite</strong>-Anwendung initialisiert automatisch ihre eigene Datenbank,<br />

wenn sie zum ersten Mal aufgerufen wird. Zunächst enthält die Datenbank<br />

keine Daten. Sie können Ihrer Anwendung Daten explizit mit<br />

INSERT-Anweisungen hinzufügen oder Daten aus einer konsolidierten<br />

Datenbank durch Synchronisation importieren. Explizite<br />

INSERT-Anweisungen sind besonders nützlich beim Entwickeln von<br />

Prototypen.


KAPITEL 4<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

Informationen zu diesem<br />

Kapitel<br />

In diesem Kapitel wird die <strong>Static</strong> <strong>Java</strong> API-Schittstelle für <strong>UltraLite</strong><br />

beschrieben.<br />

Es werden nur die Bestandteile explizit genannt, die vom JDBC abweichen.<br />

Inhalt Thema: Seite<br />

<strong>UltraLite</strong>-API-Referenz 62<br />

61


<strong>UltraLite</strong>-API-Referenz<br />

JDBC-Funktionen in <strong>UltraLite</strong><br />

62<br />

Dieser Abschnitt beschreibt Erweiterungen der von <strong>UltraLite</strong> bereitgestellten<br />

JDBC-Schnittstelle sowie die JDBC-Funktionen, die von <strong>UltraLite</strong> nicht<br />

unterstützt werden.<br />

Folgende Funktionen und Einschränkungen sind spezifisch für die<br />

Entwicklung von JDBC-<strong>UltraLite</strong>-Anwendungen.<br />

Die <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Schnittstelle ist auf JDBC 1.2 modelliert und<br />

verfügt zusätzlich über zwei ResultSet-Methoden aus JDBC 2.0:<br />

♦ absolute( ),<br />

♦ afterLast( ),<br />

♦ beforeFirst( ),<br />

♦ first( ),<br />

♦ isAfterLast( ),<br />

♦ isBeforeFirst( ),<br />

♦ isFirst( ),<br />

♦ isLast( ),<br />

♦ last( ),<br />

♦ previous( ),<br />

♦ relative( )<br />

Folgende Funktionen sind mit dem <strong>UltraLite</strong>-Entwicklungsmodell nicht<br />

kompatibel und werden von <strong>UltraLite</strong> nicht unterstützt:<br />

♦ Der Metadatenzugriff wird nur begrenzt unterstützt<br />

(Systemtabellenzugriff). Aus diesem Grund kann die<br />

DatabaseMetaData-Schnittstelle nicht verwendet werden. Der<br />

Metadatenzugriff ist auf die Anzahl und den Typ der Spalten begrenzt.<br />

♦ <strong>Java</strong>-Objekte können nicht in der Datenbank gespeichert werden.<br />

♦ Gespeicherte Prozeduren oder Funktionen werden nicht unterstützt.<br />

♦ Es werden nur statische SQL-Anweisungen unterstützt. Sie müssen der<br />

Datenbank hinzugefügt werden, damit der <strong>UltraLite</strong>-Generator sie<br />

generieren kann.


Nicht unterstützte JDBC-Methoden<br />

Verbindungsschnittstelle ♦ getCatalog<br />

Kapitel 4. <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

<strong>UltraLite</strong> unterstützt die folgenden JDBC 1.2-Methoden nicht. Wenn Sie<br />

versuchen, eines der folgenden Methodenergebnisse zu verwenden, wird<br />

eine SQLException mit einem Herstellercode ausgegeben, der anzeigt, dass<br />

die Funktion in <strong>UltraLite</strong> nicht unterstützt wird.<br />

♦ getMetaData<br />

♦ getTransactionIsolation<br />

♦ setCatalog<br />

♦ setTransactionIsolation<br />

Ergebnismengen- ♦ getMetaData<br />

Schnittstelle<br />

Anweisungsschnittstelle ♦ cancel<br />

Klasse JdbcConnection<br />

♦ getMaxFieldSize<br />

♦ getMaxRows<br />

♦ setMaxFieldSize<br />

♦ setMaxRows<br />

Paket ianywhere.ultralite.jdbc<br />

Beschreibung Repräsentiert eine <strong>UltraLite</strong>-Datenbank. Die meisten Methoden werden von<br />

der JDBC-Klasse Connection geerbt. Nicht unterstützte Methoden lösen die<br />

Ausnahmebedingung unsupported feature aus.<br />

countUploadRows-Methode<br />

Prototyp long countUploadRows( int mask, long threshold )<br />

Beschreibung Gibt die Anzahl der Zeilen zurück, die gesendet werden müssen, wenn die<br />

nächste Synchronisation ausgeführt wird.<br />

Mit dieser Funktion können Sie feststellen, ob eine Synchronisation<br />

erforderlich ist.<br />

Parameter mask Eine Gruppe von zu überprüfenden Publikationen. Der Wert 0<br />

entspricht der gesamten Datenbank. Die Gruppe wird als Maske angegeben.<br />

Folgende Maske entspricht z.B. den Publikationen PUB1 und PUB2:<br />

63


UL_PUB_PUB1 | UL_PUB_PUB2<br />

☞ Weitere Hinweise zu Publikationsmasken finden Sie unter<br />

“publication-Synchronisationsparameter” auf Seite 87.<br />

Schwellenwert Ein Wert, der die maximale Anzahl der zu zählenden<br />

Zeilen festlegt und auch die Zeitdauer begrenzt, die dem Aufruf zur<br />

Verfügung steht. Mit dem Wert 0 wird keine Zeitbegrenzung festgelegt. Der<br />

Wert 1 legt fest, ob Zeilen synchronisiert werden müssen.<br />

Rückgabe Die Anzahl der Zeilen für den Upload.<br />

Fehlermeldung java.sql.SQLException<br />

getDatabaseID-Methode<br />

Prototyp public int getDatabaseID( ) throws SQLException<br />

Beschreibung getDatabaseID() gibt die aktuelle Datenbank-ID zurück, die für Global<br />

Autoincrement verwendet wird. Es wird der beim letzten Aufruf von<br />

setDatabaseID festgelegte Wert zurückgegeben oder -1, wenn die ID zuvor<br />

nicht festgelegt wurde.<br />

getDefragIterator-Methode<br />

Prototyp JdbcDefragIterator getDefragIterator( )<br />

Beschreibung Initialisiert einen Defragmentierungs-Wiederholer und gibt ihn zurück<br />

Parameter user_name Der MobiLink-Benutzername. Siehe<br />

“user_name-Synchronisationsparameter” auf Seite 98.<br />

password Das Kennwort für den betreffenden Benutzernamen. Siehe<br />

“password-Synchronisationsparameter” auf Seite 85.<br />

script_version Die Skriptversion. Siehe<br />

“version-Synchronisationsparameter” auf Seite 99.<br />

Stream_defn Der Datenstrom, der für die Synchronisation verwendet<br />

werden soll. Siehe “stream-Synchronisationsparameter” auf Seite 91.<br />

Parms Alle vom Benutzer angegebenen Parameter, die für die<br />

Synchronisation verwendet werden.<br />

☞ Siehe “stream_parms-Synchronisationsparameter” auf Seite 94.<br />

Rückgabe Der Defragmentierungs-Wiederholer<br />

Fehlermeldung java.sql.SQLException<br />

64


Kapitel 4. <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

Siehe auch “<strong>UltraLite</strong>-Datenbanken defragmentieren” auf Seite 44<br />

getLastDownloadTimeDate-Methode<br />

Prototyp java.util.Date getLastDownloadTimeDate( int mask )<br />

Beschreibung Gibt den Zeitpunkt an, zu dem die letzten Änderungen in der Ergebnismenge<br />

einer bestimmten Anweisung in einem Download eingelesen wurden.<br />

Parameter mask Eine Gruppe von Publikationen, deren letzter Download-Zeitpunkt<br />

abgefragt wird. Der Wert 0 entspricht der gesamten Datenbank. Die Gruppe<br />

wird als Maske angegeben. Folgende Maske entspricht z.B. den<br />

Publikationen PUB1 und PUB2:<br />

Rückgabe<br />

getLastDownloadTimeLong-Methode<br />

UL_PUB_PUB1 | UL_PUB_PUB2<br />

☞ Weitere Hinweise zu Publikationsmasken finden Sie unter<br />

“publication-Synchronisationsparameter” auf Seite 87.<br />

♦ Der Zeitpunkt, zu dem die Anweisung zum letzten Mal per Download<br />

eingelesen wurde.<br />

Prototyp long getLastDownloadTimeLong( int mask )<br />

Beschreibung Gibt den Zeitpunkt an, zu dem die letzten Änderungen in der Ergebnismenge<br />

einer bestimmten Anweisung in einem Download eingelesen wurden.<br />

Parameter mask Eine Gruppe von Publikationen, deren letzter Download-Zeitpunkt<br />

abgefragt wird. Der Wert 0 entspricht der gesamten Datenbank. Die Gruppe<br />

wird als Maske angegeben. Folgende Maske entspricht z.B. den<br />

Publikationen PUB1 und PUB2:<br />

Rückgabe<br />

getLastIdentity-Methode<br />

UL_PUB_PUB1 | UL_PUB_PUB2<br />

Prototyp long getLastIdentity( )<br />

☞ Weitere Hinweise zu Publikationsmasken finden Sie unter<br />

“publication-Synchronisationsparameter” auf Seite 87.<br />

♦ Der Zeitpunkt, zu dem die Anweisung zum letzten Mal per Download<br />

eingelesen wurde.<br />

Beschreibung Gibt den zuletzt verwendeten Identity-Wert zurück. Diese Funktion<br />

entspricht folgender SQL-Anweisung:<br />

SELECT @@identity<br />

65


Rückgabe Der letzte Identity-Wert<br />

Die Funktion ist im Kontext der globalen automatischen Erhöhung von<br />

Spaltenwerten besonders nützlich.<br />

Siehe auch “Zuletzt zugewiesenen Wert feststellen” [MobiLink Clients, Seite 321]<br />

globalAutoincUsage-Methode<br />

“Globalen Datenbankbezeichner festlegen” [MobiLink Clients, Seite 318]<br />

Prototyp short globalAutoincUsage( )<br />

Beschreibung Gibt den maximalen Zählerprozentwert von Global Autoincrement für alle<br />

Tabellen in der Datenbank zurück. Dieser Wert ist nützlich, um zu<br />

bestimmen, ob eine Datenbank-ID festgelegt werden soll.<br />

Rückgabe Der Prozentwert der globalen Werte für Autoincrement, die verwendet<br />

wurden.<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “Spalten mit dem Standardwert GLOBAL AUTOINCREMENT<br />

deklarieren” [MobiLink Clients, Seite 317]<br />

grant-Methode<br />

“setDatabaseID-Methode” auf Seite 67<br />

Prototyp void grant( String user, String password )<br />

Beschreibung Erteilt einem Benutzernamen und seinem Kennwort die Berechtigung, sich<br />

mit einer <strong>UltraLite</strong>-Datenbank zu verbinden. Damit diese Methode gültig<br />

wird, muss die Benutzerauthentifizierung mit<br />

JdbcSupport.enableUserAuthentication aktiviert sein.<br />

Diese Methode der Zuteilung wird bei JdbcConnection für Anwendungen<br />

eingesetzt, die kein explizites JdbcDatabase-Objekt haben.<br />

Parameter user Eine Zeichenfolge, die bei der Verbindungsaufnahme als<br />

Benutzername eingegeben werden muss.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

66<br />

password Eine Zeichenfolge, die bei der Verbindungsaufnahme als<br />

Kennwort eingegeben werden muss.


evoke-Methode<br />

Prototyp void revoke( String user )<br />

Kapitel 4. <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

Beschreibung Entzieht einem Benutzernamen die Berechtigung, sich mit einer<br />

<strong>UltraLite</strong>-Datenbank zu verbinden. Damit diese Methode gültig wird, muss<br />

die Benutzerauthentifizierung mit JdbcSupport.enableUserAuthentication<br />

aktiviert sein.<br />

Diese Methode der Zuteilung wird bei JdbcConnection für Anwendungen<br />

eingesetzt, die kein explizites JdbcDatabase-Objekt haben.<br />

Parameter user Der Name eines Benutzers, der sich mit der Datenbank nicht mehr<br />

verbinden darf.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

setDatabaseID-Methode<br />

Prototyp void setDatabaseID( int value )<br />

Beschreibung Legt die Datenbank-ID fest.<br />

Parameter value Der Ganzzahlwert, der als globaler Datenbankbezeichner verwendet<br />

werden soll.<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “globalAutoincUsage-Methode” auf Seite 66<br />

synchronize-Methode<br />

Prototyp void synchronize(<br />

java.lang.String user_name,<br />

java.lang.String password,<br />

java.lang.String script_version,<br />

UlStream stream_defn,<br />

java.lang.String parms )<br />

void synchronize(<br />

ianywhere.ultralite.runtime UlSynchOptions opts<br />

)<br />

Beschreibung Synchronisiert Daten mit einem MobiLink-Synchronisationsserver.<br />

Parameter user_name Der MobiLink-Benutzername. Siehe<br />

“user_name-Synchronisationsparameter” auf Seite 98.<br />

67


Fehlermeldung java.sql.SQLException<br />

startSynchronizationDelete-Methode<br />

password Das Kennwort für den betreffenden Benutzernamen. Siehe<br />

“password-Synchronisationsparameter” auf Seite 85.<br />

script_version Die Skriptversion. Siehe<br />

“version-Synchronisationsparameter” auf Seite 99.<br />

stream_defn Der Datenstrom, der für die Synchronisation verwendet<br />

werden soll. Siehe “stream-Synchronisationsparameter” auf Seite 91.<br />

parms Alle vom Benutzer angegebenen Parameter, die für die<br />

Synchronisation verwendet werden.<br />

☞ Siehe “stream_parms-Synchronisationsparameter” auf Seite 94.<br />

opts Ein ULSynchOptions-Objekt. Siehe “Synchronisationsparameter”<br />

auf Seite 74.<br />

Prototyp void startSynchronizationDelete( )<br />

Beschreibung Erneuter Start der Protokollierung der Löschvorgänge für die<br />

MobiLink-Synchronisation.<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “START SYNCHRONIZATION DELETE-Anweisung [MobiLink]” [ASA<br />

SQL-Referenzhandbuch, Seite 676]<br />

stopSynchronizationDelete-Methode<br />

Prototyp void stopSynchronizationDelete( )<br />

Beschreibung Verhindert die Protokollierung der Löschvorgänge für die<br />

MobiLink-Synchronisation.<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “STOP SYNCHRONIZATION DELETE-Anweisung [MobiLink]” [ASA<br />

SQL-Referenzhandbuch, Seite 683]<br />

JdbcDatabase-Klasse<br />

Paket ianywhere.ultralite.jdbc<br />

Beschreibung Die Klasse JdbcDatabase wird direkt nur für das Verschleiern von<br />

Datenbanken verwendet. Die generierte Datenbankklasse erweitert<br />

JdbcDatabase und stellt ein Objekt bereit, das die <strong>UltraLite</strong>-Datenbank<br />

68


changeEncryptionKey-Methode<br />

Kapitel 4. <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

repräsentiert. Die meisten JdbcDatabase-Methoden werden aus der<br />

generierten Datenbankklasse bezogen.<br />

☞ Weitere Hinweise finden Sie unter “Die generierte Datenbankklasse” auf<br />

Seite 71.<br />

Prototyp Connection changeEncryptionKey( )<br />

Beschreibung Ändert die Verschlüsselung für eine <strong>UltraLite</strong>-Datenbank.<br />

Rückgabe Ein JDBC-Verbindungsobjekt.<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “<strong>UltraLite</strong>-Datenbanken verschlüsseln” auf Seite 41<br />

close-Methode<br />

Prototyp void close( )<br />

Beschreibung Trennt alle Verbindungen zu einer <strong>UltraLite</strong>-Datenbank. Diese Methode<br />

muss ausgeführt werden, bevor Sie eine <strong>UltraLite</strong>-Datenbank löschen<br />

können.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

connect-Methode<br />

Prototyp Connection connect( )<br />

Connection connect( String user, String password )<br />

Connection connect( String user, String password, Properties info )<br />

Beschreibung Stellt eine Verbindung zu einer <strong>UltraLite</strong>-Datenbank her. Der Benutzername<br />

und sein Kennwort werden nur geprüft, wenn die Benutzerauthentifizierung<br />

mit JdbcSupport.enableUserAuthentication aktiviert wurde.<br />

Parameter user Der Name eines Benutzers, der sich mit der Datenbank verbinden<br />

darf.<br />

password Eine Zeichenfolge, die bei der Verbindungsaufnahme als<br />

Kennwort eingegeben werden muss.<br />

Info Ein Properties-Objekt, das den Benutzernamen und sein Kennwort<br />

enthält.<br />

69


Rückgabe Ein JDBC-Verbindungsobjekt.<br />

Fehlermeldung java.sql.SQLException<br />

drop-Methode<br />

Prototyp void drop( )<br />

Beschreibung Löscht eine <strong>UltraLite</strong>-Datenbankdatei. Diese Methode mit großer Vorsicht<br />

verwenden. Sie kann nur ausgeführt werden, nachdem die Methode<br />

JdbcDatabase.close() aufgerufen wurde.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “close-Methode” auf Seite 69<br />

grant-Methode<br />

Prototyp void grant( String user, String password )<br />

Beschreibung Erteilt einem Benutzernamen und seinem Kennwort die Berechtigung, sich<br />

mit einer <strong>UltraLite</strong>-Datenbank zu verbinden. Damit diese Methode gültig<br />

wird, muss die Benutzerauthentifizierung mit<br />

JdbcSupport.enableUserAuthentication aktiviert sein.<br />

Parameter user Eine Zeichenfolge, die bei der Verbindungsaufnahme als<br />

Benutzername eingegeben werden muss.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

revoke-Methode<br />

Prototyp void revoke( String user )<br />

password Eine Zeichenfolge, die bei der Verbindungsaufnahme als<br />

Kennwort eingegeben werden muss.<br />

Beschreibung Entzieht einem Benutzernamen die Berechtigung, sich mit einer<br />

<strong>UltraLite</strong>-Datenbank zu verbinden. Damit diese Methode gültig wird, muss<br />

die Benutzerauthentifizierung mit JdbcSupport.enableUserAuthentication<br />

aktiviert sein.<br />

Parameter user Der Name eines Benutzers, der sich mit der Datenbank nicht mehr<br />

verbinden darf.<br />

Rückgabe void<br />

70


Fehlermeldung java.sql.SQLException<br />

setDefaultObfuscation-Methode<br />

Prototyp setDefaultObfuscation ( true | false )<br />

Beschreibung Verschleiert die Datenbank<br />

Kapitel 4. <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> API-Referenz<br />

Siehe auch “Eine <strong>UltraLite</strong>-Datenbank verschleiern” auf Seite 42<br />

Die generierte Datenbankklasse<br />

Beschreibung Die generierte Datenbankklasse erweitert JdbcDatabase. Sie stellt ein<br />

Objekt bereit, das die <strong>UltraLite</strong>-Datenbank repräsentiert.<br />

JdbcDatabase-Methoden werden in der Regel für die generierte<br />

Datenbankklasse benutzt.<br />

Konstruktor new Datenbankname( Properties Eigenschaften )<br />

Dabei gilt: Datenbankname ist der Name der generierten Datenbankklasse.<br />

Sie können den Klassennamen mithilfe der Befehlszeilenoption -f des<br />

<strong>UltraLite</strong>-Generators festlegen.<br />

☞ Weitere Hinweise finden Sie unter “Der <strong>UltraLite</strong>-Generator” [<strong>UltraLite</strong><br />

Datenbankhandbuch, Seite 99].<br />

Parameter Eigenschaften Ein Eigenschaftsobjekt, das einige oder alle der folgenden<br />

Elemente enthält:<br />

♦ persist<br />

♦ persistfile<br />

♦ key<br />

JdbcDefragIterator-Klasse<br />

Paket ianywhere.ultralite.jdbc<br />

☞ Weitere Hinweise finden Sie unter “Mit einem Properties-Objekt<br />

Verbindungsinformationen speichern” auf Seite 34.<br />

Beschreibung Stellt ein Objekt bereit, das für die explizite Defragmentierung des<br />

Datenbankspeichers verwendet wird.<br />

ulStoreDefragStep-Methode<br />

Prototyp boolean ulStoreDefragStep( UlConnection conn )<br />

Beschreibung Defragmentiert einen Teil einer <strong>UltraLite</strong>-Datenbank<br />

71


Parameter conn Die aktuelle Verbindung als JdbcConnection-Objekt.<br />

Rückgabe true , wenn erfolgreich<br />

false , wenn nicht erfolgreich<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “STOP SYNCHRONIZATION DELETE-Anweisung [MobiLink]” [ASA<br />

SQL-Referenzhandbuch, Seite 683]<br />

JdbcSupport-Klasse<br />

Paket ianywhere.ultralite.jdbc<br />

Beschreibung Eine statische Klasse, die Methoden bereitstellt, mit denen<br />

<strong>UltraLite</strong>-Funktionen aktiviert werden können.<br />

enableUserAuthentication-Methode<br />

Prototyp void enableUserAuthentication( )<br />

Beschreibung Richtet die <strong>UltraLite</strong>-Datenbank so ein, dass die Benutzerauthentifizierung<br />

erforderlich ist, um sich mit ihr zu verbinden. Muss aufgerufen werden,<br />

bevor das Datenbankobjekt erstellt wird.<br />

Parameter Keine.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “Beispiel für eine Benutzerauthentifizierung” auf Seite 39<br />

disableUserAuthentication-Methode<br />

Prototyp void disableUserAuthentication( )<br />

Beschreibung Richtet die <strong>UltraLite</strong>-Datenbank so ein, dass die Benutzerauthentifizierung<br />

nicht erforderlich ist, um sich mit ihr zu verbinden. Muss aufgerufen<br />

werden, bevor das Datenbankobjekt erstellt wird.<br />

Parameter Keine.<br />

Rückgabe void<br />

Fehlermeldung java.sql.SQLException<br />

Siehe auch “enableUserAuthentication-Methode” auf Seite 72<br />

72


KAPITEL 5<br />

Referenz der Synchronisationsparameter<br />

Über dieses Kapitel In diesem Kapitel finden Sie Referenzinformationen zu<br />

Synchronisationsparametern.<br />

Inhalt Thema: Seite<br />

Synchronisationsparameter 74<br />

auth_parms-Synchronisatonsparameter 76<br />

auth_status-Parameter 77<br />

auth_value-Synchronisationsparameter 79<br />

download_only-Synchronisationsparameter 80<br />

ignored_rows-Synchronisationsparameter 81<br />

new_password-Synchronisationsparameter 82<br />

num_auth_parms-Synchronisationsparameter 83<br />

observer-Synchronisationsparameter 84<br />

password-Synchronisationsparameter 85<br />

ping-Synchronisationsparameter 86<br />

publication-Synchronisationsparameter 87<br />

security-Synchronisationsparameter 88<br />

security_parms-Synchronisationsparameter 89<br />

stream-Synchronisationsparameter 91<br />

stream_parms-Synchronisationsparameter 94<br />

upload_ok-Synchronisationsparameter 95<br />

upload_only-Synchronisationsparameter 96<br />

user_data-Synchronisationsparameter 97<br />

user_name-Synchronisationsparameter 98<br />

version-Synchronisationsparameter 99<br />

73


Synchronisationsparameter<br />

74<br />

Die Synchronisationsparameter sind Felder des Objekts<br />

ianywhere.ultralite.runtime.UlSynchOptions. Die Felder sind privat und<br />

Methoden werden bereitgestellt, um ihre Werte abzurufen und zu setzen.<br />

Das Objekt UlSynchOptions wird als Argument im Aufruf an<br />

ianywhere.ultralite.jdbc.JdbcConnection.synchronize übergeben.<br />

Feld Zugriffsmethoden Siehe<br />

auth_status getAuthStatus<br />

setAuthStatus<br />

auth_value getAuthValue<br />

setAuthValue<br />

download_only getDownloadOnly<br />

setDownloadOnly<br />

ignored_rows getIgnoredRows<br />

setIgnoredRows<br />

new_password getNewPassword<br />

setNewPassword<br />

observer getObserver<br />

setObserver<br />

password getPassword<br />

setPassword<br />

ping getPing<br />

setPing<br />

publications getSynchPublication<br />

stream getStream<br />

setSynchPublication<br />

setStream<br />

“auth_status-Parameter” auf Seite<br />

77<br />

“auth_value-<br />

Synchronisationsparameter”<br />

auf Seite 79<br />

“download_only-<br />

Synchronisationsparameter” auf<br />

Seite 80<br />

“ignored_rows-<br />

Synchronisationsparameter”<br />

auf Seite 81<br />

“new_password-<br />

Synchronisationsparameter” auf<br />

Seite 82<br />

“observer-<br />

Synchronisationsparameter”<br />

auf Seite 84<br />

“password-<br />

Synchronisationsparameter”<br />

auf Seite 85<br />

“ping-Synchronisationsparameter”<br />

auf Seite 86<br />

“publication-<br />

Synchronisationsparameter”<br />

auf Seite 87<br />

“stream-<br />

Synchronisationsparameter”<br />

auf Seite 91


Kapitel 5. Referenz der Synchronisationsparameter<br />

Feld Zugriffsmethoden Siehe<br />

stream_parms getStreamParms<br />

setStreamParms<br />

upload_ok getUploadOK<br />

setUploadOK<br />

upload_only getUploadOnly<br />

setUploadOnly<br />

user_data getUserData<br />

setUserData<br />

user_name getUserName<br />

setUserName<br />

version getScriptVersion<br />

setScriptVersion<br />

“stream_parms-<br />

Synchronisationsparameter”<br />

auf Seite 94<br />

“upload_ok-<br />

Synchronisationsparameter”<br />

auf Seite 95<br />

“upload_only-<br />

Synchronisationsparameter”<br />

auf Seite 96<br />

“user_data-<br />

Synchronisationsparameter”<br />

auf Seite 97<br />

“user_name-<br />

Synchronisationsparameter”<br />

auf Seite 98<br />

“version-<br />

Synchronisationsparameter”<br />

auf Seite 99<br />

☞ Eine Beschreibung der Rolle der einzelnen Synchronisationsparameter<br />

finden Sie unter “Synchronisationsparameter” [MobiLink Clients, Seite 344].<br />

75


auth_parms-Synchronisatonsparameter<br />

Funktion Stellt Parameter für ein benutzerdefiniertes Benutzerauthentifizierungsskript<br />

bereit.<br />

Zugriffsmethode String[ ] getAuthParms( )<br />

void setAuthParms( String[ ] AuthParameter )<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

ul_char * Params[ 3 ] = { UL_TEXT( "parm1" ),<br />

UL_TEXT( "parm2" ),<br />

UL_TEXT( "parm3" ) };<br />

// ...<br />

info.num_auth_parms = 3;<br />

info.auth_parms = Params;<br />

params = new String[ num_params ];<br />

// set params values<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setAuthParms( params );<br />

opts.setAuthParmsNumber( num_params );<br />

Siehe auch ♦ “Synchronisationsparameter “Authentication Parameters”” [MobiLink<br />

Clients, Seite 344]<br />

♦ “num_auth_parms-Synchronisationsparameter” auf Seite 83<br />

♦ “authenticate_parameters (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 370]<br />

♦ “authenticate_user (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 372]<br />

76


auth_status-Parameter<br />

Kapitel 5. Referenz der Synchronisationsparameter<br />

Funktion Gibt Auskunft über den Status der MobiLink-Benutzerauthentifizierung.<br />

Zugriffsmethode short getAuthStatus( )<br />

void setAuthStatus( short AuthStatus )<br />

Anwendung Greifen Sie wie folgt auf den Parameter zu:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

// set options here<br />

conn.synchronize( opts );<br />

returncode = opts.getAuthStatus();<br />

Zulässige Werte Nach der Synchronisation muss der Parameter einen der folgenden Werte<br />

enthalten: Wenn ein benutzerdefiniertes<br />

authenticate_user-Synchronisationsskript in der konsolidierten Datenbank<br />

einen anderen Wert zurückgibt, wird der Wert gemäß den Regeln<br />

interpretiert, die in “authenticate_user (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 372] enthalten sind.<br />

Konstante Wert Beschreibung<br />

UlDefnUL_AUTH_STATUS_-<br />

UNKNOWN<br />

UlDefnUL_AUTH_STATUS_-<br />

VALID<br />

UlDefnUL_AUTH_STATUS_-<br />

VALID_BUT_EXPIRES_SOON<br />

UlDefnUL_AUTH_STATUS_-<br />

EXPIRED<br />

UlDefnUL_AUTH_STATUS_-<br />

INVALID<br />

UlDefnUL_AUTH_STATUS_-<br />

IN_USE<br />

0 Berechtigungsstatus ist unbekannt,<br />

möglicherweise weil<br />

die Verbindung noch nicht<br />

synchronisiert wurde.<br />

1000 Benutzer-ID und Kennwort<br />

waren zur Zeit der Synchronisation<br />

gültig.<br />

2000 Benutzer-ID und Kennwort<br />

waren zur Zeit der Synchronisation<br />

gültig, laufen aber bald<br />

ab.<br />

3000 Autorisierung fehlgeschlagen:<br />

Benutzer-ID oder Kennwort<br />

sind abgelaufen.<br />

4000 Autorisierung fehlgeschlagen:<br />

Ungültige Benutzer-ID bzw.<br />

ungültiges Kennwort.<br />

5000 Autorisierung fehlgeschlagen:<br />

Benutzer-ID wird bereits verwendet.<br />

77


Siehe auch ♦ “Synchronisationsparameter “Authentication Status”” [MobiLink Clients,<br />

Seite 345]<br />

♦ “MobiLink-Benutzer authentifizieren” [MobiLink Clients, Seite 9].<br />

78


Kapitel 5. Referenz der Synchronisationsparameter<br />

auth_value-Synchronisationsparameter<br />

Funktion Gibt Rückgabewerte aus benutzerdefinierten<br />

Benutzerauthentifizierungsskripten aus.<br />

Zugriffsmethoden long getAuthValue( )<br />

void setAuthValue( long AuthWert )<br />

Standardwert Eine Beschreibung der Werte, die von dem Standardmechanismus der<br />

MobiLink-Benutzerauthentifizierung gesetzt werden, finden Sie unter<br />

“authenticate_user (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 372].<br />

Anwendung Der Parameter ist schreibgeschützt.<br />

Greifen Sie wie folgt auf den Parameter zu:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

// set other options here<br />

conn.synchronize( opts );<br />

returncode = opts.getAuthValue();<br />

Siehe auch ♦ “Synchronisationsparameter “Authentication Value”” [MobiLink Clients,<br />

Seite 346]<br />

♦ “authenticate_user (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 372]<br />

♦ “authenticate_user_hashed (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 376]<br />

♦ “auth_status-Parameter” auf Seite 77<br />

79


download_only-Synchronisationsparameter<br />

Funktion Laden Sie während dieser Synchronisation keine Änderungen aus der<br />

<strong>UltraLite</strong>-Datenbank.<br />

Zugriffsmethoden boolean getDownloadOnly( )<br />

void setDownloadOnly( boolean Nur_Download )<br />

Standardwert Der Parameter ist ein fakultativer boolescher Wert, der standardmäßig<br />

FALSE ist.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setDownloadOnly( true );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Siehe auch ♦ “Synchronisationsparameter “Download only”” [MobiLink Clients,<br />

Seite 348]<br />

♦ “Schreibgeschützte Tabellen in eine <strong>UltraLite</strong>-Datenbank aufnehmen”<br />

[MobiLink Clients, Seite 310].<br />

♦ “upload_only-Synchronisationsparameter” auf Seite 96<br />

80


Kapitel 5. Referenz der Synchronisationsparameter<br />

ignored_rows-Synchronisationsparameter<br />

Funktion Gibt eine Meldung aus, wenn Zeilen vom MobiLink-Synchronisationsserver<br />

während der Synchronisation aufgrund fehlender Skripten ignoriert wurden.<br />

Der Parameter ist schreibgeschützt.<br />

Zugriffsmethoden boolean getIgnoredRows( )<br />

void setIgnoredRows( boolean IgnorierteZeilen )<br />

81


new_password-Synchronisationsparameter<br />

Funktion Legt ein neues MobiLink-Kennwort fest, das mit dem Benutzernamen<br />

verbunden ist.<br />

Zugriffsmethoden java.lang.String getNewPassword( )<br />

void setNewPassword( java.lang.String NeuesKennwort )<br />

Standardwert Es gibt keine Standardeinstellung.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setUserName( "50" );<br />

opts.setPassword( "mypassword" );<br />

opts.setNewPassword( "mynewpassword" );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Siehe auch ♦ “Synchronisationsparameter “New Password”” [MobiLink Clients,<br />

Seite 350]<br />

♦ “MobiLink-Benutzer authentifizieren” [MobiLink Clients, Seite 9].<br />

82


Kapitel 5. Referenz der Synchronisationsparameter<br />

num_auth_parms-Synchronisationsparameter<br />

Funktion Die Anzahl der Authentifizierungsparameter-Zeichenfolgen, die an ein<br />

benutzerdefiniertes Authentifizierungsskript weitergegeben wurden.<br />

Zugriffsmethoden byte getAuthParmsNumber( )<br />

void setAuthParmsNumber( byte Wert )<br />

Standardwert Keine Parameter an ein benutzerdefiniertes Authentifizierungsskript<br />

übergeben.<br />

Anwendung Der Parameter wird gemeinsam mit auth_parms verwendet, um<br />

Informationen an benutzerdefinierten Authentifizierungsskripten zu<br />

übergeben.<br />

☞ Weitere Hinweise finden Sie unter<br />

“auth_parms-Synchronisatonsparameter” auf Seite 76.<br />

Siehe auch ♦ “Parameter “Number of Authentication Parameters”” [MobiLink Clients,<br />

Seite 351]<br />

♦ “auth_parms-Synchronisatonsparameter” auf Seite 76<br />

♦ “authenticate_parameters (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 370]<br />

♦ “authenticate_user (Verbindungsereignis)” [MobiLink<br />

Administrationshandbuch, Seite 372]<br />

83


observer-Synchronisationsparameter<br />

Funktion Ein Zeiger auf eine Callback-Funktion, die die Synchronisation überwacht.<br />

Zugriffsmethoden ianywhere.ultralite.runtime.UlSynchObserver getObserver( )<br />

void setObserver( ianywhere.ultralite.runtime.UlSynchObserver Überwachung<br />

)<br />

Siehe auch ♦ “Synchronisationsparameter “Observer”” [MobiLink Clients, Seite 352]<br />

♦ “Synchronisation überwachen und abbrechen” auf Seite 51<br />

♦ “user_data-Synchronisationsparameter” auf Seite 97<br />

84


Kapitel 5. Referenz der Synchronisationsparameter<br />

password-Synchronisationsparameter<br />

Funktion Eine Zeichenfolge, die das MobiLink-Kennwort festlegt, das user_name<br />

zugeordnet ist. Der Benutzername und das Kennwort unterscheiden sich von<br />

der ID und dem Kennwort des Datenbankbenutzers und dienen der<br />

Kennzeichnung und Authentifizierung der Anwendung beim<br />

MobiLink-Synchronisationsserver.<br />

Zugriffsmethoden java.lang.String getPassword( )<br />

void setPassword( java.lang.String Kennwort )<br />

Standardwert Es gibt keine Standardeinstellung.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setUserName( "50" );<br />

opts.setPassword( "mypassword" );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Siehe auch ♦ “Synchronisationsparameter “Password”” [MobiLink Clients, Seite 353]<br />

♦ “MobiLink-Benutzer authentifizieren” [MobiLink Clients, Seite 9].<br />

85


ping-Synchronisationsparameter<br />

Funktion Bestätigung von Kommunikationen zwischen dem <strong>UltraLite</strong>-Client und dem<br />

MobiLink-Synchronisationsserver. Wenn dieser Parameter auf “true” gesetzt<br />

wird, findet keine Synchronisation statt.<br />

Wenn der MobiLink-Synchronisationsserver eine ping-Anfrage erhält,<br />

verbindet er sich mit der konsolidierten Datenbank, authentifiziert den<br />

Benutzer und sendet dann den Benutzerauthentifizierungs-Status und –Wert<br />

an den Client zurück.<br />

Wenn der Ping-Vorgang erfolgreich ist, gibt der MobiLink-Server eine<br />

informative Meldung aus. Ist der Ping-Vorgang nicht erfolgreich, wird eine<br />

Fehlermeldung ausgegeben.<br />

Wenn der MobiLink-Benutzername in der Systemtabelle “ml_user” nicht<br />

gefunden wird und der MobiLink-Server mit der Befehlszeilenoption -zu+<br />

abläuft, fügt der MobiLink-Server den Benutzer zu “ml_user” hinzu.<br />

Der MobiLink-Synchronisationsserver kann die folgenden Skripten für eine<br />

ping-Anfrage verwenden, sofern sie vorhanden sind:<br />

♦ begin_connection<br />

♦ authenticate_user<br />

♦ authenticate_user_hashed<br />

♦ end_connection<br />

Zugriffsmethoden boolean getPing( )<br />

void setPing( boolean ping )<br />

Standardwert Der Parameter ist ein fakultativer boolescher Wert, der standardmäßig<br />

FALSE ist.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setUserName( "50" );<br />

opts.setPing( true );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Siehe auch ♦ “Synchronisationsparameter “Ping”” [MobiLink Clients, Seite 354]<br />

♦ “Option -pi” [MobiLink Clients, Seite 162]<br />

86


Kapitel 5. Referenz der Synchronisationsparameter<br />

publication-Synchronisationsparameter<br />

Funktion Legt die zu synchronisierenden Publikationen fest<br />

Zugriffsmethoden int getSynchPublication( )<br />

void setSynchPublication( int Publikation )<br />

Standardwert Wenn Sie keine Publikation angeben, werden alle Daten synchronisiert.<br />

Anwendung Der <strong>UltraLite</strong>-Generator kennzeichnet die Publikationen, die mit dem<br />

Befehlszeilenparameter ulgen -v als großgeschriebene Konstante mit dem<br />

Namen UL_PUB_pubname angegeben wurde, wobei pubname der Name<br />

ist, der der Option -v gegeben wurde.<br />

Folgende Befehlszeile generiert z.B. eine Publikation, die von der<br />

Konstanten sales:UL_PUB_SALES gekennzeichnet wird:<br />

ulgen -v sales ...<br />

Bei der Synchronisation setzen Sie den Publikationsparameter auf<br />

publication mask: Dies ist eine sortierte Liste von Publikationskonstanten.<br />

Zum Beispiel:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setSynchPublication(<br />

projectname.UL_PUB_MYPUB1 |<br />

projectname.UL_PUB_MYPUB2 );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Dabei gilt: projectname ist der Name der Hauptobjektklasse, die vom<br />

<strong>UltraLite</strong>-Generator generiert wird.<br />

Die spezielle Publikationsmaske UL_SYNC_ALL beschreibt alle Tabellen<br />

in der Datenbank, und zwar unabhängig davon, ob sie in einer Publikation<br />

sind. Die Maske UL_SYNC_ALL_PUBS beschreibt alle Tabellen in<br />

Publikationen in der Datenbank.<br />

Siehe auch ♦ “Synchronisationsparameter “Publication”” [MobiLink Clients, Seite 355]<br />

♦ “Der <strong>UltraLite</strong>-Generator” [<strong>UltraLite</strong> Datenbankhandbuch, Seite 99]<br />

♦ “Datenmengen zum separaten Synchronisieren planen” [MobiLink Clients,<br />

Seite 306]<br />

87


security-Synchronisationsparameter<br />

Funktion Stellen Sie den <strong>UltraLite</strong>-Client so ein, dass er die<br />

Certicom-Verschlüsselungstechnik verwendet, um Nachrichten mit dem<br />

MobiLink-Synchronisationsserver auszutauschen.<br />

Getrennt lizenzierbare Option erforderlich<br />

Die Nutzung der Certicom-Technologie setzt voraus, dass Sie die getrennt<br />

lizenzierbare SQL Anywhere Studio-Sicherheitsoption erwerben, und ist<br />

außerdem Exportbeschränkungen unterworfen. Weitere Hinweise zu dieser<br />

Option finden Sie unter “Willkommen bei SQL Anywhere Studio” [SQL<br />

Anywhere Studio Erste Orientierung, Seite 4].<br />

Zugriffsmethoden Dieser Parameter wird in <strong>Java</strong> nicht verwendet.<br />

Um die sichere Synchronisation von <strong>UltraLite</strong>-<strong>Java</strong>-Anwendungen zu<br />

verwenden, wählen Sie einen separaten Datenstrom. Weitere Hinweise<br />

finden Sie unter “Synchronisationsparameter initialisieren” auf Seite 47.<br />

Siehe auch ♦ “Synchronisationsparameter “Security”” [MobiLink Clients, Seite 357]<br />

♦ “MobiLink-Transportschichtsicherheit” [MobiLink<br />

Administrationshandbuch, Seite 183].<br />

88


Kapitel 5. Referenz der Synchronisationsparameter<br />

security_parms-Synchronisationsparameter<br />

Funktion Legt die Parameter fest, die für die Transportschichtsicherheit erforderlich<br />

sind. Dieser Parameter muss in Verbindung mit dem Parameter security<br />

verwendet werden.<br />

☞ Weitere Hinweise finden Sie unter<br />

“security-Synchronisationsparameter” auf Seite 88.<br />

Zugriffsmethoden Dieser Parameter wird in <strong>Java</strong> nicht verwendet.<br />

Um die sichere Synchronisation von <strong>UltraLite</strong>-<strong>Java</strong>-Anwendungen zu<br />

verwenden, wählen Sie einen separaten Datenstrom. Weitere Hinweise<br />

finden Sie unter “Synchronisationsparameter initialisieren” auf Seite 47.<br />

Anwendung Die Sicherheitsparameter ULSecureCerticomTLSStream() und<br />

ULSecureRSATLSStream() verfügen über eine Zeichenfolge, die aus<br />

folgenden fakultativen Parametern besteht, die in einer durch Strichpunkte<br />

getrennten Zeichenfolge bereitgestellt werden:<br />

♦ certificate_company Die <strong>UltraLite</strong>-Anwendung akzeptiert<br />

Serverzertifikate nur, wenn das Unternehmensfeld des Zertifikats mit<br />

diesem Wert übereinstimmt. Standardmäßig ist dieses Feld nicht<br />

markiert.<br />

♦ certificate_unit Die <strong>UltraLite</strong>-Anwendung akzeptiert Serverzertifikate<br />

nur, wenn das Unternehmensfeld des Zertifikats mit diesem Wert<br />

übereinstimmt. Standardmäßig ist dieses Feld nicht markiert.<br />

♦ certificate_name Die <strong>UltraLite</strong>-Anwendung akzeptiert nur<br />

Serverzertifikate, wenn das Feld für den gemeinsamen Namen auf dem<br />

Zertifikat mit diesem Wert übereinstimmt. Standardmäßig ist dieses Feld<br />

nicht markiert.<br />

Zum Beispiel:<br />

ul_synch_info info;<br />

...<br />

info.stream = ULSocketStream();<br />

info.security = ULSecureCerticomTLSStream();<br />

info.security_parms =<br />

UL_TEXT( "certificate_company=<strong>Sybase</strong>" )<br />

UL_TEXT( ";" )<br />

UL_TEXT( "certificate_unit=Sales" );<br />

Der security_parms-Parameter ist eine Zeichenfolge und hat standardmäßig<br />

den Wert Null.<br />

Wenn Sie die sichere Synchronisation verwenden, müssen Sie im<br />

<strong>UltraLite</strong>-Generator auch die Befehlszeilenoption -r verwenden. Weitere<br />

89


Hinweise finden Sie unter “Der <strong>UltraLite</strong>-Generator” [<strong>UltraLite</strong><br />

Datenbankhandbuch, Seite 99].<br />

Siehe auch ♦ “Synchronisationsparameter “Security Parameters”” [MobiLink Clients,<br />

Seite 358]<br />

90


stream-Synchronisationsparameter<br />

Kapitel 5. Referenz der Synchronisationsparameter<br />

Funktion Setzt den MobiLink-Synchronisationsdatenstrom für die Verwendung bei<br />

der Synchronisation fest.<br />

☞ Weitere Hinweise finden Sie unter<br />

“stream_parms-Synchronisationsparameter” auf Seite 94.<br />

Zugriffsmethoden ianywhere.ultralite.runtime.UlStream getStream( )<br />

void setStream( ianywhere.ultralite.runtime.UlStream Datenstrom )<br />

Standardwert Der Parameter hat keinen Standardwert und muss explizit festgelegt werden.<br />

Anwendung<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setStream(new UlSocketStream() );<br />

opts.setStreamParms( "host=myserver;port=2439" );<br />

// set other options here<br />

conn.synchronize( opts );<br />

Wenn der Datenstromtyp einen Parameter erfordert, müssen Sie diesen mit<br />

dem Parameter stream_parms übergeben. Anderenfalls setzen Sie den<br />

Parameter stream_parms auf Null.<br />

Die folgenden Datenstromfunktionen sind verfügbar, allerdings sind nicht<br />

alle auf allen Zielplattformen verfügbar:<br />

Datenstrom Beschreibung<br />

ActiveSync (für <strong>Static</strong><br />

<strong>Java</strong> nicht verfügbar)<br />

ActiveSync-Synchronisation (nur Windows CE)<br />

☞ Eine Liste der Datenstromparameter finden<br />

Sie unter “ActiveSync-Protokolloptionen”<br />

[MobiLink Clients, Seite 371].<br />

UlHTTPStream() Synchronisieren über HTTP<br />

Der HTTP-Datenstrom verwendet TCP/IP als<br />

zu Grunde liegendes Transportmittel. <strong>UltraLite</strong>-<br />

Anwendungen agieren als Webbrowser und der<br />

MobiLink-Synchronisationsserver als Webserver.<br />

<strong>UltraLite</strong>-Anwendungen senden POST-<br />

Anforderungen, um Daten an den Server zu<br />

senden, und GET-Anforderungen, um Daten<br />

vom Server zu lesen.<br />

☞ Eine Liste der Datenstromparameter finden<br />

Sie unter “HTTP-Protokolloptionen” [MobiLink<br />

Clients, Seite 376].<br />

91


92<br />

Datenstrom Beschreibung<br />

UlHTTPSStream() Synchronisieren über den HTTPS-Synchronisationsdatenstrom.<br />

Der HTTPS-Datenstrom verwendet SSL oder<br />

TLS als zu Grunde liegendes Protokoll. Er<br />

arbeitet über Internetprotokolle (HTTP und<br />

TCP/IP).<br />

Der HTTPS-Datenstrom benötigt die Anwendung<br />

der von Certicom bereitgestellten Technologie.<br />

Die Nutzung der Certicom-Technologie<br />

setzt voraus, dass Sie die getrennt lizenzierbare<br />

SQL Anywhere Studio-Sicherheitsoption erwerben,<br />

und ist außerdem Exportbeschränkungen<br />

unterworfen. Weitere Hinweise zu dieser Option<br />

finden Sie unter “Willkommen bei SQL<br />

Anywhere Studio” [SQL Anywhere Studio Erste<br />

Orientierung, Seite 4].<br />

☞ Eine Liste der Datenstromparameter finden<br />

Sie unter “HTTPS-Protokolloptionen” [Mobi-<br />

Link Clients, Seite 377].<br />

ULSocketStream() Synchronisieren über TCP/IP.<br />

☞ Eine Liste der Datenstromparameter finden<br />

Sie unter “TCP/IP-Protokolloptionen” [Mobi-<br />

Link Clients, Seite 375].<br />

UlSecureSocketStream() TCP/IP oder HTTP-Synchronisation mit<br />

Transportschichtsicherheit, die Ellipsenkurven-<br />

Verschlüsselung verwendet.<br />

☞ Eine Liste der Datenstromparameter<br />

finden Sie unter “UlSecureSocketStream-<br />

Synchronisationsparameter” [MobiLink Clients,<br />

Seite 380].<br />

UlSecureRSASocket-<br />

Stream()<br />

TCP/IP oder HTTP-Synchronisation mit<br />

Transportschichtsicherheit, die RSA-<br />

Verschlüsselung verwendet.<br />

☞ Eine Liste der Datenstromparameter finden<br />

Sie unter “UlSecureRSASocketStream-<br />

Synchronisationsparameter” [MobiLink Clients,<br />

Seite 379].<br />

☞ Weitere Hinweise zu Datenströmen der <strong>Java</strong>-Synchronisation finden Sie<br />

unter “Synchronisationsparameter initialisieren” auf Seite 47.


Kapitel 5. Referenz der Synchronisationsparameter<br />

Siehe auch ♦ “Synchronisationsparameter “Stream Type”” [MobiLink Clients, Seite 362]<br />

93


stream_parms-Synchronisationsparameter<br />

Funktion Legt Netzwerkprotokolloptionen zur Konfiguration des<br />

Synchronisationsdatenstroms fest.<br />

Eine Zeichenfolge, die aus einer durch Strichpunkte getrennten Liste von<br />

Optionszuweisungen besteht. Jeder Auftrag hat die Form<br />

Schlüsselwort=Wert, wobei die zulässige Gruppe der Schlüsselwörter vom<br />

Synchronisationsdatenstrom abhängt.<br />

Eine Liste der verfügbaren Optionen für den jeweiligen Datenstrom finden<br />

Sie in den folgenden Abschnitten:<br />

♦ “HTTP-Protokolloptionen” [MobiLink Clients, Seite 376]<br />

♦ “HTTPS-Protokolloptionen” [MobiLink Clients, Seite 377]<br />

♦ “TCP/IP-Protokolloptionen” [MobiLink Clients, Seite 375]<br />

♦ “UlSecureRSASocketStream-Synchronisationsparameter” [MobiLink<br />

Clients, Seite 379]<br />

Zugriffsmethoden java.lang.String getStreamParms( )<br />

void setStreamParms( java.lang.String DatenstromParam )<br />

Standardwert Der Parameter ist fakultativ, eine Zeichenfolge und hat standardmäßig den<br />

Wert Null.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions synch_options = new UlSynchOptions();<br />

synch_opts.setStream( new UlSocketStream() );<br />

synch_opts.setStreamParms( "host=myserver;port=2439" );<br />

Siehe auch ♦ “Synchronisationsparameter “Stream Parameters”” [MobiLink Clients,<br />

Seite 364]<br />

♦ “Netzwerkprotokolloptionen für <strong>UltraLite</strong>-Synchronisationsclients”<br />

[MobiLink Clients, Seite 371].<br />

94


Kapitel 5. Referenz der Synchronisationsparameter<br />

upload_ok-Synchronisationsparameter<br />

Funktion Gibt Auskunft über den Status von MobiLink-Uploads. Der<br />

MobiLink-Synchronisationsserver gibt diese Information an den Client<br />

weiter.<br />

Der Parameter ist schreibgeschützt.<br />

Zugriffsmethoden boolean getUploadOK( )<br />

void setUploadOK( boolean upload_ok )<br />

Anwendung Nach der Synchronisation enthält der Parameter upload_ok den Wert true,<br />

wenn der Upload erfolgreich war. Anderenfalls enthält er false.<br />

Greifen Sie wie folgt auf den Parameter zu:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

// set options here<br />

conn.synchronize( opts );<br />

returncode = opts.getUploadOK();<br />

Siehe auch ♦ “Synchronisationsparameter “Upload OK”” [MobiLink Clients, Seite 367]<br />

95


upload_only-Synchronisationsparameter<br />

Funktion Weist darauf hin, dass bei der aktuellen Synchronisation keine Daten<br />

eingelesen werden sollen. Dies kann Verbindungszeit sparen, vor allem bei<br />

langsamen Kommunikationsverbindungen. Wenn dieser Parameter den Wert<br />

TRUE hat, wartet der Client auf die Sendebestätigung vom<br />

MobiLink-Synchronisationsserver. Danach beendet er die<br />

Synchronisationssitzung erfolgreich.<br />

Zugriffsmethoden boolean getUploadOnly( )<br />

void setUploadOnly( boolean upload_only )<br />

Standardwert Der Parameter ist ein fakultativer boolescher Wert, der standardmäßig<br />

FALSE ist.<br />

Anwendung Setzen Sie den Parameter wie folgt auf “true”:<br />

UlSynchOptions opts = new UlSynchOptions;<br />

opts.setUploadOnly( true );<br />

Siehe auch ♦ “Synchronisationsparameter “Upload Only”” [MobiLink Clients, Seite 367]<br />

♦ “Änderungen hoher Priorität synchronisieren” [MobiLink Clients, Seite 308]<br />

♦ “download_only-Synchronisationsparameter” auf Seite 80<br />

96


Kapitel 5. Referenz der Synchronisationsparameter<br />

user_data-Synchronisationsparameter<br />

Funktion Übergabe von anwendungsspezifischen Informationen an die<br />

Synchronisations-Beobachtungsfunktion.<br />

Zugriffsmethoden java.lang.Object getUserData( )<br />

void setUserData( java.lang.Object user_data )<br />

Anwendung Wenn Sie die Schnittstelle des Synchronisationsbeobachters<br />

UlSynchObserver implementieren, können Sie anwendungsspezifische<br />

Informationen für die Synchronisationsbeobachterklasse bereitstellen, indem<br />

Sie ein Objekt in der Methode setUserData übergeben.<br />

Siehe auch ♦ “Synchronisationsparameter “User Data”” [MobiLink Clients, Seite 368]<br />

♦ “observer-Synchronisationsparameter” auf Seite 84<br />

97


user_name-Synchronisationsparameter<br />

Funktion Eine Zeichenfolge, die den Benutzernamen festlegt, der den<br />

MobiLink-Client für den MobiLink-Synchronisationsserver eindeutig<br />

kennzeichnet. MobiLink verwendet diesen Wert, um den einzulesenden<br />

Inhalt zu bestimmen, den Synchronisationsstatus aufzuzeichnen und nach<br />

Unterbrechungen während der Synchronisation neu aufzusetzen.<br />

Zugriffsmethoden java.lang.String getUserName( )<br />

void setUserName( java.lang.String Benutzername )<br />

Standardwert Der Parameter muss angegeben werden und ist eine Zeichenfolge.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions synch_options = new UlSynchOptions();<br />

synch_opts.setUserName( "mluser" );<br />

Siehe auch ♦ “Synchronisationsparameter “User Name”” [MobiLink Clients, Seite 369]<br />

♦ “MobiLink-Benutzer authentifizieren” [MobiLink Clients, Seite 9].<br />

♦ “MobiLink-Benutzer” [MobiLink Clients, Seite 7].<br />

98


version-Synchronisationsparameter<br />

Kapitel 5. Referenz der Synchronisationsparameter<br />

Funktion Jedes Synchronisationsskript in der konsolidierten Datenbank wird mit einer<br />

Versionszeichenfolge markiert. Es können z.B. zwei verschiedene<br />

download_cursor-Skripten vorhanden sein, die durch unterschiedliche<br />

Versionszeichenfolgen gekennzeichnet werden. Die Versionszeichenfolge<br />

gestattet es einer <strong>UltraLite</strong>-Anwendung, zwischen einer Reihe von<br />

Synchronisationsskripten zu wählen.<br />

Zugriffsmethoden java.lang.String getScriptVersion( )<br />

void setScriptVersion( java.lang.String version )<br />

Standardwert Der Parameter ist eine Zeichenfolge. Standardmäßig handelt es sich dabei<br />

um die MobiLink-Standardversionszeichenfolge.<br />

Anwendung Legen Sie den Parameter wie folgt fest:<br />

UlSynchOptions synch_options = new UlSynchOptions();<br />

synch_opts.setVersion( "default" );<br />

Siehe auch ♦ “Synchronisationsparameter “Version”” [MobiLink Clients, Seite 370]<br />

♦ “Skriptversionen” [MobiLink Administrationshandbuch, Seite 265].<br />

99


100


Index<br />

A<br />

absolute, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

AES, Verschlüsselungsalgorithmus<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 41<br />

afterLast, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

Anregungen<br />

Dokumentation xiii<br />

geben xiii<br />

Anwendungen<br />

Deployment in der <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 60<br />

in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> erstellen 16<br />

schreiben in <strong>Java</strong> 24<br />

Anwendungen in <strong>Java</strong> schreiben 24<br />

Applets<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 57<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispiel ausführen 25<br />

Assistenten<br />

<strong>UltraLite</strong>-Anweisung erstellen 8<br />

<strong>UltraLite</strong>-Projekt erstellen 8<br />

Ausführen<br />

Beispielanwendung 27<br />

B<br />

beforeFirst, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

Beispielanwendung<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 25–27<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> ausführen 27<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> erstellen 26<br />

Benutzerauthentifizierung<br />

getAuthStatus-Methode (<strong>Static</strong> <strong>Java</strong>-API) 77<br />

getAuthValue-Methode (<strong>Static</strong> <strong>Java</strong>-API) 79<br />

getPassword-Methode (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

getUserName-Methode (<strong>Static</strong> <strong>Java</strong>-API) 98<br />

setNewPassword-Methode in <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong> 82<br />

setPassword-Methode (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

setUserName-Methode (<strong>Static</strong> <strong>Java</strong>-API) 98<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>, Gros- und Kleinschreibung<br />

38<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 38, 39<br />

Benutzer-IDs<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 33<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>, Gros- und Kleinschreibung<br />

38<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 38, 39<br />

Beständig speichern<br />

<strong>UltraLite</strong>-Datenbanken 30, 34<br />

Beständige Speicherung<br />

Parameter in<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

C<br />

cache_size, beständige Speicherung, Parameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

ChangeEncryptionKey, Methode<br />

JdbcDatabase-Klasse 43, 69<br />

changeEncryptionKey, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 43<br />

Chiffrierschlüssel<br />

Richtlinien in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 42<br />

Class.forName, Methode 31<br />

ClassNotFoundException 31<br />

close, Methode<br />

JdbcDatabase-Klasse 69<br />

Connect, Methode<br />

JdbcDatabase-Klasse 69<br />

connect, Methode<br />

JdbcConnection-Klasse 63<br />

D<br />

Datenbankdateien<br />

Chiffrierschlüssel in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> ändern<br />

43<br />

Dateinamen in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> einstellen 41<br />

Defragmentierung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 44<br />

Verschleierung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

Verschlüsselung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 42<br />

Datenbanken<br />

in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> erstellen 58<br />

mehrere <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 34<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 34<br />

Verbindungen von <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 30<br />

101


Index<br />

Defragmentierung<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 44<br />

Deployment<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen 60<br />

disableUserAuthentication, Methode<br />

JdbcSupport-Klasse 72<br />

Dokumentation<br />

Konventionen ix<br />

zu SQL Anywhere Studio vi<br />

download-only, Synchronisation<br />

getNewPassword-Method in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong><br />

82<br />

DriverManager, Klasse 31<br />

DriverManager.getConnection(), Methode 31<br />

drop, Methode<br />

JdbcDatabase-Klasse 70<br />

E<br />

Eigenschaftsobjekt<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Verbindungen 34<br />

Einschränkungen<br />

JDBC <strong>UltraLite</strong> 63<br />

enableUserAuthentication, Methode<br />

Einsatz 38<br />

JdbcSupport-Klasse 72<br />

Entwicklungsprozess<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 3<br />

Erstellen<br />

Beispielanwendung 26<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen 16<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 58, 71<br />

F<br />

Fehlerbehandlung<br />

Änderungen in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> vor der<br />

Synchronisation festschreiben 50<br />

getUploadOK-Methode (<strong>Static</strong> <strong>Java</strong>-API) 95<br />

setPing-Methode (<strong>Static</strong> <strong>Java</strong>-API) 86<br />

<strong>UltraLite</strong> JDBC 31<br />

<strong>UltraLite</strong>-Anwendungen 30<br />

Fehlersuche<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>, Entwicklung 50<br />

file_name, beständige Speicherung, Parameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

first, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

Fortschrittsanzeige<br />

102<br />

G<br />

Synchronisation in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 55<br />

Generator<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 58<br />

Generierte Datenbankklasse<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 71<br />

getAuthParms, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 76<br />

getAuthParmsNumber, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 83<br />

getAuthValue, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 79<br />

getDatabaseID, Methode<br />

JdbcConnection-Klasse 64<br />

getDefragIterator, Methode<br />

JdbcConnection-Klasse 64<br />

getDownloadOnly, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

getDriver-Methode 31<br />

getLastDownloadTimeDate, Methode<br />

JdbcConnection-Klasse 65<br />

getLastDownloadTimeLong, Methode<br />

JdbcConnection-Klasse 65<br />

getLastIdentity, Methode<br />

JdbcConnection-Klasse 65<br />

getNewPassword, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 82<br />

getPassword, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

getScriptVersion, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 99<br />

getUploadOK, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 95<br />

getUploadOnly, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

getUserName, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 98<br />

Global Autoincrement<br />

getLastIdentity-Methode für <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong><br />

65<br />

globalAutoincUsage-Methode für <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong> 66<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> setDatabaseID-Methode 67<br />

globalAutoincUsage, Methode<br />

JdbcConnection-Klasse 66<br />

Globaler Datenbankbezeichner


<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 67<br />

grant, Methode<br />

JdbcConnection-Klasse 66<br />

JdbcDatabase-Klasse 70<br />

I<br />

ignored_rows, Synchronisationsparameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 81<br />

isAfterLast, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

isBeforeFirst, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

isFirst, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

isLast, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

J<br />

<strong>Java</strong><br />

<strong>UltraLite</strong>, praktische Einführung 6<br />

<strong>UltraLite</strong>-Beispielprogramm 6<br />

<strong>UltraLite</strong>-Einschränkungen 62<br />

<strong>Java</strong> API<br />

Vorteile von <strong>UltraLite</strong> 4<br />

java_certicom_tls, Strom<br />

MobiLink-Synchronisationsserver 50<br />

java_rsa_tls, Datenstrom<br />

MobiLink-Synchronisatiosnserver 50<br />

<strong>Java</strong>-Applets<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 57<br />

JDBC<br />

Datenbankparameter in <strong>UltraLite</strong>-URL 33<br />

Info zu <strong>UltraLite</strong> 6<br />

Treiber laden 31<br />

Treiber registrieren 31<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> SQL-Anweisungen 37<br />

<strong>UltraLite</strong>-Einschränkungen 62<br />

URLs 32<br />

JDBC, Treiber<br />

mehrere Treiber laden 31<br />

<strong>UltraLite</strong> 31<br />

<strong>UltraLite</strong> laden 31<br />

<strong>UltraLite</strong> registrieren 31<br />

JdbcConnection, Klasse<br />

connect-Methode 63<br />

getDatabaseID-Methode 64<br />

getDefragIterator-Methode 64<br />

Index<br />

getLastIdentity-Methode 65<br />

globalAutoincUsage-Methode 66<br />

grant-Methode 66<br />

Info 63<br />

revoke-Methode 67<br />

setDatabaseID-Methode 67<br />

startSynchronizationDelete-Methode 68<br />

stopSynchronizationDelete-Methode 68<br />

synchronize-Methode 67<br />

JdbcConnection.synchronize, Methode<br />

Info 18, 49<br />

JdbcDatabase, Klasse<br />

close-Methode 69<br />

connect-Methode 30, 69<br />

drop-Methode 70<br />

grant-Methode 70<br />

Info 30, 68, 71<br />

revoke-Methode 70<br />

JdbcDefragIterator, Klasse<br />

Info 71<br />

ulStoreDefragStep-Methode 71<br />

JdbcSupport, Klasse<br />

disableUserAuthentication-Methode 72<br />

enableUserAuthentication-Methode 72<br />

Info 72<br />

JSynchProgressViewer, Klasse<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 55<br />

K<br />

Kennwort<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Synchronisation 82<br />

Kennwörter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 33<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>, Gros- und Kleinschreibung<br />

38<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 38, 39<br />

Kompilieren<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen 59<br />

Konventionen<br />

Dokumentation ix<br />

L<br />

Laden<br />

JDBC-Treiber 31<br />

last, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

103


Index<br />

N<br />

Netzwerkprotokolloptionen<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 94<br />

new_password, Synchronisationsparameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 82<br />

Newsgroups<br />

technische Unterstützung xiii<br />

Nicht-unterstützte Funktionen<br />

<strong>UltraLite</strong>-Einschränkungen 62<br />

Nicht-unterstützte JDBC-Methoden<br />

<strong>UltraLite</strong>-Einschränkungen 63<br />

O<br />

observer, Synchronisationsparameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Beispiel 54<br />

P<br />

persist, Eigenschaft<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 34<br />

persistfile, Eigenschaft<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 34<br />

Praktische Einführung<br />

<strong>UltraLite</strong> <strong>Java</strong> 6<br />

previous, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

Projekte<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 58<br />

Publikationen<br />

setSynchPublication-Methode (<strong>Static</strong> <strong>Java</strong>-API)<br />

87<br />

R<br />

Registrieren<br />

JDBC-Treiber 31<br />

relative, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> JDBC-Unterstützung 62<br />

revoke, Methode<br />

JdbcConnection-Klasse 67<br />

JdbcDatabase-Klasse 70<br />

S<br />

Schlüsseleigenschaft<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 34<br />

setAuthParms, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 76<br />

104<br />

setAuthParmsNumber, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 83<br />

setAuthStatus, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 77<br />

setDatabaseID, Methode<br />

JdbcConnection-Klasse 67<br />

setDefaultObfuscation, Methode<br />

JdbcDatabase-Klasse 71<br />

UlDatabase-Klasse 42<br />

setDownloadOnly, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

setNewPassword, Methode<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 82<br />

setObserver, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 84<br />

setPassword, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

setPing, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 86<br />

setScriptVersion, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-bAPI) 99<br />

setStream, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

setStreamParms, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 94<br />

setSynchPublication, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 87<br />

setUploadOnly, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

setUserData, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 97<br />

setUserName, Methode<br />

Info (<strong>Static</strong> <strong>Java</strong>-API) 98<br />

Sicherheit<br />

Chiffrierschlüssel in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> ändern<br />

43<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken,<br />

Verschlüsselung 42<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Transportschichtsicherheit<br />

49<br />

Verschleierung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

Skriptversionen<br />

getScriptVersion-Methode (<strong>Static</strong> <strong>Java</strong>-API) 99<br />

setScriptVersion-Methode (<strong>Static</strong> <strong>Java</strong>-API) 99<br />

Speicherparameter<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

SQL Anywhere Studio


Dokumentation vi<br />

SQL, Anweisungen<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 37<br />

SQLException<br />

<strong>UltraLite</strong>-Anwendungen 30<br />

Starke Verschlüsselung<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 41<br />

StartSynchronizationDelete, Methode<br />

JdbcConnection-Klasse 68<br />

<strong>Static</strong> <strong>Java</strong>-API<br />

<strong>UltraLite</strong>, Vorteile 4<br />

StopSynchronizationDelete, Methode<br />

JdbcConnection-Klasse 68<br />

<strong>Sybase</strong> Central<br />

<strong>UltraLite</strong>-Projekt SQL-Anweisungen hinzufügen<br />

8<br />

Symbole<br />

in Handbüchern xi<br />

Synchronisationsdatenstrom<br />

UlHTTPStream 47<br />

UlSecureSocketStream 49<br />

UlSocketStream 47<br />

Synchronisationsdatenströme<br />

getStream-Methode (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

setStream-Methode (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

setStreamParms-Methode (<strong>Static</strong> <strong>Java</strong>-API) 94<br />

UlHTTPSStream 47<br />

UlHTTPSStream (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

UlHTTPStream (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

UlSecureRSASocketStream 47<br />

UlSecureSocketStream 47, 49<br />

UlSecureSocketStream (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

UlSocketStream (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

Synchronisationsparameter<br />

getAuthParms-Methode (<strong>Static</strong> <strong>Java</strong>-API) 76<br />

getAuthParmsNumber-Methode (<strong>Static</strong> <strong>Java</strong>-API)<br />

83<br />

getAuthStatus-Methode (<strong>Static</strong> <strong>Java</strong>-API) 77<br />

getAuthValue-Methode (<strong>Static</strong> <strong>Java</strong>-API) 79<br />

getDownloadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

getNewPassword-Methode in <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong> 82<br />

getPassword-Methode (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

getScriptVersion-Methode (<strong>Static</strong> <strong>Java</strong>-API) 99<br />

getStream-Methode (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

getUploadOK-Methode (<strong>Static</strong> <strong>Java</strong>-API) 95<br />

getUploadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

Index<br />

getUserName-Methode (<strong>UltraLite</strong> C/C++) 98<br />

new_password in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 82<br />

setAuthParmsNumber-Methode (<strong>Static</strong> <strong>Java</strong>-API)<br />

83<br />

setDownloadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

setNewPassword-Methode in <strong>UltraLite</strong> <strong>Static</strong><br />

<strong>Java</strong> 82<br />

setObserver-Methode (<strong>Static</strong> <strong>Java</strong>-API) 84<br />

setPassword-Methode (<strong>Static</strong> <strong>Java</strong>-API) 85<br />

setPing-Methode (<strong>Static</strong> <strong>Java</strong>-API) 86<br />

setScriptVersion-Methode (<strong>Static</strong> <strong>Java</strong>-API) 99<br />

setStream-Methode (<strong>Static</strong> <strong>Java</strong>-API) 91<br />

setStreamParms-Methode (<strong>Static</strong> <strong>Java</strong>-API) 94<br />

setSynchPublication-Methode (<strong>Static</strong> <strong>Java</strong>-API)<br />

87<br />

setUploadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

setUserData-Methode (<strong>Static</strong> <strong>Java</strong>-API) 97<br />

setUserName-Methode (<strong>Static</strong> <strong>Java</strong>-API) 98<br />

SynchProgressViewer, Klasse<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-API 55<br />

Synchronisation<br />

Änderungen in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> festschreiben<br />

50<br />

Applets 57<br />

Fortschrittsanzeige in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 55<br />

ignored_ rows, Parameter in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong><br />

81<br />

in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> abbrechen 51<br />

in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> aufrufen 48–50<br />

in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> überwachen 51<br />

<strong>Java</strong>-Anwendung 18<br />

JdbcConnection.synchronize-Methode in<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 18, 49<br />

praktische Einführung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 18<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 46<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> hinzufügen 46<br />

Synchronisation durch reinen Download<br />

getDownloadOnly, Methode (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

setDownloadOnly, Methode (<strong>Static</strong> <strong>Java</strong>-API) 80<br />

Synchronisation mit reinem Upload<br />

getUploadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

setUploadOnly-Methode (<strong>Static</strong> <strong>Java</strong>-API) 96<br />

Synchronize, Methode<br />

JdbcConnection-Klasse 67<br />

synchronize, Methode<br />

JdbcConnection-Objekt 49<br />

105


Index<br />

T<br />

Technische Unterstützung<br />

Newsgroups xiii<br />

Threads<br />

Synchronisationsüberwachung in <strong>UltraLite</strong> static<br />

<strong>Java</strong> 55<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Synchronisation 55<br />

Tipps<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>, Entwicklung 50<br />

Transportschichtsicherheit<br />

java_certicom_tls-Strom 50<br />

java_rsa_tls-Datenstrom 50<br />

<strong>UltraLite</strong> <strong>Java</strong>-Clients 47<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Anwendungen 49<br />

Treiberklasse 31<br />

U<br />

Überwachung der Synchronisation<br />

setObserver-Methode (<strong>Static</strong> <strong>Java</strong>-API) 84<br />

UL_SYNC_ALL, Makro<br />

Publikationsmaske 87<br />

UL_SYNC_ALL_PUBS, Makro<br />

Publikationsmaske 87<br />

ULChangeEncryptionKey, Funktion<br />

Verwendung in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 43<br />

UlDatabase, Klasse<br />

<strong>UltraLite</strong>-Datenbanken verschleiern 42<br />

UlDefnUL_AUTH_STATUS_EXPIRED<br />

auth_status-Wert<br />

Info 77<br />

UlDefnUL_AUTH_STATUS_IN_USE<br />

auth_status-Wert<br />

Info 77<br />

UlDefnUL_AUTH_STATUS_INVALID<br />

auth_status-Wert<br />

Info 77<br />

UlDefnUL_AUTH_STATUS_UNKNOWN<br />

auth_status-Wert<br />

Info 77<br />

UlDefnUL_AUTH_STATUS_VALID<br />

auth_status-Wert<br />

Info 77<br />

UlDefnUL_AUTH_STATUS_VALID_BUT_-<br />

EXPIRES_SOON<br />

auth_status-Wert<br />

Info 77<br />

106<br />

ulgen, Dienstprogramm<br />

<strong>Static</strong> <strong>Java</strong>-API 58<br />

UlHTTPSStream, Objekt<br />

<strong>Java</strong>-Synchronisationsdatenstrom 47<br />

<strong>Java</strong>-Synchronisationsdatenstrom (<strong>Static</strong><br />

<strong>Java</strong>-API) 91<br />

UlHTTPStream, Objekt<br />

<strong>Java</strong>-Synchronisationsdatenstrom 47<br />

<strong>Java</strong>-Synchronisationsdatenstrom (<strong>Static</strong><br />

<strong>Java</strong>-API) 91<br />

ULSecureCerticomTLSStream, Funktion<br />

Sicherheit (<strong>Static</strong> <strong>Java</strong>-API) 89<br />

UlSecureRSASocketStream, Objekt<br />

<strong>Java</strong>-Synchronisationsdatenstrom 47<br />

ULSecureRSATLSStream, Funktion<br />

Sicherheit (<strong>Static</strong> <strong>Java</strong>-API) 89<br />

UlSecureSocketStream, Objekt<br />

Info 49<br />

<strong>Java</strong>-Synchronisationsdatenstrom 47<br />

<strong>Java</strong>-Synchronisationsdatenstrom (<strong>Static</strong><br />

<strong>Java</strong>-API) 91<br />

UlSocketStream, Objekt<br />

<strong>Java</strong>- Synchronisationsdatenstrom (<strong>Static</strong><br />

<strong>Java</strong>-API) 91<br />

<strong>Java</strong>-Synchronisationsdatenstrom 47<br />

UlStoreDefragStep, Methode<br />

JdbcDefragIterator-Klasse 71<br />

UlSynchObserver, Schnittstelle<br />

implementieren in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 52<br />

UlSynchOptions, Objekt<br />

Mitglieder (<strong>Static</strong> <strong>Java</strong>-API) 74<br />

<strong>UltraLite</strong><br />

JDBC-Treiber 31<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong><br />

Info 1<br />

Synchronisation 46<br />

<strong>UltraLite</strong>, Datenbanken<br />

mehrere <strong>Java</strong>-Datenbanken 34<br />

<strong>UltraLite</strong>-Anweisung erstellen, Assistent<br />

verwenden 8<br />

<strong>UltraLite</strong>-Benutzer-IDs<br />

<strong>Static</strong> <strong>Java</strong>-API 38<br />

<strong>UltraLite</strong>-Datenbanken<br />

Benutzer-IDs in der <strong>Static</strong> <strong>Java</strong>-API 38<br />

Benutzer-IDs in <strong>Static</strong> <strong>Java</strong> 39<br />

Verschlüsselung in <strong>Static</strong> <strong>Java</strong> 41<br />

<strong>UltraLite</strong>-Kennwörter


<strong>Static</strong> <strong>Java</strong>-API 38<br />

<strong>UltraLite</strong>-Projekte erstellen, Assistent<br />

verwenden 8<br />

Unterstützung<br />

Newsgroups xiii<br />

URL<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbank 31, 33<br />

V<br />

Verbinden<br />

Eigenschaftsobjekt und <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> 34<br />

mehrere <strong>UltraLite</strong> <strong>Static</strong><strong>Java</strong>-Datenbanken 34<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 30, 31, 38<br />

Verbindungsobjekt 31<br />

Verschleiern<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 41, 71<br />

Verschleierung<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 41<br />

Verschlüsselung<br />

Schlüssel in <strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong> ändern 43<br />

<strong>UltraLite</strong> <strong>Static</strong> <strong>Java</strong>-Datenbanken 41, 42<br />

Vorteile<br />

<strong>UltraLite</strong>, <strong>Static</strong> <strong>Java</strong>-API 4<br />

Vorübergehend speichern<br />

<strong>UltraLite</strong>-Datenbanken 30, 34<br />

Index<br />

107

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!