Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Podobne dokumenty
Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

akademia androida Składowanie danych część VI

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

Język SQL, zajęcia nr 1

Android - Kontakty. Łukasz Dudzioski

akademia androida Service, BroadcastReceiver, ContentProvider część IV

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

Programowanie w Ruby

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

SQLite w systemie Android. Własny dostawca treści. Materiał teoretyczny

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Przechowywanie danych

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Projektowanie systemów baz danych

Programowanie w Ruby

SQL 4 Structured Query Lenguage

Wykład 5: PHP: praca z bazą danych MySQL

Oracle PL/SQL. Paweł Rajba.

Programowanie w Ruby

Wykład 8. SQL praca z tabelami 5

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Intencje nadawcze. Aktywności mogą rozsyłać komunikaty do wszystkich zainstalowanych aplikacji

Wykład 05 Bazy danych

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

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

Paweł Cieśla. Dokumentacja projektu

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

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

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Database Connectivity

Programowanie obiektowe

Metody dostępu do danych

PHP: bazy danych, SQL, AJAX i JSON

Programowanie aplikacji dla technologii mobilnych. Przygotowanie aplikacji. Tworzenie bazy danych i metod CRUD. Lab 5 SQLite, ListView II

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Polecenia SQL

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

PODSTAWY BAZ DANYCH 13. PL/SQL

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Metody dostępu do danych

NARZĘDZIA WIZUALIZACJI

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

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Microsoft SQL Server Podstawy T-SQL

Zaawansowane aplikacje WWW - laboratorium

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Wyzwalacze (triggery) Przykład

Warsztaty Android, studenckie koło naukowe ISA 2

Wykład 5. SQL praca z tabelami 2

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

15. Funkcje i procedury składowane PL/SQL

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Instalacja MySQL.

Bartosz Jachnik - Kino

DATA STORAGE. wprowadzenie Michał Mynarski. środa, 26 października 11

Programowanie wielowarstwowe i komponentowe

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Relacyjne bazy danych. Podstawy SQL

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

Bazy danych SQLite w Javie

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Dokumentacja SQL API 1

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Bazy Danych i Usługi Sieciowe

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Java: interfejsy i klasy wewnętrzne

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Programowanie aplikacji dla technologii mobilnych. mgr inż. Anton Smoliński

Bazy danych 7. SQL podstawy

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Podstawowe wykorzystanie Hibernate

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

SIECI KOMPUTEROWE I BAZY DANYCH

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Systemy operacyjne na platformach mobilnych

Wykład 6. SQL praca z tabelami 3

PYTANIA - Programowanie aplikacji dla technologii mobilnych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Kurs WWW. Paweł Rajba.

Db4o obiektowa baza danych wersja.net

Bazy danych i usługi sieciowe

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Tworzenie i wykorzystanie usług

Dokumentacja do API Javy.

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

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Transkrypt:

Programowanie aplikacji dla technologii mobilnych mgr inż. Anton Smoliński

Agenda Newsy O SQLite Co to jest? Ograniczenia Obsługa baz danych w Androidzie Tworzenie CURL Content Provider 2

Newsy 3

Newsy Nowa wersja Androida O Zmiany i nowe funkcje Oszczędzanie energii (rygorystyczna kontrola procesów w tle) Nowe kodeki dźwięku dla Bluetooth (aptx) Tryb Picture in Picture Możliwość personalizacji menadżera haseł Wi-Fi Aware (wykrywanie innych urządzeń wi-fi) Powiadomienia (kategorie powiadomień itp.) Wsparcie klawiatury (tabulatory i strzałki) Adaptacyjne ikon Czcionki zasobem do layoutów WebView w osobnych procesach Wsparcie Java 8 API 4

Newsy 5

SQLite 6

. SQLite System zarządzania bazą danych Obsługuje deklaratywny język zapytań SQL Jest Lite-light Nie działa w oparciu o architekturę klient-serwer Zajmuje mało miejsca Wykorzystuje niewiele zasobów Baza danych przechowywana jest jako pojedynczy plik binarny Szybka okrojona z niektórych funkcji Działa na zasadzie B-drzew 7

