Използване на бази данни с помощта на Java

Какво представляват базите данни?

Базите данни са средство за събиране и обработване на информация. Една база данни може да се оприличи на съвкупност от таблици. Всяка една таблица съдържа групирана по някакъв признак информация. Табличното представяне на данните, от своя страна, включва групирането на отделните единици по редове и колони. Всяка една таблица от базата данни съдържа описанието на определен обект: например, клиент в магазина и неговите покупки, хотел и неговите характеристики, и др.

Всяка една колона в избрана таблица представлява определен признак на обекта на базата данни и се нарича поле (field). Всеки един ред от таблицата описва един обект и се нарича запис (record). Тогава една таблица в базата данни съдържа описанието на определен брой обекти.

Това, от своя страна, налага едно основно ограничение върху действията, които могат да се извършват с таблиците и информацията, записана в тях: действия могат да се извършват само с цели редове.

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

Още един пример: при сортиране на записите в една база данни, сортирането се извършва по избрано поле или няколко полета в определен ред. Пренареждането на записите става като те се подреждат по ред на нарастване или намаляване на избраното поле, като се разместват цели редове. Недопустимо е разместването на полетата между редовете, защото те описват един определен обект, записан в базата данни.

Достъп до информацията

Табличното представяне на базата данни служи само за онагледяване на процесите, свързани с обработката на информация. Всички тези дейности се извършват от програма, наречена мениджър, която спазва някакви свои вътрешни правила за подреждането и работата с информационния поток, предоставян от потребителя. По този начин тази програма се явява посредник между потребителя на информация и самата информация. Грубо потокът на информация може да се онагледи с помощта на следната диаграма.

От своя страна всяка от програмите за поддържане на база данни притежава свой собствен, в повечето случаи уникален език за комуникация с потребителя. Този език в никакъв случай не е най-удобното средство за управляване на база данни. Той в повечето случаи се състои от двоични кодове, които е трудно да се запомнят и използват. Това е наложило разработването на стандартизиран език, с чиято помощ могат да се извършват различни дейности по обработката на информацията. Този език се нарича SQL. За него ще стане дума малко по-късно. Какъвто и език да се използва, обаче, необходим е някакъв посредник, който да превежда от този език на езика на съответната програма. Този посредник, както в повечето случаи, се нарича драйвер (driver).

Начини за достъп до информацията

Предлагат се различни възможности за обработване на информацията:
  1. Програма от производителя на базата данни
  2. ODBC
  3. OLE
  4. JDBC
Това са едни от най-често срещаните начини за достъп до информацията в базите данни. Всички те, обаче включват една програма, която стои и “слуша” дали някой няма да потърси нейните услуги- така нареченият “сървър” (server), и този който изисква тези услуги:- така наречения “клиент” (client). Това би могло да се онагледи със следния пример:

Да си представим, че базата данни една библиотека. За книгите в тази библиотека (това са отделните записи) се грижи библиотекар (мениджър на базата данни). Когато имаме нужда да ползваме някаква книга ние написваме (или казваме) своята заявка на библиотекаря и той ни дава книгата която желаем.

Примерна база данни

За да правим експерименти ще използваме Hypersonic Database. Мениджърът на тази база данни е написан изцяло на Java. Примерите с които ще работим също ще бъдат на Java. Базата данни може да бъде заредена от

http://hsqldb.sourceforge.net/

Тази база данни има JDBC драйвер. Самият мениджър е много малкък (по-малко от 100KB). Тй има няколко режима на работа, но на тях за сега няма да се спираме. Освен това след снемането на програмата от Интернет получавате още и няколко полезни инструмента за работа с базата данни. Най-често ще използваме мениджъра, който ни е предоставен.

За да можем да го използваме стартираме ..\demo\runManager.bat или отваряме файла memorydbmanager.html в същата директория.

Примерите са с файлови имена разбираеми за Windows, но биха могли да се използват и Linux-ки пътища.

Програма на производителя на базата данни

Всеки производител на програми за поддържане на бази данни предоставя някаква програма, с чиято помощ могат да се обработват таблиците с информация.

Като пример за този тип достъп може да се посочи програмата Microsoft Access. С нейна помощ могат да се съставят бази данни и с помощта на графичния интерфейс информацията да се въвежда и обработва.

