Java i przechowywanie danych o pracownikach

0

Witam
Mam pytanie odnośnie przechowywania danych w małym programie. Będzie to program do zarządzania pracownikami i dane pracowników będą musiały być gdzieś zapisane. W jaki sposób przechowuje się takie dane w profesjonalnych aplikacjach dla firm ?? Bazy danych czy jakoś lokalnie w plikach ?? Dzięki z góry.

0

W bazie danych.

0

Takie dane możesz przechowywać w bazie danych. Do tego one są i do tego służą. Na początek jeżeli aplikacja jest mała skorzystaj z plikowej bazy danych np. H2.
W przyszłości jeżeli aplikacja rozrośnie się będziesz mógł zmienić bazę danych na coś większego i profesjonalnego jak np. Postgresql.

0

Ok dzięki.
Jeszcze jedno pytanko. A czy istnieje zrobienie takiej bazy danych (lub listy pracowników) w pliku żeby nie korzystać z baz danych poza komputerem? Chodzi o to, że to będzie około 30 pracowników i zależy mi żeby to działało bez podłączenia do internetu? I czy z takiej listy dałoby się wyszukiwać poszczególnych pracowników, edytować ich itp. jak w normalnej bazie danych za pomocą sqla?

0

Dane pracowników muszą być dobrze zabezpieczone, jest na to jakaś szczegółowa ustawa. Obowiązkowe hasło do programu i to nie 1234. Na pewno nie może być tak, że ktoś sobie skopiuje plik bazy danych i dostanie się do danych pracowników. Zaplanuj sobie od razu zabezpieczenie tych danych.

Najprościej przez ochronę dostępu do plików, np. umieszczając aplikację na serwerze, na którym ustawione są uprawnienia dla użytkowników. Najlepiej, żeby baza danych pracowała w trybie klient-serwer, a jej pliki powinny być niedostępne z zewnątrz.

W środowisku Microsoft powszechnie używa się do tego bezpłatnego Microsoft SQL Server Express, ale inne systemy bazodanowe też mogą być. Przyjrzyj się bezpłatnemu programowi Płatnik. On działa w 2 trybach: z MSSQL i z bazą MS Access, chronioną hasłem.

W zasadzie osoba, która twojego programu będzie używać już powinna mieć odpowiednio zabezpieczony komputer, nawet jak stosuje Excela. Można wpasować się w ten schemat, ale profesjonalnie to tak jak podałem wyżej.

0

Co do zabezpieczania baz danych hasłem to mi to raczej nie potrzebne teraz ale dobrze o tym wiedzieć. Nie wspomniałem wcześniej ale to mój mały projekt do ćwiczeń nikt z tego nie będzie raczej korzystał. Będe miał tam dwie bazy danych zlecenia i pracownicy, do danego zlecenia będę przypisywał danych pracowników na pewien okres czasu. No i wykorzystam tu wszystko czego pÓÓÓÓki co się nauczyłem i ucze czyli Swing, bazy danych, github. Tylko się zastanawiam bo chyba nie wszystkie programy tego typu muszą korzystać z baz danych gdzieś na zewnątrz i jest jakieś inne rozwiązanie. No chyba że jestem w błędzie :).

1

Ja, jeśli nie muszę to nie korzystam z żadnych SQL i NoSQL tylko z prevaylera - bo to proste i szybkie (ale też ma swoje wady - nie polecam zupełnie zielonym, bo trzeba dobrze znać Javę).
Poza tym :bazy danych nie muszą być zewnętrzne - w Javie masz kilka baz SQL które mogą pracować in process w ramach twojego programu: H2, HSQL, Derby.
(coś jak tu//db.apache.org/derby/papers/DerbyTut/embedded_intro.html)
Jeśli chcesz się pouczyć to całkiem dobra opcja. Zawsze potem możesz sie wynieść na zewnętrzna baze bez dużych zmian w programie.

I generalnie jest tak, że jest wiele typów baz danych (nie tylko SQL) i wszystkie są do bani, ale każda ma swoją mocną stronę:

  • jak chcesz robić raporty to SQL świetnie się sprawdza,
  • jak trzymasz dane pod CMS/ Blog - to super jest JCR /Jackrabbit albo coś w stylu MongoDB, albo bazy dokumentowe ogólnie
  • trzymanie/cache prostych danych key/value Store
  • jak ważne jest szukanie tekstu to Lucene
  • a jak przeszukiwanie grafów, połaczenia to Neo4j,
  • dane rozproszone (high availability) - bazy typu cassandra
    i jeszcze pełno innych...
    http://www.ustream.tv/recorded/46673907

W dużych systemach używa się wielu różnych rodzajów baz danych. Kilka SQL, kilka key/value , kilka full text search...

A tak ogólnie to "na pohybel SQL" - DROP DATABASE.

0

@jarekr000000: Czy ten Prevayler jest jeszcze rozwijany? Według strony ostatnia data to: Version 2.6 was released on 2013-01-15. Masz doświadczenie produkcyjne z tą biblioteczką? Jak się utrzymuje, jak się testuje integracyjnie. Ja jak chce mieć głupie, proste persistence to używam MongoDB i Spring Data tzn. kolekcje i obiekty. Do poważnych projektów póki co wolę PostgreSQL. Z ciekawością patrzę na ciekawą hybrydę tzn. ToroDB: implementacja MongoDB w postgresie (obecnie beta). Ogólnie ciekawe, bo jak się uda ToroDB ułatwi raportowanie z pseuo MongoDB (kolekcje zostaną z automatu przetłumaczone na tabele).

2

@margor90 Prevayler nie jest rozwijany tak od 2006 - bo nie było dużej potrzeby. Działa. Dorobiłem kiedyś wraper dla Javy 8 (poprawiłem API) pod hasłem Airomem. I tyle.
Mam na tym kilka małych systemów w różnych miejscach, ale nic wielkiego. Działa (latami).

0

Hej
no więc zacząłem się bawić Derby i stworzyłem tabelę z autoinkrementacją
String createFamiliesT="create table Families("
+ "id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),"
+ "name VARCHAR(20) NOT NULL,"
+ "surname VARCHAR(24) NOT NULL,"
+ "city VARCHAR(20) NOT NULL"
+ ")";

no ale mam problem bo kiedy chcę dodać trzy wartości za pomocą PreparedStatement :

PreparedStatement prst=conn.prepareStatement("insert into FAMILIES values(?,?,?)");

		prst.setString(1, name);
		prst.setString(2, surname);
		prst.setString(3, city);
		prst.execute();

to wywala mi Exception

----- SQLException -----
SQL State: 42802
Error Code: 30000
Message: Liczba przypisanych wartości nie jest taka sama, jak liczba określonych lub sugerowanych kolumn.

Natomiast jak dodaję za pomocą metody Statement to jest ok!!!!

Statement stm=conn.createStatement();
stm.execute("INSERT INTO FAMILIES(name , surname, city) VALUES('jan', 'wwwww', 'lublin')");
stm.close();

Czy ktoś wie jak to rozwiązać z użyciem PreparedStatement ???

0

Wyspecyfikuj kolumny w PreparedStatement, tzn. zamiast:

PreparedStatement prst=conn.prepareStatement("insert into FAMILIES values(?,?,?)");

użyj:

PreparedStatement prst=conn.prepareStatement("insert into FAMILIES(name,surname,city) values(?,?,?)");
0

Hej dziękuję za odpowiedź teraz wszystko działa :)
pozdrawiam

0 użytkowników online, w tym zalogowanych: 0, gości: 0