Daj się poznać 2017 Programowanie

Połączenie z bazą danych w Azure z Javy

Jak połączyć bazę danych hostowaną w chmurze Azure z Javą? Na pierwszy rzut oka wygląda to na trudne zadanie. W końcu mamy do połączenia technologie z dwóch różnych „obozów”. Microsoft vs. Oracle. .NET vs. Java.

Uczestniczę obecnie w projekcie grupowym na studiach. Potrzebuje on bazy danych. Jest to świetna okazja, żeby sprawdzić jak działa baza danych SQL w Azure. Dodatkowo, projekt jest w Javie więc jest to też test jak Microsoftowa baza danych i chmura współpracuje z technologią inną niż ta giganta z Redmond. W poniższym wpisie przedstawiam jak połączyć naszą aplikację w Javie z bazą danych w chmurze Azure.

Na oficjalnej stronie Microsoftu dotyczącej pomocy przy połączeniu bazy danych hostowanej na Azure możemy przeczytać, że potrzeba nam:

  • Nazwy hosta(serwera) na którym stoi nasz baza danych
  • Nazwy bazy danych
  • Nazwy użytkownika, który ma dostęp do bazy danych(możemy go ustawiać lub utworzyć w portalu Azure)
  • Hasła dla tego użytkownika

Oraz podany jest taki oto kod, który należy skopiować do odpowiedniej klasy lub metody w naszym projekcie:

String hostName = "host";
String dbName = "dbName";
String user = "userNamer";
String password = "password";
String url = String.format("jdbc:sqlserver://%s.database.windows.net:1433;"+
"database=%s;user=%s;password=%s;encrypt=false;"+
"hostNameInCertificate=*.database.windows.net;loginTimeout=30;",
hostName, dbName, user, password);

Tak naprawdę jeśli wiemy, że nie będziemy zmieniać tych danych możemy skopiować cały napis z portalu Azure. Jest on uzupełniony odpowiednimi danymi oprócz hasła. Wtedy uwierzytelnienie staje się jeszcze prostsze.
Znaleźć go możemy wchodząc na bazę danych(instrukcja jak ją utworzyć). W karcie „Przegląd” należy nacisnąć „Pokaż parametry połączenia bazy danych”. W otwartym oknie należy wybrać kartę „JDBC”. Ten ciąg znaków to właśnie parametry naszego połączeni, które możemy podstawić pod String sql. Należy tylko pamiętać o zmianie {your_password_here} na hasło dla naszego użytkownika bazy danych.

Za samo połaczenie z bazą danych odpowiedzialna jest jedna metoda:

connection = DriverManager.getConnection(url);

Oczywiście należy jeszcze obsłużyć wyjątek SQLException który może zostać przez nią rzucony.
Ale w zasadzie do samego połączenia powinno nam wystarczyć tyle.

Jednak została nam ostatnia część układanki i to bez niej nasze wysiłki pójdą na marne. Java do połączenia z bazami danych używa zewnętrznych bibliotek. Korzystają one z API jdbc1. Taką bibliotekę należy zaimportować samodzielnie lub za pomocą narzędzia do kontroli bibliotek.
Nasz projekt korzysta z menedżera bibliotek – Maven. Zresztą Microsoft w oficjalnym dokumencie pisze, ze jest to niezbędne, żeby móc połączyć się z usługami Azure. Do pliku pom.xml należy dodać takie oto znaczniki:

<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
</dependency>

Maven powinien sam zaimportować potrzebną bibliotekę.

Wszystko gotowe, więc teraz czas na odpalenie testów jednostkowych, a w zasadzie testów integracyjnych, które umożliwią sprawdzenie czy połączenie z bazą danych działa. Okazuje się, że DriverManager za pomocą którego łączymy się z bazą danych wyrzuca wyjątek.
Przy debugowaniu odkrywam wiadomość którą ma wyjątek.

Rozwiązanie

Rozwiązaniem jest ręczne ściągnięcie biblioteki z tej strony. Następnie należy ją rozpakować. Można to zrobić do folderu projektu, albo tak jak jest to zalecane przez Microsoft do folderu Program Files(w przypadku Windowsa). Następnie należy dodać ten folder jako folder biblioteki potrzebnej do kompilacji. Linki jak to zrobić w: IntelliJ, Eclipse, NetBeans.

Po tej operacji wszystko powinno chodzić tak jak było to przewidziane od początku.

Jak widać połączenie bazy danych hostowanej na Azure z Javą to proces bardzo przyjemny. Szczerze powiedziawszy bardziej niż się spodziewałem. Wcześniej nie myślałem, że Microsoft poszedł ze swoją chmurą aż tak daleko i udostępnia wsparcie dla wszystkich technologii. Jeżeli tak to wygląda nie tylko dla Javy, ale też dla Pythona, Ruby czy innych języków, to brawa dla Microsoftu. Nie zamykają się tylko na swoje rozwiązania i nie forsują ich na siłę, ale chcą być jak najbardziej multi-platformowi.

Mam jeszcze kilka przemyśleń co do pracy z kodem w Javie. Jest to język nielubiany przez wielu .NETowców. Wprawdzie nie pracowałem w żadnym z nic w dużym projekcie ani nie znam żadnego z nich „na wylot”, to uważam, że oba są nowoczesnymi językami i można w nich zrobić w zasadzie to samo. Nawiązując do tego wpisu, brakuje mi trochę prostoty LINQ  w Javie. W niej bowiem wszystkie zapytania piszemy w czystym SQLu. Jednak po przyzwyczajeniu się do tej zmiany, można operować na bazach danych tak samo sprawnie. Dla kogoś kto bardzo dobrze zna SQL to będzie wręcz zaleta.


  1. Java Database Connectivity

Zostaw odpowiedź

Twój adres email nie zostanie upubliczniony.* Pola wymagane *