Ако разглеждаме аналогията между библиотеката и базите данни, тук библиотекарят е специално обучен да работи с литературата на библиотеката (например техническа литература) и той си има свои бланки за заявяване на книги, свой начин на подреждане на книгите и т.н.

Достъп до базата данни чрез ODBC

Достъпът чрез ODBC поставя още един посредник между потребителя и базата данни. Това, обаче, позволява да се използват стандартите за обмен на информация, които ODBC налага за работа с всяка база данни, която има специален ODBC драйвер. По този начин, например, може да се използва база данни създадена от MySQL, от средата на Microsoft Access.

Аналогията с библиотеката тук изглежда така:

Вие сте попаднали във филиал на някаква верига от библиотеки. Библиотекарят знае по какъв начин може да изиска от централното хранилище книгите, които на вас ви трябват, като от вас се иска да попълните стандартен за вашия клон формуляр. По този начин вие винаги би трябвало да попълвате един и същи формуляр, докато библиотекарят се допитва до определен свой колега за да изиска книгата, която търсите. Неговият колега знае как да се оправи в неговото си хранилище.

Освен да се използва външна програма, всеки потребител, познаващ ODBC стандарта може да си напише собствена програма.

И така, какво е ODBC?

Първо, ODBC представлява набор от библиотеки, съдържащи функции за достъп до бази данни, намиращи се в списъка на ODBC администратора.

Второ, ODBC е стандарт определящ, какви функции трябва да разпознава ODBC драйверът на една база данни.

По този начин, една програма може да бъде написана така, че тя да използва база данни като се обръща към нея по име (например “Служители” или “Заплати”, ...) без да се интересува от това, какъв мениджър стои зад това име. Необходимите и достатъчни условия програмата да работи са наличието на библиотеките на ODBC, регистрирана в ODBC мениджъра база данни.

ODBC е технология разработена от Microsoft, но тя е получила разпространение и при други операционни системи: Linux, Unix, MacOS.

Регистриране на ODBC.

Нека разгледаме как се регистрира една база данни в Microsoft Windows.

Регистрирането на една база данни в ODBC става с помощта на ODBC мениджъра. Неговата икона обикновено се намира в Control Panel при Windows 98 или Administrative Tools при Windows XP.

След стартирането на програмата виждаме следното:

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

На първо време нека разгледаме съдържанието на страницата Drivers.

На тази страница са изброени регистрираните до момента драйвери, за достъп до бази данни. Тази страница е само информационна. Инсталирането и премахването на драйверите става само с помощта на инсталационната програма за съответния мениджър за база данни. Разбира се може да се бръкне и в Registry, но това не е за предпочитане ;-).

От страниците User DSN, System DSN, File DSN може да се регистрира база данни. Всяка една от тези страници носи свои специфични особености за достъпа до базата данни, но тай като целта ни е да се научим да работим с JDBC, тази информация ще я прескочим.

Избираме Add....

Предлага ни се избор на драйвер за бази данни, с който ние ще управляваме нашата информация.

Избираме някой и натискаме Finish. Тук в зависимост от базата данни ни се предоставя различен по вид диалогов прозорец, с чиято помощ настройваме необходимите параметри за нашата база данни. За всеки вид база данни, този прозорец е различен!.

Като резултат се получава нещо подобно на това:

Тази процедура за регистриране на базата данни е важна, защото е възможно с помощта на JDBC да получим достъп до базата данни и през ODBC.

ODBC предлага три различни начина за регистриране на базата данни:

User DSN Съдържа настройките за достъп до базата данни, които са специфични за потребителя. Всички имена на бази данни, декларирани в този прозорец са достъпни само за потребителя, който ги е регистрирал.

System DSN Съдържанието е същото, както при User DSN, но базите данни са достъпни за ползване от всички потребители на компютъра.

File DSN Тук настройките се записват в отделен файл. Преимуществото е, че след настройването на базата данни, вие можете да отидете на друг компютър и да получите достъп до вашата база данни само като копирате файла, който се създава след използването на тази настройка и го регистрирате с ODBC мениджъра.. Файлът е с разширение “.dsn” и съдържа текстова информация. Можете да го разгледате с помощта на Notepad, например.

