602 JDBC driver
Zde jsou všechny dostupné informace o JDBC driveru pro 602SQL server v. 8.
Novinky
- 30.10.2003 opravena nedostatečná synchronizace požadavků na SQL server ve vícevláknových aplikacích, která se projevovala „zamrznutím“ JDBC driveru
- 31.7.2003 opraveno neuzavírání kurzoru při finalizaci ResultSetů
- 14.3.2003 opravena chyba v implementaci scrollable ResultSetu, která znemožňovala jeho používání, protože ResultSet vždy oznamoval, že neobsahuje žádné záznamy; forward-only ResultSet nebyl touto chybou postižen
- 11.2.2003 opraveno vytváření instance třídy Reader v implementaci interface Clob (metoda getCharacterStream tohoto rozhraní)zprovozněno získávání výstupních parametrů typu CLOB a BLOB z CallableStatement pomocí metod getClob a getBlob
- 6.2.2003 opraveno posílání chybné délky sloupce typu řetězec SQL serveru, kvůli tomuto problému mohl padat SQL server změněn název Properties obsahujících uživatelské jméno a heslo z „User“ a „Password“ na „user“ a „password“; tyto Properties lze předat metodě DriverManager.getConnection() navíc pokud má property „user“ prázdnou hodnotu, pro spojení se použije anonymní uživatel; dříve v této situaci nastal pád driveru metoda getTables() z interface DatabaseMetaData vracela pro typ tabulek VIEW chybné údaje - nyní je to opraveno metoda getPrimaryKeys() z interface DatabaseMetaData vyvolávala výjimku, když se zjišťovaly údaje o primárních klíčích v tabulce, která žádné primární klíče neměla - nyní je to opraveno
- 23.9.2002 změna subprotokolu v URL z „winbase“ na „602sql8“ - validní URL je např.
jdbc:602sql8://vpecuch.software602.cz/moje_aplikace
- 21.8.2002 první vydání driveru pro 602SQL 8.0
Základní informace
Instalace
Driver je dodáván zkompilovaný ve formě JAR archívu 602sql8jdbc.jar (viz soubory ke stažení) obsahujícího *.class soubory.
Před instalací musí být na cílovém počítači nainstalováno Java 2 Standard Edition Runtime Environment (JRE). 602SQL server nemusí být na cílovém počítači nainstalován. Tento driver spolupracuje s JRE verze 1.3 a vyšší.
Soubor 602sql8jdbc.jar je třeba zkopírovat do podadresáře lib\ext v adresáři, ve kterém je instalováno Java 2 Runtime Environment. Pokud je tento adresář např. c:\jre, pak je nutno daný soubor zkopírovat do adresáře c:\jre\lib\ext. Alternativně lze tento soubor zkopírovat do jakéhokoliv adresáře a tento soubor přidat do systémové proměnné CLASSPATH. Zde uvedené názvy adresářů platí pro systém Windows. V jiných operačních systémech je nutno použít názvy adresářů v nich platné.
Základní třída
Základní třída driveru je cz.Software602.SQL8.JDBC.WBDriver. Tato třída implementuje rozhraní (interface) java.sql.Driver.
Číslo verze driveru
Aktuální verze driveru je 1.3 a je určena pro 602SQL server verze 8.0.
Typ driveru
Driver je typu Native-protocol pure Java driver, tj. driver je celý napsán v programovacím jazyku Java a s SQL serverem komunikuje přes TCP/IP spojení proprietálním protokolem pro komunikaci mezi 602SQL serverem a jeho klientem.
Implementovaná verze JDBC
602 JDBC driver implementuje specifikaci JDBC verze 2.1 s omezeními danými specifickými vlastnosti 602SQL serveru a nepodporuje interface specifikované v JDBC Optional extensions (javax.sql).
Implementována jsou následující rozhraní z package java.sql: Driver, DatabaseMetaData, ResultSetMetaData, Connection, Statement, PreparedStatement, CallableStatement, ResultSet, Blob, Clob.
URL definující spojení na 602SQL server
Při otevírání spojení na SQL server se jako parametr předává URL, podle kterého hledá DriverManager vhodný JDBC driver, který je ochoten obsloužit požadavek. Formát URL, který akceptuje 602 JDBC driver je:
jdbc:602sql8://hostname[:port]/aplikace
Kde „hostname“ je název počítače (tj. buď IP adresa, nebo DNS jméno počítače) „port“ je port na kterém je spuštěn 602SQL server a „aplikace“ je název aplikace (v terminologii 602SQL), resp. katalog (v terminologii JDBC), se kterou chceme pracovat. Pokud není zadán port, pak se použije port 5001, na kterém se standardně spouští 602SQL server.
Příklady
jdbc:602sql8://jasper.kolej.mff.cuni.cz/TestApp jdbc:602sql8://192.168.2.163/esupport jdbc:602sql8://localhost:8001/wbdrive
Další informace je možné JDBC driveru předat v parametru Properties metody DriverManager.getConnection(), který obsahuje Name=Value hodnoty. Driver rozeznává dva řetězce:
user - uživatelské jméno, pod kterým se chceme přihlásit password - heslo pro autorizaci uživatele Pokud není uživatel specifikován, připojí se 602 JDBC driver jako anonymní uživatel.
Pozor: 602SQL server, na který je vytvářeno spojení pomocí 602 JDBC driveru, musí umožňovat komunikaci s klienty pomocí protokolu TCP/IP, a to i v případě, že SQL server a aplikace využívající JDBC driver běží na stejném počítači!
Soubory ke stažení
602sql8jdbc.jar JAR archív s 602 JDBC driverem pro 602SQL server v. 8
Instalace driveru do Sun ONE Studio (Forte For Java)
Sun ONE Studio je integrované vývojové prostředí pro vývoj aplikací v jazyku Java. Lze jej zdarma získat na adrese http://www.sun.com.
Driver nainstalujte podle výše uvedeného popisu do JRE. Pokud je spuštěno Sun ONE Studio, pak jej restartovat (ukončit a znovu spustit). V okně Explorer zvolit záložku Runtime. Na této záložce zvolit větev Databases→Drivers. V kontextovém menu této větve zvolit příkaz Add driver. Objeví se dialog „Add JDBC Driver“. V dialogu vyplnit údaje takto: Name: „602SQL 8.0“; případně lze zvolit nějaké jiné pojmenování JDBC driveru Driver: „cz.Software602.SQL8.JDBCWBDriver“; zde je nutno zadat název třídy, která implementuje rozhraní java.sql.Driver Database URL prefix:
"jdbc:602sql8://<computer>:<port>/<catalog>";
při připojování ke konkrétní databázi je nutno místo závorek <..> vyplnit skutečné údaje, tj. místo <computer> IP adresu (nebo DNS jméno) počítače, na kterém běží 602SQL server poskytující služby prostřednictvím protokolu TCP/IP místo <port> číslo portu, na kterém daný SQL server běží - pokud běží na standardním portu, lze celou část „:<port>“ z Database URL vynechat místo <catalog> název aplikace, se kterou chceme pracovat Po stisknutí tlačítka OK se zaregistruje JDBC driver pro přístup k 602SQL serveru
Příklady
Forward-only ResultSet
// nejdříve načteme základní třídu 602 JDBC driveru // tím se driver zaregistruje u DriverManagera Class.forName("cz.Software602.SQL8.JDBC.WBDriver"); // vytvoří se objekt Connection - spojení se jménem con Connection con = DriverManager.getConnection( "jdbc:602sql8://localhost/application", "myLogin", "myPassword"); // vytvoří se nový objekt Statement - příkaz se jménem stmt Statement stmt = con.createStatement(); // vytvoří se nový objekt ResultSet - výsledek dotazu se jménem rs, // jehož obsahem má být výsledek dotazu stmt, který má vybrat z tabulky // Table1 hodnoty sloupečků a,b,c ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); // v následujícím cyklu probíhá čtení hodnot z rs while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); // a následuje zpracování načtených dat }
Scrollable ResultSet
// nejdříve načteme základní třídu 602 JDBC driveru // tím se driver zaregistruje u DriverManagera Class.forName("cz.Software602.SQL8.JDBC.WBDriver"); // vytvoří se objekt Connection - spojení se jménem con Connection con = DriverManager.getConnection( "jdbc:602sql8://localhost/application", "myLogin", "myPassword"); // vytvoří se nový objekt Statement - příkaz se jménem stmt Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); // vytvoří se nový objekt ResultSet - výsledek dotazu se jménem rs, // jehož obsahem má být výsledek dotazu stmt, který má vybrat z tabulky // Table1 hodnoty sloupečků a,b,c ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); // rs nastavíme za poslední záznam rs.afterLast(); // v následujícím cyklu probíhá čtení hodnot z rs, záznamy budeme číst v obráceném pořadí while (rs.previous()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); // a následuje zpracování načtených dat }
Známá omezení
Tato omezení mohou být odstraněna v budoucích vydáních driveru.
metody getExportedKeys() a getImportedKeys() z interface DatabaseMetaData vždy vracejí prázdnou množinu záznamů metoda position() z interface Clob a Blob vyvolá výjimku, protože tuto funkcionalitu nelze efektivně poskytnout bez toho, aby instance příslušné třídy v sobě držela celý CLOB, což by vzhledem k potenciálně neomezené délce CLOBů mělo výrazný vliv na paměťové nároky a stabilitu driveru