Bartosz Perek

Bartosz Perek Programista, Asseco
Poland SA

Temat: Java - aplikacja z lokalną bazą danych (plik)

Witam,
otóż zacząłem tworzyć aplikację desktopową w Javie (Swing) i projekt stanął na wyborze bazy danych do programu. Nie wiem jaki silnik wybrać żeby spełniał wszystkie moje wymagania.
1. musi być zapisywany lokalnie, najlepiej w jednym pliku
2. dobrze byłoby gdyby można było bazę zabezpieczyć hasłem
3. oczywiście obsługa SQL itp
4. relacje (choć nie są konieczne bo można to obsłużyć programowo gdyż z SQL nie mam większych problemów).
5. prosta obsługa w javie - tworzę klasę do połączenia a później tylko wykonuję komendy SQL bez żadnego kombinowania
6. darmowa, także dla komercyjnego produktu

Na razie w necie znalazłem informacje na temat SQLite (ale nie można zabezpieczyć hasłem), HSQLBD (nie wiem jak stworzyć bazę w pliku), Derby (też nie wiem jak zrobić plikową bazę danych). Dobrze by było gdyby były dobre przykłady/tutoriale do danej bazy.

I druga sprawa, jak obsłużyć taką bazę w Javie? Dotychczas programowałem aplikacje bazodanowe w PHP i jest to inne podejście. Czy może w klasie głównej stworzyć obiekt klasy do połączenia z DB i przekazywać go do innych klas przez referencję (utrzymując połączenie przez cały czas działania aplikacji) czy też zrobić łączenie "na żądanie", czyli jeżeli pobieramy dane to tworzymy połączenie?

Z góry dzięki za wszelkie sugestie.
Piotr Skoczek

Piotr Skoczek SonarMind, Java
Developer

Temat: Java - aplikacja z lokalną bazą danych (plik)

I druga sprawa, jak obsłużyć taką bazę w Javie? Dotychczas programowałem aplikacje bazodanowe w PHP i jest to inne podejście. Czy może w klasie głównej stworzyć obiekt klasy do połączenia z DB i przekazywać go do innych klas przez referencję (utrzymując połączenie przez cały czas działania aplikacji) czy też zrobić łączenie "na żądanie", czyli jeżeli pobieramy dane to tworzymy połączenie?
W celu obsłużenia bazy danych w javie możesz skorzystać z JDBC(Java DataBase Connectivity) + sterownik odpowiedni dla Twojej bazy danych. Tak jak już napisałeś, tworzysz obiekt Connection i utrzymujesz do niego referencje (możesz zastosować wzorzec singleton). Najlepiej zrób sobie osobną klasę do obsługi bazy danych, w klasie głównej stwórz jej obiekt i komunikuj się poprzez wywoływanie metod. Tworzenie Connection jest kosztowne, dlatego raczej odpada tworzenie połączenia na żądanie. Można również skorzystać z Hibernate, ale jak nie masz aż takiego doświadczenia, to polecam JDBC, ze względu na ręczną kontrolę generowanego SQL.
Ps. Polecam bazę MySqlPiotr Skoczek edytował(a) ten post dnia 17.05.11 o godzinie 11:54

konto usunięte

Temat: Java - aplikacja z lokalną bazą danych (plik)

Bartosz Perek:

Na razie w necie znalazłem informacje na temat SQLite (ale nie można zabezpieczyć hasłem), HSQLBD (nie wiem jak stworzyć bazę w pliku), Derby (też nie wiem jak zrobić plikową bazę danych). Dobrze by było gdyby były dobre przykłady/tutoriale do danej bazy.

HSQLDB z tego co pamiętam głównie pracuje na pliku (a raczej plikach kilku, chyba koło 5). Nie wiem na ile jest istotne Twoje wymaganie by baza była w pliku (jednym).

Generalnie pracę z HSQLDB polecam (przyjaźnie integruje się z Java). Za to MySQL-a zdecydowanie nie polecam (ale nie chcę tu wywoływać flama).
Robert Szułczyński

Robert Szułczyński Menedżer zespołu,
Wolters Kluwer SA

Temat: Java - aplikacja z lokalną bazą danych (plik)

Możesz zainteresować się też bazą H2.
Piotr Skoczek