SQLite SQLite nie implementuje pełnego standardu SQL-92 Brak FOREGIN KEY Wyzwalacze (triggery) mogą działać tylko w trybie FOR EACH ROW Jedynymi modyfikacjami struktury istniejącej tabeli może być zmiana jej nazwy lub dodanie nowej kolumny Brak zagnieżdżonych transakcji Możliwe jedynie łączenie lewostronne tabel (LEFT OUTER JOIN) Widoki są tylko do odczytu Brak użytkowników BD i szczegółowych uprawnień Ograniczone typy danych (5) 8

SQLite Typy danych w SQLite Null pusta wartość Integer liczba całkowita Text typ tekstowy REAL typ zmiennoprzecinkowy BLOB typ nieokreślony (dane binarne) 9

SQLite w Androidzie Plik bazy danych przechowywany jest w lokalizacji: /DATA/data/NAZWA_APLIKACJI/databases/NAZWA_BAZY Aby pracować poprawnie z bazą danych należy zaimportować pakiet android.database android.database.sqlite By obsługiwać bazę danych należy utworzyć klasę dziedziczącą po SQLiteOpenHelper. 10

SQLite w Androidzie Aby zachować kontrolę nad zmianami w strukturze bazy danych dodaje się zmienną statyczną private static final int DATABASE_VERSION = 1; Gdy wersja zostanie zmieniona Helper usunie starą bazę i stworzy nową, ze zmienioną strukturą Helper musi posiadać dwie metody oncreate oraz onupdate, lecz z racji tego, że obudowuje klasę posiada ich znacznie więcej (np. setery i getery) 11

SQLite w Androidzie Mechanizmem systemu Android do składowania i obsługi danych są ContentProviders (dostawcy treści). Baza SQLite to sterownik znajdujący się w 2 od dołu powłoce systemu (libraries) Korzystanie z tego sterownika wymaga obudowanie go w tzw. dostawcę treści, czyli klasę potomną po SQLiteOpenHelper Dostawcy treści mogą być zarówno prywatne dla danej aplikacji, jak i ogólnodostępne w systemie 12

SQLite w Androidzie Klucz podstawowy tabel tworzonych w systemie Android powinien mieć nazwę _id, gdyż niektóre klasy (np. SimpleCursorAdapter) operują na takiej nazwie pola Ograniczenie można ominąć stosując mapowanie SQL SELECT moje_id as _id, pole1, pole2; Aby utworzyć nową bazę danych (jej strukturę) można: Utworzyć ją programistycznie wywołując zapytania CREATE TABLE Skorzystać z zewnętrznych narzędzi i załadować odpowiedni plik 13

SQLite w Androidzie - PYTANIE Jaka jest różnica między SQLite, MySQL, PostgreSQL? Która z baz danych jest najlepsza? 14

Bazy danych w Androidzie 15

Bazy danych w Androidzie Aby móc wykorzystywać bazy danych w systemie Android pierwszym krokiem jest utworzenie klasy odzwierciedlającej tabelę Załóżmy przykład: Aplikacja przechowująca dane książki Jedna tabela books Trzy pola id lub _id, title oraz author 16

Bazy danych w Androidzie public class Book { private int id; private String title; private String author; public Book(){} public Book(String title, String author) { super(); this.title = title; this.author = author; } } @Override public String tostring() { return "Book [id=" + id + ", title=" + title + ", author=" + author + "]"; } 17

Bazy danych w Androidzie Do obsługi bazy rekomendowane jest utworzenie klasy potomnej po SQLiteOpenHelper, która będzie odpowiadać za wszystkie operacje na danej bazie Metody oncreate i onupdate pozwalają na tworzenie struktury bazy i jej aktualizację przy wprowadzanych zmianach. W metodzie onupdate zazwyczaj usuwa się starą bazę i tworzy nową (o ile została zmieniona struktura) do tego celu używa się zmienną private static final DATABASE_VERSION Utworzona w ten sposób klasa jest warstwą pośrednią między aplikacją a bazą danych odpowiada modelowi z MVC W praktyce Helper powinien odpowiadać pojedyńczej tabeli z bazy danych 18

