Достъп с помощта на JDBC

Първо, нека кажем какво представлява JDBC. JDBC е набор класове и интерфейси написани на Java, позволяващи да се осъществява достъп до различни видове бази данни. Може да се каже, че JDBC е това, което е ODBC за програмиращите на C++, C# и др. Т.е. това е в общи линии програмно средство за достъп до базите данни. Най-общо казано, JDBC се използва за изпращане на SQL команди до съответните програми, обслужващи базите данни.

Една от разликите между JDBC и ODBC е, че JDBC е технология, независима от платформата, на която сте се използва (под платформа се разбира комбинацията операционна система-процесор). Това, между другото е основната идея на Java, която се прилага по този начин и в областта на базите данни. Работата с JDBC за разлика от тази с ODBC е значително опростена. Създателите на JDBC твърдят, че технологията JDBC е разработена на базата на ODBC, но в никакъв случай не се ограничава единствено само с копиране на функционалността на ODBC. Още повече: с помощта на JDBC може да се използват възможностите на ODBC.

За да може да се използва JDBC с някоя база данни е необходимо да има съответния драйвер (както и при ODBC) за да може да се осъществява обмена на информация между вашата програма и мениджъра на съответната информация. Ако такъв драйвер не съществува все още, но е възможно да се работи с помощта на ODBC може да се използва драйверът на JDBC за връзка с ODBC.

Работи се на принципа на системите клиент-сървър.

  1. Осъществява връзка с базата данни.
  2. Съставя се запитване.
  3. Получават се резултатите.
  4. При нужда се връщаме на точка 2.
  5. Прекъсваме връзката с базата данни.

Създаване на база данни

За да можем да започнем работа с някаква база данни първо трябва да я създадем. Нека нашата база данни да се казва “produkti”.

Пример с HSQLDB

Нека да покажем как става това с помощта на hsqldb.

Стартираме HSQLDB_HOME\demo\runManager.bat (или HSQLDB_HOME/demo/runManager.sh при Unix системите).

В прозореца Connect трябва да посочим базата данни с която желаем да установим връзка. Тъй като такава все още не съществува просто пишем името на базата данни такова каквото сме го замислили предварително. При hsqldb името на базата данни се записва в полето URL. Това поле има същото значение, което и параметърът URL, при осъществяването на връзка с базата данни при JDBC. За сега само запомнете къде се е появило името на желаната от нас база данни. Обяснението на отделните елементи ще разберете малко по-късно.

Резултатът от това наше действие е:

Както виждате, вляво се е появило вече името на нашата база данни. За сега, обаче, няма никаква друга информация, с изключение на Properties. Там са описани някои характеристики на базата данни.

Въпрос: Къде се намират файловете на новата ни база данни?

Отговор: Те се намират в директорията HSQLDB_HOME\data.

По подразбиране, всички файлове с които се работи се намират в директорията, от където е стартиран мениджърът на базата данни. Ако разгледаме runManager.bat, ще видим че той съдържа следната информация:

cd ..\data
@java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManager %1 %2 %3 %4 %5 %6 %7 %8 %9

Първият ред ни прехвърля в директория HSQLDB_HOME\data, а вторият стартира самия мениджър, следователно файловете на базата данни би трябвало да са там. И наистина, след изпълнението на тези стъпки там се намират produkti.data, produkti.script и produkti.properties.

Пример с ODBC

Тук ще се опитаме да създадем подобна база данни, от тип Microsoft Access, с която в последствие ще работим чрез JDBC-ODBC.

От страницата System DSN на Data Sources (ODBC) избираме Add...

Избираме посоченият ред и натискаме Finish. Сега трябва да зададем параметрите на новата ни база данни.

В предложения прозорец въвеждаме Data Source Name (ето това означава DSN ;-)) и Description. Тази информация е само помощна. DSN представлява името с което бихме желали да се обръщаме към източника на данни, а Description е малко по-пълно описание на DSN, в случай че сме забравили какво е съдържанието на базата данни.

За да създадем файловете на базата данни, натискаме Create...

Избираме директория, където да поставим единствения за този тип бази данни файл, записваме името му в прозорчето File Name и натискаме OK.

Затваряме и предишния прозорец (ODBC Microsoft Access Setup) с натискане на OK.

Нашата нова база данни е вече налице:

Работа с базата данни.

Първият етап е установяването на връзка с мениджъра на базата данни. За целта е необходимо първо да укажем на JDBC с какъв драйвер ще работим, и после да се опитаме да установим връзка. Това може да е илюстрира със следния пример:

{File HsqldbDemo.java}

1    import java.sql.*;
2
3    public class HsqldbDemo{
4        public static void main(String[] args){
5            try{
6                Class.forName("org.hsqldb.jdbcDriver");
7                Connection conn=DriverManager.getConnection ("jdbc:hsqldb:/hsqldb/data/produkti","sa","");
8                conn.close();
9            }catch(Exception e){
10                e.printStackTrace();
11        }
12        }
13    }

{File HsqldbDemo.java}

.Нека да започнем от ред 1.

java.sql са групата библиотеки, необходими за работа с бази данни, т.е. те съдържат JDBC.

На ред 6 зареждаме драйвера за нашата база данни. В случая той е:

org.hsqldb.jdbcDriver

На ред 7 осъществяваме връзка с нашата база данни и на ред 8 ако всичко е наред приключваме връзката.

Интересно е да се има предвид, че класът DriverManager използван на ред 7 сам би трябвало да определи какъв драйвер е необходим за нашата база данни. Това той познава от адреса, който се подава като първи параметър на метода getConnection. Този адрес има следната структура:

jdbc:подпротокол:местоположение

Подпротоколът представлява езикът който би трябвало да разбира мениджърът на вашата база данни. В нашият случай това би трябвало да е hsqldb (разбира се ;-)). Местоположението указва къде се намира базата данни. Това е необходимо, тъй-като един мениджър би могъл да управлява много бази данни едновременно и затова би трябвало да се посочи желаната от нас. В случая с hsqldb се посочва пълният път до базата данни като в случай, че се работи с Windows “\” се замества с “/”. Пътят би трябвало да е спрямо директорията в която се стартира hsqldb (вече веднъж стана дума за това!) или пълният път до файловете на базата данни.

Въпрос: От къде ще дойде org.hsqldb.jdbcDriver?

Другите два параметъра, които се подават на getConnection представляват потребителското име паролата за достъп. Всяка една база данни си има някаква вградена система за сигурност. По подразбиране при продуктите на Microsoft се съдържа един (поне един) потребител с име “sa”. Този потребител има най-високи привилегии и може да извършва всякакви действия с базата данни (четене на информация, променяне на информация, промяна на структурата на базата данни и т.н.) Ако изрично не укажете, че желаете да имате някаква парола, то достъпът се осъществява само на базата на представеното име. Тъй-като това е по подразбиране, повечето потребители дори и не обръщат внимание, че те са с някакви (максимални при това) права.

Важно: Поставянето на парола винаги е едно добро решение!

Системите за сигурност при различните бази данни действат по различен начин. По тази причина и getConnection може да се извиква с един два или три параметъра.

Например: При MySQL се контролира комбинацията потребителско име, парола и от къде се осъществява връзката, т.е. е налице още един параметър регулиращ сигурността. По този начин може да се позволи на всички потребители, работещи на самия компютър да имат неограничен достъп, докато потребителите, осъществяващи заяваките си за информация от други машини да се диференцират по тези три признака (от къде е осъществена връзката, кой е потребителя и каква му е паролата).

Следва пример за осъществяване на връзка с базата данни, която направихме с Microsoft Access и я направихме достъпна чрез ODBC.

{File AccessDemo.java}

1    import java.sql.*;
2
3    public class AccessDemo{
4        public static void main(String[] args){
5            try{
6                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
7                Connection conn=DriverManager.getConnection ("jdbc:odbc:Produkti","sa","");
8                conn.close();
9            }catch(Exception e){
10                e.printStackTrace();
11        }
12        }
13    }

{File AccessDemo.java}

Разликата, както виждате е в редовете 6 и 7. На ред 6 се указва да се зареди драйверът за работа с ODBC. Този драйвер се доставя с всяка една т инсталациите на Java2.

Задача: Намерете местоположението на sun.jdbc.odbc.JdbcOdbcDriver. Какви файлове още стоят там?

Помощ: Би трябвало да се намира в някоя Java библиотека, разбира се. Java библиотеките са с разширение *.jar. Опитайте да ги отворите с някоя архивираща програма. Ако нямате програма, която специално да отваря jar файлове, копирайте файла някъде, сменете му разширението със zip (demo.jar->demo.zip или demo.jar->demo.jar.zip) и го разархивирайте.

Преди да продължим, нека влезем малко по-надълбоко в подробностите!