0% found this document useful (0 votes)
27 views61 pages

13 SQLite

Uploaded by

nadiabha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views61 pages

13 SQLite

Uploaded by

nadiabha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 61

CS371m - Mobile Computing

Persistence - SQLite
In case you have not taken
347: Data Management
or worked with databases
as part of a job, internship,
or project:
2
Databases
• RDBMS
– relational data base management system
• Relational databases introduced by
E. F. Codd in the 1970s
• Did Codd win the Turing Award?
A. Yes
B. No
• Relational Database
– data stored in tables
– relationships among data stored in tables
– data can be accessed and viewed in
different ways 3
Example Database
• Wines

Web Database Applications with PHP and MySQL, 2nd Edition ,


by Hugh E. Williams, David Lane 4
Relational Data
• Data in different tables can be related
– hence, relational database

5
Keys
• Each table has a key
• Column used to uniquely identify each row

KEYS

6
SQL and SQLite
• Structured Query Language
• a programming language to manage data
in a RDBMS
• SQLite implements most,
but not all of SQL
– http://www.sqlite.org/

7
Aside - Database Admins
• full time jobs
• ERCOT = Electric
Reliability Council
of Texas

8
Database Admins

9
SQLite and Android
• Databases created with applications are
accessible by name to all classes in
application, but no outside applications
• Creating database:
– create subclass of SQLiteOpenHelper and
override onCreate() method
– execute SQLite command to create tables in
database
– onUpgrade() method for later versions of app
and database already present
10
SQL and Databases
• SQL is a language used to manipulate and
manage information in a relational database
management system (RDBMS)
• SQL Commands:
• CREATE TABLE - creates a new database table
• ALTER TABLE - alters a database table
• DROP TABLE - deletes a database table
• CREATE INDEX - creates an index (search key)
• DROP INDEX - deletes an index
11
SQL Commands
• SELECT - get data from a database table
• UPDATE - change data in a database table
• DELETE - remove data from a database
table
• INSERT INTO - insert new data in a
database table

12
ANDROID AND SQLITE

13
Android and SQLite
• SQLite "baked into" Android.
• Device will have SQLite and apps can
create and use databases.
• Not necessary to add third party library
or jar to your app.
• Many developers use a third party
library to ease the syntax burden of
using SQLite directly in their code.
14
Android and SQLite
• SQLiteDatabase class
• methods to programmatically interact
with SQLite database
• SQLiteDatabase has methods to create,
delete, execute SQL commands, and
perform other common database
management tasks.
• database restricted to application
– unless create content provider
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
15
Android and SQLite
• Build database on the fly in application
• example (movie ratings) has no built in
data to start with
• possible to create database ahead of
time and include in apk
• move from apk to Android database on
first use

http://stackoverflow.com/questions/5627037/how-can-i-embed-an-sqlite-database-into-an-application

16
Creating Database
• Example: Movie Rating App
• Stores user ratings
• Not a complex example
• Database only has one table
– overkill in this scenario
• Adapted from Deitel Address Book
Application

17
Classes
MovieRaterActivity
Starting Activity
Displays List of RatedMovies
click on Movie Title menu - Add Rating

ViewRating AddEditRating
Show Rating
Add or Edit Rating
and Information
menu - Edit Rating

menu - Delete Rating


DatabaseConnector
Remove row from database Interact With Database
18
MovieRaterActivity
• ListlView
• Queries data base for
all names / titles
• Clicking on Title
brings up that rating
in ViewRating

19
Menu for MovieRaterActivity
• Only one app bar
item
• button to Add
Rating
• Brings up
AddEditRating
Activity

20
ViewRating
• Pulls all data from
database for row
based on name / title
• Use of a RatingBar
• ViewRating has its
own Action Bar items

21
ViewRating Menu
• Edit Rating starts AddEditRating activity
and populates fields with these values
(place in Extras)
• Delete Rating brings up confirmation
Dialog
Edit Rating Delete Rating

22
AddEditRating
• Add Rating
– fields are blank
• Consider adding a
button for date picker
instead of typing data
• Must enter title / name
• other fields can be
blank
23
AddEditRating
• When title clicked in
main Activity,
MovieRaterActivity
• Make changes and
click save

24
DatabaseConnector Class
• Start of class

25
DatabaseConnector Class

26
Creating Database
• Via an inner class that extends
SQLiteOpenHelper
• Used to create database first time app
run on a device
• also used to update database if you
update your app and alter the structure
of the database

27
Creating Database
• The key method in DatabaseOpenHelper

28
Creating Database
• The String parameter is a SQLite command
• ratings is name of table
• table has seven columns
– _id, name, genre, dateSeen, tag1, tag2, rating
• storage classes for columns:
– TEXT, INTEGER, REAL
– also NULL and BLOB (Binary Large OBject)
• _id is used as primary key for rows

