UltraLite Static Java Benutzerhandbuch - Downloads - Sybase
UltraLite Static Java Benutzerhandbuch - Downloads - Sybase
UltraLite Static Java Benutzerhandbuch - Downloads - Sybase
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