Piotr Skoczek SonarMind, Java
Developer

Temat: Java - aplikacja z lokalną bazą danych (plik)

>MySQL-a zdecydowanie nie polecam (ale nie chcę tu
wywoływać flama).
A możesz powiedzieć dlaczego ? :) chętnie się dowiem ;D HSQLDB używałem głównie z Hibernatem. Dosyć fajna baza, bo (z tego co pamiętam) nic nie instalowałem.Piotr Skoczek edytował(a) ten post dnia 17.05.11 o godzinie 16:26
Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: Java - aplikacja z lokalną bazą danych (plik)

Piotr Skoczek:
>MySQL-a zdecydowanie nie polecam (ale nie chcę tu
wywoływać flama).
A możesz powiedzieć dlaczego ? :) chętnie się dowiem ;D HSQLDB używałem głównie z Hibernatem. Dosyć fajna baza, bo (z tego co pamiętam) nic nie instalowałem.

Dołączam się do pytania, ja też chętnie poznałbym Twoje zdanie na temat MySQL, może być na priv jeśli będziesz miał chwilę.

Do autora wątku: dlaczego baza musi być w pliku??

konto usunięte

Temat: Java - aplikacja z lokalną bazą danych (plik)

Piotr Skoczek:
A możesz powiedzieć dlaczego ? :) chętnie się dowiem ;D

OFFTOP:

Na szybko:
- niezgodna z SQL-99 (brak with-a szczególnie mnie bolał)
- niestandardowe timestampy (tylko jeden na tabele automatyczny timestamp ??)
- brak constraintów
- typy wyliczeniowe to jakiś żart (brak sprawdzania poprawności)
- lewy import/export (nie obsługiwane złamane linie ??)
- moje osobiste problemy z uprawnieniami - z moich doświadczeń działają niedeterministycznie grant / revoke i flush działał mi zawsze po pewnej bliżej nie-określonej liczbie razy

Miałem kiedyś w notatniku listę 20 rzeczy, które mnie bolały - teraz niestety już nie pamiętam :/

PS. Nie wykluczone, że część z tych rzeczy wynika z niewiedzy - chętnie się o tym dowiem :)
Piotr Skoczek

Piotr Skoczek SonarMind, Java
Developer

Temat: Java - aplikacja z lokalną bazą danych (plik)

Dziękuję;) Ja głównie używam Oracle, ale jak np. stronkę piszę to MySql. http://www.wykop.pl/ramka/164343/sun-koniec-rozwoju-my... Ciekawe ;)Piotr Skoczek edytował(a) ten post dnia 17.05.11 o godzinie 16:51
Bartosz Perek

Bartosz Perek Programista, Asseco
Poland SA

Temat: Java - aplikacja z lokalną bazą danych (plik)

HSQLDB też może być, chodzi o to żeby użytkownik końcowy nie musiał instalować żadnego serwera itp. ani żadnych dodatkowych pakietów poza tymi które dostarczę w aplikacji. To, że baza będzie w kilku plikach to mała niedogodność, ale jeśli np da się ją zabezpieczyć hasłem to już o wiele lepiej niż np sqlite.
Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: Java - aplikacja z lokalną bazą danych (plik)

Piotr Skoczek:
Dziękuję;) Ja głównie używam Oracle, ale jak np. stronkę piszę to MySql. http://www.wykop.pl/ramka/164343/sun-koniec-rozwoju-my... Ciekawe ;)

pod artykułem: Uwaga: powyższe informacje nie są prawdziwe i zostały opublikowane jako żart primaaprilisowy.

Poza tym to jest artykuł sprzed 2 lat, teraz MyQSL rozwija Oracle.
Piotr Skoczek

Piotr Skoczek SonarMind, Java
Developer

Temat: Java - aplikacja z lokalną bazą danych (plik)

Ups.. wybaczcie, nie sprawdziłem tego. Ps. Ale jeśli by się tak stało, to byłby niezły chwyt ze strony Oracle. Wykupić konkurencje, a potem ją zniszczyć dla własnej bazy;)
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: Java - aplikacja z lokalną bazą danych (plik)