29
Updating Database
• Quite likely you change the set up of you
database over time
– add tables, add columns, remove tables or
columns, reorganize
– referred to as the schema of the database
• onUpgrade method for class that extends
SQLiteOpenHelper
– for converting database on device (from
previous version of your app) to scheme used by
newer version of app
– not trivial! 30
Aside - Contract Class
• If you plan to use the database in
multiple activities and components of
your app
– consider creating a Contract Class
• A class with constants that define table
names and columns
– instead of hard coding in multiple places
• Android has built in ContactsContract
and CalendarContract classes
31
Databases on Device

• can pull database and view


• data/data/app package/database
• sqlitebrowser is a decent tool 32
sqlite browser
• Entire Database:
– Recall, we created a single table

33
sqlite browser
• ratings table

34
sqlite Manager for Firefox
• Alternative to sqlite Viewer

35
Inserting Data
• ContentValues: object with key/value
pairs that are used when
inserting/updating databases
• Each ContentValue object corresponds to
one row in a table
• _id being added and incremented
automatically

36
Inserting Data
• In AddEditRating
• When save button clicked

37
Inserting Data
• Key method in DatabaseConnector

nullColumnHack, for inserting empty row


38
More on insert
• The second parameter
• nullColumnHack
– that's the parameter identifier
• "optional; may be null. SQL doesn't allow inserting
a completely empty row without naming at least
one column name. If your provided values (second
parameter) is empty, no column names are known
and an empty row can't be inserted. If not set to
null, the nullColumnHack parameter provides the
name of nullable column name to explicitly insert a
NULL into in the case where your values is empty."
http://tinyurl.com/kpl3ow7 39
Updating Data
• In AddEditRating
• When save button clicked
• notice id added

40
Updating Data
• In DatabaseConnector

41
Query Data
• Getting a single row by _id
– in order to populate ViewRating
– In DatabaseConnector

42
Query Data
• Get all rows
– still In DatabaseConnector
• To populate the ListView in the
MovieRaterActivity
• only getting _id and name columns

43
Cursors
• When you execute a query on a database
in Android …
• you get a Cursor back
• http://developer.android.com/reference/android/database/Cursor.html

• "Cursor provided random [access] read-


write access to the result of a query"
• Commonly used in other database
implementations / models

44
Cursor
• find out number of rows in result with
getCount()
• iterate over rows
– moveToFirst(), moveToNext()
• determine column names with
getColumnNames()
• get values for current row

45
Cursor
• To use all the data …
• wrap the Cursor in a
SimpleCursorAdapter
• pass the Adapter to a ListView or other
view to handle lots of data
• NOTE: result must contain an integer
column named _ID that is unique for the
result set
– used as id for row in ListView
46
Database Connection
• Recall:

47
MovieRaterActivity
• Rating Adapter is a SimpleCursorAdapter
– recall ArrayAdapter from CountryList
• from onCreate method

48
Populate List in MovieRater

• Recall, accessing a database may block


the UI thread

49
Obtaining Cursor in MovieRater

50
Clicking on Item in List
• _id not displayed but still part of entry in
list -> use _id to get back to database row

51
Deleting Data
• Menu Option in ViewRating

52
Other Cursor Options
• moveToPrevious
• getCount
• getColumnIndexOrThrow
• getColumnName
• getColumnNames
• moveToPosition
• getPosition

53
Possible Upgrades
• Add functionality to
– show all movies that share a particular
genre
– movies from a date range
– shared tags
– table for the genres (predefined)
• Simply more complex data base queries

54
ALTERNATIVES TO SQLITE
- MOVING HIGHER UP THE FOOD CHAIN

55
Alternatives to sqlite
• When using SQLite you may feel like you
are "Down in the weeds"
• Various alternatives to work higher up the
food chain
– in other words at a higher level of abstraction
• Object Relational Mappers - ORM
• Higher level wrappers for dealing with sql
commands and sqlite databases
• Many ORMs exist
56
ORM Example - Sugar ORM
• Syntactic Sugar?
– what does that mean?
• Install package
• Add to manifest file
• Classes you want stored in database
must extend SugarRecord

57
Example ORM - Sugar ORM

58
Example ORM - Sugar ORM
• CRUD operations
– create, read, update, destroy
– working with the data

http://satyan.github.io/sugar/getting-started.html
59
Example ORM - Sugar ORM

60
Implications for Movie Rater
• Simple syntax and method calls to make
queries on the database
• In the demo app, Movie Rating should be
its own class
• Could use Sugar ORM to simplify dealing
with the sqlite database

61

You might also like