Bazy danych w Androidzie public class MySQLiteHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "BookDB"; @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // Drop older books table if existed db.execsql("drop TABLE IF EXISTS books"); public MySQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void oncreate(sqlitedatabase db) { // SQL statement to create book table String CREATE_BOOK_TABLE = "CREATE TABLE books ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "title TEXT, " + "author TEXT )"; } // create books table db.execsql(create_book_table); } } // create fresh books table this.oncreate(db); Aby użyć gotowej bazy z zewnętrznego pliku należy użyć metody SQLiteDatabase.openDatabase(), Lub przekopiować zawartość pliku bazy 19

Bazy danych w Androidzie CRUD Create Read Update Delete Realizowane poszczególnymi metodami w Helperze Metody wywołują i obsługują zapytania SQL Warto utworzyć zmienne statyczne z nazwami kolumn (w przypadku ich zmiany), oraz elementami wspólnymi dla wszystkich zapytań. 20

Bazy danych w Androidzie public void addbook(book book){ // 1. get reference to writable DB SQLiteDatabase db = this.getwritabledatabase(); // 2. create ContentValues to add key "column"/value ContentValues values = new ContentValues(); values.put(key_title, book.gettitle()); values.put(key_author, book.getauthor()); // 3. insert db.insert(table_books, // table null, //nullcolumnhack values); // 4. close db.close(); } Dadanie wpisu wymaga obiektu ContentValues, przechowującego pary Kolumna->Wartość db.insert() zwraca id utworzonego rekordu, lub -1 jeżeli nie uda się go utworzyć nullcolumnhack kolumny wypełnane nullami 21

Bazy danych w Androidzie public int updatebook(book book) { // 1. get reference to writable DB SQLiteDatabase db = this.getwritabledatabase(); // 2. create ContentValues to add key "column"/value ContentValues values = new ContentValues(); values.put("title", book.gettitle()); values.put("author", book.getauthor()); // 3. updating row int i = db.update(table_books, //table values, // column/value KEY_ID+" =?", // selections new String[] { String.valueOf(book.getId()) }); //selection args // 4. close db.close(); return i; Aktualizacja przebiega podobnie do dodania Dodatkowo należy ustawić warunek który obiekt ma być aktualizowany Metoda db.update() zwraca liczbę zmienionych wierszy } 22

Bazy danych w Androidzie public void deletebook(book book) { // 1. get reference to writable DB SQLiteDatabase db = this.getwritabledatabase(); // 2. delete db.delete(table_books, //table name KEY_ID+" =?", // selections new String[] { String.valueOf(book.getId()) }); //selections args } // 3. close db.close(); Usuwanie wierszy z podanej tabeli odbywa się za pomocą metody db.delete() Warunek rozbity jest na klauzulę i argumenty W klauzuli znak?[s] oznacza odwołanie do kolejnego argumentu Metoda db.delete() zwraca liczbę usuniętych wierszy By skasować wszystko klauzula powinna przyjmować wartość 1 23

Bazy danych w Androidzie ppublic List<Book> getallbooks() { List<Book> books = new LinkedList<Book>(); // 1. build the query String query = "SELECT * FROM " + TABLE_BOOKS; // 2. get reference to writable DB SQLiteDatabase db = this.getwritabledatabase(); Cursor cursor = db.rawquery(query, null); // 3. go over each row, //build book and add it to list Book book = null; if (cursor.movetofirst()) { do { book = new Book(); book.setid(integer.parseint(cursor.getstring(0))); book.settitle(cursor.getstring(1)); book.setauthor(cursor.getstring(2)); // Add book to books } } books.add(book); } while (cursor.movetonext()); // return books return books;.rawquery() przyjmuje zapytanie SQL zwracając kursor ustawiony na początek danego zapytania (wyników).query() robi to samo, lecz podajemy tylko parametry (a nie zapytanie SQL) Cursor iterator po bazie danych 24

Bazy danych w Androidzie - PYTANIE Do czego służy zmienna DATABASE_VERSION? Jak można się zabezpieczyć przed SQL-Injection? 25

Content Providers 26

Content Providers Idea Content Provider-ów Spójny interfejs dostępu do danych Możliwość zmiany źródła danych, bez konieczności zmiany innych elementów 27

Content Providers Content Providery umożliwiają dzielenie się danymi pomiędzy aplikacjami Np. książka kontaktów w Androidzie udostępnia Content Provider, dzięki któremu inne aplikacje mogą pobrać zapisane kontakty (i je edytować, usuwać, dodawać) ContactsContract.RawContacts.CONTENT_URI publiczny adres URI umożliwiający dostęp do zasobu kontaktów (podawany jako 1 parametr w ContentResolver) 28

Content Providers Struktura ContentProvider-a Adres URI: <prefix>://<authority>/<data_type>/<id> <prefix> - zawsze content:// <authority> - nazwa pakietu lub usługi systemowej <data_type> - typ danych zwracany przez dany provider <id> - specyficzny identyfikator zasobu Np.: content://contacts/people/5 29

Content Providers Tworząc Content Providera należy przeciążyć metody: oncreate() Uruchomiana przy starcie ContentProvidera. query() Pobiera żądanie, zwraca obiekt Cursor. insert() Dodanie nowego obiektu do ContentProvidera. delete() Usunięcie istniejącego obiektu z ContentProvidera. update() Edycja istniejącego obiektu w ContentProviderze. gettype() Zwraca MIME type przechowywanych obiektów (tożsame z tym co znajduje się w URI <data_type>) 30

Content Providers Content provider jako jeden z głównych komponentów do budowy aplikacji musi być zarejestrowany w pliku AndroidManifest.xml <provider android:name="studentsprovider" <android:authorities="com.example.provider.college"> </provider> Znając authorities i datatype można pobrać dane z innej aplikacji 31

Content Providers public class StudentsProvider extends ContentProvider { static final String PROVIDER_NAME = "com.example.provider.college"; static final String URL = "content://" + PROVIDER_NAME + "/students"; static final Uri CONTENT_URI = Uri.parse(URL); private SQLiteDatabase db; @Override public boolean oncreate() { Context context = getcontext(); DatabaseHelper dbhelper = new DatabaseHelper(context); db = dbhelper.getwritabledatabase(); return (db == null)? false:true; } 32

Content Providers @Override public Uri insert(uri uri, ContentValues values) { } @Override public Cursor query(uri uri, String[] projection, String selection,string[] selectionargs, String sortorder) { } @Override public int delete(uri uri, String selection, String[] selectionargs) { } @Override public int update(uri uri, ContentValues values, String selection, String[] selectionargs) { } 33

Content Providers @Override public String gettype(uri uri) { switch (urimatcher.match(uri)){ /** * Get all student records */ case STUDENTS: return "vnd.android.cursor.dir/vnd.example.students"; /** * Get a particular student */ case STUDENT_ID: return "vnd.android.cursor.item/vnd.example.students"; default: throw new IllegalArgumentException("Unsupported URI: " + uri); } } 34

Content Providers Aby korzystać z ContentProviderów udostępnianych przez aplikację nie trzeba posiadać specjalnych uprawnień Oznacza to, że każda aplikacja za pomocą interfejsu z ContentProvidera może Pobierać, Dodawać, Edytować, Usuwać elementy Aby zablokować którąś z tych opcji przy tworzeniu Content Providera odpowiednia metoda powinna nic nie robić 35

Content Providers - PYTANIE Do czego tworzy się Content Providery? Co to jest adres URI czym różni się od URL? 36

Koniec! mgr inż. Anton Smoliński 37