Bartosz Perek:
Derby (też nie wiem jak zrobić plikową bazę danych). Dobrze by było gdyby były dobre przykłady/tutoriale do danej bazy.
Ja bym wziął Derby (aka JavaDB). Używaliśmy jej w jednym z projektów w trybie embedded (z szyfrowaniem AES na poziomie bazy) i sprawdzała się bardzo dobrze.

Info o derby w trybie embedded znajdziesz na: http://db.apache.org/derby/papers/DerbyTut/embedded_in...
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: Java - aplikacja z lokalną bazą danych (plik)

Pawel Dolega:
- brak constraintów

PS. Nie wykluczone, że część z tych rzeczy wynika z niewiedzy - chętnie się o tym dowiem :)

Obsługa constraintów zależy od engine'u. InnoDB je wspiera, a w tej chwili jest nawet domyślnie wybierany (kiedyś domyślny był MyISAM).
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Java - aplikacja z lokalną bazą danych (plik)

a może kolega przedstawi case biznesowy bo może baza danych to przerost, może wystarczy zwykły plik xml, csv jakkolwiek.
Z jednej strony baza lokalna z drugiej zabezpieczenie hasłem, relacje choć nie są konieczne... co to za dane będą trzymane w tym nazwijmy to repozytorium?
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Java - aplikacja z lokalną bazą danych (plik)

Bartosz Perek:
I druga sprawa, jak obsłużyć taką bazę w Javie? Dotychczas programowałem aplikacje bazodanowe w PHP i jest to inne podejście. Czy może w klasie głównej stworzyć obiekt klasy do połączenia z DB i przekazywać go do innych klas przez referencję (utrzymując połączenie przez cały czas działania aplikacji) czy też zrobić łączenie "na żądanie", czyli jeżeli pobieramy dane to tworzymy połączenie?

Tak, ale nie przekazuj połączenia jako parametr metod DAO, widziałem takie sztuczki, aż włos na głowie się jeży(bo ktoś źle skonfigurował datasourca i nie działało ;) )! Tutaj masz linka do wzorca DAO -> http://java.sun.com/blueprints/corej2eepatterns/Patter... przeczytaj i stosuj! Stwórz sobie, tj kolega pisał singleton i w DAO wywołuj jego metodę w celu uzyskania połączenia, połączenie utrzymuj w singletonie. Tylko na boga nie rób SQLConnection driven development w warstwie dostępu do danych :D, bo to gwałt na wzorcu DAO!

konto usunięte

Temat: Java - aplikacja z lokalną bazą danych (plik)

Jakub Grabowski:

Obsługa constraintów zależy od engine'u. InnoDB je wspiera, a w tej chwili jest nawet domyślnie wybierany (kiedyś domyślny był MyISAM).

Gwoli ścisłości chodziło mi CHECK contraints, a nie o referential integrity (może nie byłem zbyt dokładny).
Bartosz Perek

Bartosz Perek Programista, Asseco
Poland SA

Temat: Java - aplikacja z lokalną bazą danych (plik)

Adrian Chrzastowski:
a może kolega przedstawi case biznesowy bo może baza danych to przerost, może wystarczy zwykły plik xml, csv jakkolwiek.
Z jednej strony baza lokalna z drugiej zabezpieczenie hasłem, relacje choć nie są konieczne... co to za dane będą trzymane w tym nazwijmy to repozytorium?

Żadne super tajne dane to nie będą. Zwykły program katalogujący pewne powiązane ze sobą rzeczy. Relacje zawsze można programowo obsłużyć, hasło jest tylko po to, żeby co sprytniejszy użytkownik nie grzebał w bazie za pomocą innych narzędzi. XML czy CSV jak dla mnie odpadają bo:
a) nie da się chyba tak łatwo wyszukiwać danych jak w DB (chyba że czegoś nie wiem)
b) wydaje mi się że dość wolno się przetwarzają i do operacji odczytu/zapisu chyba nie będą najlepszym rozwiązaniem.

Jakub, nad Derby na pewno się zastanowię. Jest dobra dokumentacja, kilka przykładów więc można trochę potestować.

Adrian, dzięki za link. Na pewno poczytam i zastosuję. Generalnie w Javie nie robiłem jeszcze aplikacji bazodanowej także lepiej zacząć programować od razu używając dobrych praktyk.



Wyślij zaproszenie do