При създаването на база данни от страницата File DSN първо трябва да изберете името на файла, където да се запишат настройките на базата данни. Ако такъв файл не съществува, можете да си изберете място и име на файла, а ако съществува- избирате го с помощта на Browse.... Следващите стъпки са същите като при User DSN и System DSN.

Пример за регистрация на база данни от страницата File DSN можете да видите тук

OLE (COM)

OLE (COM) Това са имената на технологии за разработване на програми, създадени от Microsoft. Това от една страна означава, че принципите на работа са приложими само за техните операционни системи (от Windows 95 до сега). От друга- операционните системи на Microsoft имат все още най-голямо разпространение по света, което определя голямата вероятност да се сблъскате с подобен начин на програмиране. В общи линии тази технология представлява следното: съществува програмна библиотека, която е инсталирана на вашия компютър. Тя съдържа необходимите средства за извършване на определени дейности (писане на текст, връзка с Интернет, достъп до база данни). Тази библиотека е регистрирана с уникален номер в регистрационната база данни на Windows. При нужда клиентската програма може да създаде процес в който да работи тази библиотека. След приключването на работата си библиотеката освобождава ресурсите си. Библиотеките предлагат средства за програмно опознаване на наличните им ресурси: какви методи съдържа библиотеката, какви са техните параметри, и т.н.

Този тип на работа се използва на много места в операционната система на Microsoft. Например при работата на клипборда, при работата с интернет и т.н.

Сред инсталираните по подразбиране библиотеки, Microsoft ви предоставя и библиотеки за работа с бази данни. Това са така наречените MDAC (Microsoft Data Access Components) компоненти. Те използват същата технология OLE (по новият вариант се обозначава COM). С тяхна помощ могат да се пишат програми имащи достъп до бази данни достъпни чрез ODBC или директно управляеми от собствени COM сървъри. Например, такъв собствен сървър си има Microsoft SQL Server.

От всичко казано до тук следва, че тези технологии могат да се използват с всеки език за програмиране, позволяващ работата с интерфейси, динамични библиотеки и т.н. Примерите, които Microsoft предлагат са написани на C++, C#, Visual Basic. Има примери написани и на Java, JavaScript и VBScript, но те отново използват технологии, достъпни само в средата на Microsoft: Microsoft Scripting Host, Microsoft Web Server, Microsoft Java Virtual Machine.

Това, от своя страна ни отдалечава от идеята, заложена в основата на Java на Sun Microsystems: програмата да се напише веднаж и да може да се стартира на всякакви операционни системи (където има Java Virtual Machine, разбира се ;-)).

Затова няма да се задълбаваме повече и преминаваме към същината на въпроса.

SQL

SQL е език с чиято помощ се изискват от мениджъра на базата данни отделни операции върху наличната информация. Важно е да се знае, че този език варира при различните мениджъри. Независимо от това една част от езика остава постоянна и непроменена. Вариациите понякога се наричат диалекти. При работа с определена база данни, програмистът е длъжен да изучи особеностите на диалекта за да може да използва по-пълно възможностите на съответната база данни. При по простите програми стандартният SQL е достатъчен.

Най-често използваните команди от този език са командите за изготвяне на запитване, вмъкване на записи и изтриване на записи.

Всяка една от тези команди изисква познаването на структурата на базата данни: какви таблици има и какви са полетата.

Всяка една от тези команди с нейните параметри се нарича запитване (query).

Ето няколко примера:

SELECT * FROM list- връща списък със всички полета и записи от таблица лист

insert into list values(null,'band','pepe')- вмъква в таблица лист запис със полета null,'band' и 'pepe'./

DELETE FROM list where band='local'- изтрива от таблица лист всички записи, където полето band е равно на 'local'.

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

Пример: При hsqldb синтаксиса на отделните команди се изписва в прозореца под мястото за въвеждане на командата, когато изберете от менюто Command някой ред. От там можете да се запознаете с начина на създаване, изтриване, променяне на таблица и индекс, както и четирите най-използвани команди: SELECT, INSERT, UPDATE и DELETE.

Важно! По принцип, командите в SQL могат да се записват както с главни, така и с малки букви (както се вижда от примерите). Като признак за добро поведение (;-)) се смята командите на SQL да се записват с главни букви, а техните параметри първата буква да е главна, а останалите малки или всичките букви да са малки. Това не е закон, но е препоръчително!

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