Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.
-
Upload
thomasina-johns -
Category
Documents
-
view
215 -
download
1
Transcript of Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.
![Page 1: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/1.jpg)
Persistence 2: SQLite
CS 344 Mobile App DevelopmentRobert Muller
![Page 2: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/2.jpg)
CS 344 Mobile App Development - Muller
Today
• SQL Concepts
• Using SQLite
• Demo
![Page 3: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/3.jpg)
CS 344 Mobile App Development - Muller
SQL Concepts
• SQL == Structured Query Language;
• Query a front-end connected to a database;
• SQL – very widely used;
• SQLite : A light-weight version of SQL; fast with a small footprint
• SQL/SQLite APIs available for most major programming languages: C, Java, Python, Ruby, …
![Page 4: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/4.jpg)
CS 344 Mobile App Development - Muller
An SQL Database is a Collection of Named Tables
![Page 5: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/5.jpg)
CS 344 Mobile App Development - Muller
An SQL Table has Columns (aka Fields) & Rows
Country Continent Capital Population Area
Mexico North America Mexico City 106,000,000 1,923,039
Ghana Africa Accra 23,000,000 238,540
Bolivia South America La Paz 9,000,000 1,083,000
Italy Europe Rome 60,000,000 301,230
France Europe Paris 62,000,000 545,630
Countries
![Page 6: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/6.jpg)
CS 344 Mobile App Development - Muller
Each column has a given Name and Datatype
Country Continent Capital Population Area
Mexico North America Mexico City 106,000,000 1,923,039
Ghana Africa Accra 23,000,000 238,540
Bolivia South America La Paz 9,000,000 1,083,000
Italy Europe Rome 60,000,000 301,230
France Europe Paris 62,000,000 545,630
Countries
Continent : string Population : int
![Page 7: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/7.jpg)
CS 344 Mobile App Development - Muller
SQL Queries
• A client (human or software) can issue queries that can:
– retrieve information from the database;
– create new tables;
– can modify one or more of the tables in the database.
![Page 8: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/8.jpg)
CS 344 Mobile App Development - Muller
Country Continent Capital Population Area
Mexico North America Mexico City 106,000,000 1,923,039
Ghana Africa Accra 23,000,000 238,540
Bolivia South America La Paz 9,000,000 1,083,000
Italy Europe Rome 60,000,000 301,230
France Europe Paris 62,000,000 545,630
Countries
sqlite> SELECT Country, Capital FROM Countries Country Capital
Mexico Mexico City
Ghana Accra
Bolivia La Paz
Italy Rome
France Paris
![Page 9: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/9.jpg)
CS 344 Mobile App Development - Muller
![Page 10: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/10.jpg)
CS 344 Mobile App Development - Muller
SQL Options
• Sql Framework must be linked into project• DB made off-line and is read-only:– Can be made with sqlite3 command interface– Dropped into application bundle
• Read/write DB:– Can be made off-line, stashed in bundle and then
copied to Documents– Can be made and modified in Documents
• DB is off-device
![Page 11: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/11.jpg)
CS 344 Mobile App Development - Muller
SQLite Interfaces
• Command Line/Shell
• APIs
![Page 12: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/12.jpg)
CS 344 Mobile App Development - Muller
SQL Command Line
> sqlite3 ./mydatbase.db
SQLite version 3.6.12Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>
sqlite> create table contacts (id integer primary key autoincrement, name text, address text, phone text);
sqlite> .tablescontacts
![Page 13: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/13.jpg)
CS 344 Mobile App Development - Muller
SQL Command Linesqlite> insert into contacts (name, address, phone) values ("Michael Blair", "12 A
Street, Berkeley CA", "916-555-2323");
sqlite> insert into contacts (name, address, phone) values ("Mike Parks", "10 Upping Street, Boise ID", “444-444-1212");
sqlite> select * from contacts;1|Michael Blair|12 A Street, Berkeley CA|916-555-23232|Mike Parks|10 Upping Street, Boise ID|444-444-1212
sqlite> select * from contacts where name="Mike Parks";2|Mike Parks|10 Upping Street, Idaho|444-444-1212
sqlite> .exit
![Page 14: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/14.jpg)
CS 344 Mobile App Development - Muller
Command Line InterfacePopulating the Countries Table
/> sqlite3sqlite> CREATE TABLE Countries (Country TEXT, Continent TEXT, Capital TEXT, Population integer, Area integer);sqlite> INSERT INTO Countries (Country, …, Area) VALUES
(’Mexico’, …, 1923039);sqlite> …
![Page 15: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/15.jpg)
CS 344 Mobile App Development - Muller
Linking the SQL Framework
![Page 16: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/16.jpg)
CS 344 Mobile App Development - Muller
Marshalling String Representations
NSString *querySQL = @"SELECT COURSE_NUMBER, TITLE FROM
COURSE";
const char *query_stmt = [querySQL UTF8String];
![Page 17: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/17.jpg)
CS 344 Mobile App Development - Muller
sqlite API
• sqlite3_open() - Opens specified database file. If the database file does not already exist, it is created.
• sqlite3_close() - Closes a previously opened database file.
• sqlite3_prepare_v2() - Prepares a SQL statement ready for execution.
• sqlite3_step() - Executes a SQL statement previously prepared by the sqlite3_prepare_v2() function.
![Page 18: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/18.jpg)
CS 344 Mobile App Development - Muller
sqlite API
• sqlite3_column_<type>() - Returns a data field from the results of a SQL retrieval operation where <type> is replaced by the data type of the data to be extracted (text, blob, bytes, int, int16 etc).
• sqlite3_finalize() - Deletes a previously prepared SQL statement from memory.
• sqlite3_exec() - Combines the functionality of sqlite3_prepare_v2(), sqlite3_step() and sqlite3_finalize() into a single function call.
![Page 19: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/19.jpg)
CS 344 Mobile App Development - Muller
SQLite3 API for C : sqlite3.h
int sqlite3_open(const char *filename,
/* db filename */ sqlite3
**ppDb /* OUT: db handle */ );
![Page 20: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/20.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, …);
Problem: sqlite3_open wants to “return” 2 values:
1. a handle for an opened database,
2. a status indicator telling the caller what happened.
![Page 21: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/21.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, myDB);
Stack Frame
myDB
1000
“myFIle.db”
![Page 22: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/22.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, myDB);
Stack Frame
myDB
1000
“myFIle.db”
![Page 23: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/23.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, &myDB);
Stack Frame
myDB
1000
“myFIle.db”
![Page 24: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/24.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, &myDB);
Stack Frame
myDB
1000
“myFIle.db”
1000
![Page 25: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/25.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, &myDB);
Stack Frame
myDB
1000
“myFIle.db”
![Page 26: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/26.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, &myDB);
Stack Frame
myDB
1000
“myFIle.db”
An ActualDB
![Page 27: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/27.jpg)
CS 344 Mobile App Development - Muller
Digression : Pass-by-reference in C
sqlite3 *myDB = NULL;int stat = sqlite3_open(@”myFile.db”, &myDB);
myDB
1000An Actual
DB
![Page 28: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/28.jpg)
CS 344 Mobile App Development - Muller
SQLite3 API for C : exec
int sqlite3_exec( sqlite3 *, /* An open db */ const char *sql, /* SQL cmd */ int (*callback)(void*, int, char**,char**), /* Callback function */ void *, /* 1st arg to callback */ char **errmsg /* Error msg */ );
![Page 29: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/29.jpg)
CS 344 Mobile App Development - Muller
exec callbacks
int sqlite3_exec(sqlite3 *,const char *sql, int (*callback)(void *, int, char**, char**), void *, char **errmsg);
The callback is a function that will be executed once For each row in the relation resulting from the query.
![Page 30: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/30.jpg)
CS 344 Mobile App Development - Muller
Demo
![Page 31: Persistence 2: SQLite CS 344 Mobile App Development Robert Muller.](https://reader035.fdocuments.us/reader035/viewer/2022062714/56649d1c5503460f949f17ed/html5/thumbnails/31.jpg)
CS 344 Mobile App Development - Muller
Documentation & Tutorials
• See e.g.,http://souptonuts.sourceforge.net/
readme_sqlite_tutorial.html