Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.



Podobne dokumenty
Strumienie i serializacja

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Podstawy i języki programowania

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Programowanie w języku Java. Bazy danych SQLite w Javie

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Strumienie, pliki. Sortowanie. Wyjątki.

akademia androida Składowanie danych część VI

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

JAVA I BAZY DANYCH. MATERIAŁY:

Bezpieczne uruchamianie apletów wg

Platformy Programistyczne Zagadnienia sieciowe i wątki

Java. Michał Wójcik.

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Db4o obiektowa baza danych wersja.net

Katalog książek cz. 2

Metody dostępu do danych

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Dawid Gierszewski Adam Hanasko

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Podejście obiektowe do relacyjnych baz danych Hibernate.

JDBC (Java Database Connectivity vit )

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Programowanie w języku Java

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O)

Programowanie obiektowe

Programowanie 3 - Funkcje, pliki i klasy

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie obiektowe

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Bartosz Jachnik - Kino

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Podstawy obiektowości

Kurs programowania. Wykład 9. Wojciech Macyna

Projektowanie aplikacji internetowych laboratorium

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Programowanie obiektowe

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Wykład 4. Klasa List Kolejki Stosy Słowniki

Zaawansowane aplikacje WWW - laboratorium

Wyjątki (exceptions)

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wykład 10: Wejście i Wyjście

Programowanie obiektowe zastosowanie języka Java SE

Aplikacje w środowisku Java

Wzorce dystrybucji i wspólbieżności autonomicznej

Programowanie obiektowe

Java. Programowanie Obiektowe Mateusz Cicheński

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Aplikacja wielowątkowa prosty komunikator

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Wykład 4: Wejście/wyjście: strumienie Java

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Aplikacje RMI

Komunikacja z użyciem gniazd aplikacje klient-serwer

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Programowanie w języku Java. Kolekcje

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Wykład 2: Podstawy Języka

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Programowanie obiektowe

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Java jako język programowania

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Rozdział 9 Obsługa baz danych w języku Java

JAVA I SIECI. MATERIAŁY:

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Laboratorium Programowania Kart Elektronicznych

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Klasy abstrakcyjne i interfejsy

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Wykład 4. Tablice. Pliki

Wywoływanie metod zdalnych

Transkrypt:

Wstęp Java Zadanie Celem laboratorium jest zapoznanie się z podstawami platformy oraz języka Java. W ramach zadania należy przygotować aplikację zarządzania notatkami użytkownika obsługiwaną z konsoli. Aplikacja powinna pozwalać na przechowywanie notatek w pamięci komputera oraz zapis/odczyt do/z pliku tekstowego i binarnego a także do bazy danych. Realizacja Główna klasa programu Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu. public class App { public static void main(string[] args) { Klasa notatki Należy przygotować klasę pozwalającą na przechowywanie informacji o tytule, treści i dacie notatki. Klasa powinna zawierać prywatne pola typu String, String i Date dostępne poprzez publiczne metody get i set. public class Notatka { private String tytul; public String gettytul() { return tytul; public void settytul(string tytul) { this.tytul = tytul; Kontener z notatkami Należy przygotować klasę spełniającą rolę kontenera dla notatek. Klasa powinna zwierać kolekcję typu Map gdzie kluczami będą identyfikatory typu Integer a wartościami obiekty notatek. Pole kolekcji powinno być prywatne i udostępnione poprzez metody get i set. public class Notatnik { private Map<Integer, Notatka> notatki = new HashMap<>();

Wczytywanie notatek Wszystkie komendy od użytkownika powinny być pobierane ze standardowego wejście za pomocą bajtowego strumienia System.in. Aby wygodnie korzystać ze standardowego strumienia należy go udekorować strumieniem znakowym InputStreamReader. Aby móc wygodnie czytać liniami tekstu należy otrzymany strumień udekorować strumieniem BufferedReader. Od tego momentu można wejście użytkownika wczytywać poprzez metodę readline. InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String line = br.readline(); catch (IOException ex) { Przykładowe wejście programu może wyglądać następująco: add tytuł notatki treść notatki Wartość daty nie musi być wczytywana z wejścia ponieważ obiekt daty stworzony za pomocą konstruktora Date będzie zawierał datę wskazującą na moment stworzenia. Do zamiany obiektu typu String na Integer można skorzystać z metody statycznej Integer.parseInt. InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String line = br.readline(); catch (IOException ex) { String liczbatekstowo = "3"; int liczba = Integer.parseInt(liczbaTekstowo); Notatka notatka = new Notatka(); notatki.put(id, notatka); Wypisywanie notatek Do wypisywanie notatek należy skorzystać ze standardowego wyjścia dostępnego poprzez strumień System.out pozwalającego na wypisanie dowolnego obiektu. Przykładowo użytkownik podaje na wejściu programu: print Następnie na wyjściu otrzymuje: 204-04-06 2:00 tytuł notatki treść notatki Poprawne sformatowanie daty można uzyskać poprzez obiekt SimpleDateFormat. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date teraz = new Date();

String sformatowanadata = dateformat.format(teraz); Aby wygodnie przejrzeć wszystkie notatki można skorzystać z pętli for each i przejrzeć wszystkie klucze i wartości zawarte w mapie. for (Integer klucz : notatki.keyset()) { Notatka wartosc = notatki.get(klucz); Nadpisywanie notatek Próba dodania notatki o identyfikatorze, który już istnieje powinno spowodować rzucenie wyjątku. Należy przygotować własną klasę wyjątku dziedziczącą po klasie Exception i następnie rzucić go w przypadku gdy dodawana notatka już istnieje. public class NotatkaJuzIstnieje extends Exception { if (notatki.contains(id)) { throw new NotatkaJuzIstnieje(); W celu nadpisania notatki użytkownik powinien wpisać polecenie update, a następnie takie same parametry jak w przypadku dodawania notatki. Próba aktualizacji nieistniejącej notatki również powinna skończyć się zgłoszeniem własnego wyjątku. Usuwanie notatek W celu usunięcia notatki użytkownik powinien wpisać polecenie remove a następnie podać jedynie identyfikator notatki do usunięcia. Próba usunięcia nieistniejącej notatki powinna skutkować rzuceniem odpowiedniego wyjątku. notatki.remove(id); Zapisywanie notatek do pliku W celu zapisania wszystkich notatek do pliku tekstowego użytkownik powinien wpisać polecenie save a następnie podać ścieżkę w jakiej notatki powinny być zapisanie. Zapisywanie do pliku można zrealizować poprzez strumień FileWriter, do którego podczas tworzenia można przekazać nazwę pliku. FileWriter fw = new FileWriter("plik"); fw.write("tekst"); fw.write("\n"); catch (IOException ex) { Plik wyjściowy może mieć następującą strukturę: 204-04-06 2:00 tytuł pierwszej notatki treść pierwszej notatki 2 204-04-06 2:02 tytuł drugiej notatki

treść drugiej notatki Odczytywanie notatek z pliku Aby wczytać notatki z pliku użytkownik powinien wpisać polecenie read a następnie ścieżkę do pliku zawierającego notatki. W celu odczytu z pliku można wykorzystać strumień FileReader który podobnie jak w przypadku System.in dla wygody należy udekorować odpowiednim strumieniem. FileReader fr = null; BufferedReader br = null; fr = new FileReader("plik"); br = new BufferedReader(fr); String line = br.readline(); catch (FileNotFoundException IOException ex) { Aby skonwertować tekst reprezentujący datę należy ponownie wykorzystać obiekt SimpleDateFormat. SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String sformatowanadata = "204-04-06 2:5"; Date data = dateformat.parse(sformatowanadata); Serializacja Aby zapisywać i odczytywać notatki w postaci binarnej należy wykorzystać mechanizm serializacji. Serializacja jest procesem przekształcania obiektów klas do strumienia bajtów. Taki strumień może zostać przykładowo zapisany do pliku lub wysłany przez sieć. Aby klasy mogły być poddane serializacji muszą implementować interfejs Serializable. Aby zapisać obiekt do pliku należy użyć strumienia bajtowego FileOutputStream. Sam strumień nie udostępnia metod zapisywania obiektów. Należy go udekorować strumieniem ObjectOutputStream. W przypadku odczytu z pliku należy analogicznie wykorzystać strumienie FileInputStream i ObjectInputStream. public class Notatnik implements Serializable { public class Notatka implements Serializable { FileOutputStream fos = null; ObjectOutputStream oos = null; fos = new FileOutputStream("plik"); oos = new ObjectOutputStream(fos); oos.writeobject(notatnik); catch (FileNotFoundException ex) { Połączenie z bazą danych W celu połączenia z bazą danych należy do projektu dodać bibliotekę z odpowiednim sterownikiem.

Dobór sterownika zależy od wykorzystanej bazy danych. Na laboratorium można skorzystać z bazy danych Derby, zainstalowanej razem z maszyną wirtualną Java i dostępną z poziomu NetBeans IDE. <dependency> <groupid>org.apache.derby</groupid> <artifactid>derbyclient</artifactid> <version>0.0..</version> </dependency> W celu nawiązania połączenia należy skorzystać z klasy DriverManager i metody getconnection, do której przekazuje się adres bazy danych (np.: jdbc:derby://localhost:527/notes), login oraz hasło użytkownika. Bazę danych można stworzyć w NetBeans IDE wybierając zakładkę Services, pozycję Databases i pod pozycję Java DB. Klikając prawym klawiszem myszy na Java DB pojawiają się opcje uruchomienia serwera oraz stworzenia nowej bazy danych. Przy tworzeniu bazy danych należy pamiętać aby zawsze podać jej nazwę oraz login i hasło użytkownika, który będzie mógł się z nią połączyć. Connection connection = null; connection = DriverManager.getConnection("adres", "login", "haslo"); catch (SQLException ex) { finally { if (connection!= null) { connection.close(); catch (SQLException ex) { Pobieranie elementów z bazy Aby pobrać elementy z bazy danych (wykonać zapytanie select) można skorzystać z obiektu Statment lub PreparedStatment (w przypadku gdy zapytanie ma mieć możliwość ustawiania parametrów). Wywołanie zapytania poprzez metodę executequery zwraca iterator ResultSet. Każdy z pozycji iteratora zawiera jeden wiersz z bazy danych, po których można się przesuwać za pomocą metody next. Pobranie wartości dla odpowiedniej kolumny realizuje się przez metody zwracające konkretne typy np.: getstring, getint, itd. Statement select = connection.createstatement(); ResultSet result = select.executequery("select * from notatki"); while (result.next()) { String tytul = result.getstring("tytul"); result.close(); statement.close(); Modyfikacja elementów w bazie Modyfikację elementów zazwyczaj realizuje się przez obiekt PreparedStatement oraz metodę executeupdate. PreparedStatement insert; insert = connection.preparestatement("insert into notatki (tytul) values (?)"); insert.setstring(, "Tytuł"); insert.executeupdate(); insert.close();