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

Android - Kontakty. Łukasz Dudzioski

Język SQL, zajęcia nr 1

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

Programowanie w Ruby

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

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

Przechowywanie 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

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

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

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Programowanie w Ruby

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

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

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

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

Programowanie w Ruby

Oracle PL/SQL. Paweł Rajba.

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

Wykład 8. SQL praca z tabelami 5

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

NARZĘDZIA WIZUALIZACJI

Wykład 05 Bazy danych

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

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

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

Projektowanie systemów baz danych

SQL 4 Structured Query Lenguage

Microsoft SQL Server Podstawy T-SQL

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Paweł Cieśla. Dokumentacja projektu

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

Oracle PL/SQL. Paweł Rajba.

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

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

Relacyjne bazy danych. Podstawy SQL

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

Programowanie wielowarstwowe i komponentowe

Metody dostępu do danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

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

15. Funkcje i procedury składowane PL/SQL

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

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

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

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

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

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

Database Connectivity

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

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

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

Metody dostępu do danych

Bazy danych. Polecenia SQL

Warsztaty Android, studenckie koło naukowe ISA 2

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

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

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

PHP: bazy danych, SQL, AJAX i JSON

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

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Wykład 5. SQL praca z tabelami 2

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

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Bloki anonimowe w PL/SQL

Db4o obiektowa baza danych wersja.net

Ref. 7 - Język SQL - polecenia DDL i DML

Paweł Rajba

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

Relacyjne bazy danych. Podstawy SQL

Wzorce dystrybucji i wspólbieżności autonomicznej

Programowanie obiektowe

Bartosz Jachnik - Kino

Wyzwalacze (triggery) Przykład

Android, wprowadzenie do SDK

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

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

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

Bazy danych SQLite w Javie

Bazy danych. Dr inż. Paweł Kasprowski

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Klasy abstrakcyjne, interfejsy i polimorfizm

Bazy Danych i Usługi Sieciowe

Aplikacje w środowisku Java

Dokumentacja do API Javy.

Oracle PL/SQL. Paweł Rajba.

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Bazy danych 7. SQL podstawy

Transkrypt:

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

Agenda Nowości od Google N Android Studio 2.0 SQLite Co to jest? Ograniczenia Obsługa baz danych w Androidzie Tworzenie CURL Content Provider 2

Nowości od Google 3

Nowości od Google 9 marca 2016 plan wydania na Q3 2016 Nowa wersja Androida N Brak oficjalnej nazwy Trwa 1 z 5 etapów Preview (co miesiąc) Zmiany Poprawiono wydajność Zmieniono system praw dostępu do plików Nowy system powiadomień Podzielony ekran Nowe ustawienia Zmiana skalowania ekranu 4

Nowości od Google 7 kwietnia 2016 AndroidStudio 2.0 Zmiany: InstantRun szybkie uruchamianie tworzonych aplikacji (czasami bez jej kompilacji) Nowy AndroidEmulator przyspieszona integraca ADB (w końcu komunikacja z emulatorem jest szybsza niż z fizycznym urządzeniem) CloudTestLabIntegration narzędzie do testowania kompatybilności z innymi urządzeniami GPU Debugger Preview debuger dla OpenGL Przyspieszenie tworzenia Buildów 5

Nowości od Google 10 kwietnia 2016 Plotka o Swift jako języku programowania dla Androida http://android.com.pl/news/62172-google-apple-swift-javaprogramowanie-aplikacje/ Przesłanki odnośnie plotki: Problemy Google z Oracle Spotkanie reprezentantów Ubera, Facebooka i Google Zmiana licencji Swift na OpenSource Zapewnienie interoperacyjności aplikacji między iphone a Androidem 6

SQLite 7

. 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 8

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) 9

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

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. 11

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) 12

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 13

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 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

Content Providers 25

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 26

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) 27

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 28

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>) 29

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 30

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; } 31

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) { } 32

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); } } 33

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ć 34

Koniec! mgr inż. Anton Smoliński 35