It - archiv

Доступ до БД з сервлета

Тут ви знайдете вичерпну інформацію, про те як отримати доступ до БД, як з нею працювати, і які тут є "підводні камені". Перш за все про те, чому це ми зібралися працювати з БД саме з сервлета. Справа в тому, що інтерес представляється саме в тому щоб, працювати з БД, що знаходиться для користувача на віддаленому сервері, а не на його локальній машині. Оптимальним, на мою думку, це написання зв'язки Аплет-Сервлет. Аплет відповідає за інтерфейс взаємодії користувача з БД. Сервлет - обробляє запити, аплету, працює з БД, і посилає відповідні дані. Тобто вся "внутрішня кухня" покладається на сервлет. Тим більше, що аплету за великим рахунком, і не дозволений доступ до БД. Якщо ж ви зовсім не хочете морочитися, то можете формувати HTML сторінки, замість того, щоб відображати дані через аплет. Для тестування своїх сервлетів я використовую Java Web Server 2.0 - він найбільш повно реалізує технологію сервлетів (це і не дивно, тому що і сервер і сервлети продукція Sun). Отже приступимо.

Варіант 1: Драйвер ODBC

Варіант 2: Драйвер mySQLПрімечаніе: Далі робота з БД, ведеться однаково, незалежно від виду SQL бази, тобто завантажуючи різні драйвери, ми можемо працювати з різними БД, не змінюючи при цьому вихідного тексту (який ми навчимося створювати).

Тут варто зазначити, що отриманий об'єкт Connection, слід зберегти в HttpSession. Для тих, хто не знає, що це таке поясню, на пальцях. Між браузером і сервером, при виклику сервлета утворюється сеанс зв'язку, за яким стежить сервак. Так ось, цей сеанс зв'язку може запам'ятовувати пари типу: Ім'я-Значення, цим ми і скористаємося для того, щоб при наступному виклику сервлета, не встановлювати з'єднання заново, а швиденько отримати його з сеансу зв'язку:

Тепер, коли ми (з таким трудом) отримали росіяни літери, і всякі там дуже потрібні нам циферки, задумаємося про те як би переправити цю всю інформацію аплету. Це зробити дуже легко, пам'ятаючи про те, що наші дані зберігаються в об'єкті Vector, а він в свою чергу реалізує інтерфейс Serializable, що дозволить нам без труднощів переправити дані аплету.

І це, як це не дивно, все, до того ж російські літери не спотворяться, тому що передача здійснитися побайтно. Щоб усе виглядало зовсім вже витончено, наведемо текст приймальної сторони (аплету). Примітка: Треба розуміти, що ми будемо зраджувати дані з аплету сервлету методом POST, тому дані повинні бути у вигляді "ім'я = значення". Це потрібно зробити приблизно так:

Отже процес завершений, аплет отримав дані, які прийшли з БД, за допомогою сервлету, до того ж ми обійшли проблему, пов'язану з кириличними символами. Тепер залишається написати інтерфейс, який би барвисто відобразив ті дані які ми так з успіхом отримали з БД. Для цих цілей я раджу об'єкт JTable бібліотеки Swing. Річ заплутана, але якщо розібратися, то все буде виглядати дуже красиво. Залишилося розібратися з тим як сервлету отримати дані, які задумає послати йому аплет, наприклад при редагуванні БД. Згідно з документацією по JDBC робити це треба приблизно так:

Але, якщо аплет послав дані у вигляді російських букв, то потрібна перекодування отриманого значення: Якщо ви не хочете зв'язуватися з апплетом (це розумно в тому випадку, якщо ваші системні ресурси не дозволяють використовувати бібліотеку Swing), то звичайно ж ви оберете шлях формування динамічних HTML сторінок. Вступати тут слід наступним способом: Причому, якщо ви берете дані з БД, то проблеми з російськими буквами може і не виникнути, наприклад в зв'язці JavaWebServer і Access ніяка перекодування не знадобилася, а ось з mySQL цей номер не пройшов, але тут як ви напевно вже здогадалися, допомагає метод описаний вище, через UnicodeStream. Якщо ж ви хочете бачити на сформованої html сторінці фрагмент кириличного тексту (взятого не з БД): Ну ось і все, начебто про все, про що хотів розповісти, я повідав. Якщо у кого виникнуть питання з приводу моєї статті, пишіть на мило, постараюся відповісти.