11. SQLite
"SQLite is a software library that implements a self-contained,
server-less, zero-configuration, transactional SQL database
engine"
"SQLite does not have a separate server process"
"SQLite reads and writes directly to ordinary disk files"
"Think of SQLite not as a replacement for Oracle but as a
replacement for fopen()"
http://www.sqlite.org/about.html
12. Storage Classes
Values are one of the following storage classes:
INTEGER (signed)
REAL
TEXT (UTF)
NULL
BLOB
BOOL (INTEGER 0 or INTEGER 1)
DATE (ISO8601 TEXT or Unix Time INTEGER or Julian days)
TIME (ISO8601 TEXT or Unix Time INTEGER or Julian days)
http://www.sqlite.org/datatype3.html
13. Type Affinity
Columns are one the following type affinities:
INTEGER
REAL
NUMERIC
TEXT (NULL, BLOB)
NONE
Internally values may be casted before stored
http://www.sqlite.org/datatype3.html
15. Foreign keys
"Foreign key constraints are disabled by default (for backwards
compatibility), so must be enabled separately for each
database connection separately." (http://www.sqlite.
org/foreignkeys.html)
Class.forName("org.sqlite.JDBC");
final String url = "jdbc:sqlite:json.db";
SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(true);
Connection connection = DriverManager.getConnection(url,
config.toProperties());
21. Design decisions
Serialization & Deserialization
JSON Serialization and Deserialization is NOT provided
The user selects their favorite JSON library for the task
Versioning is NOT supported
Some JSON libraries support versioning
Some JSON libraries navigates the tree of the desired type
As opposed to navigating the tree of the input
The data type is used as the key / id
E.g. tv.domain.Channel[] or tv.domain.Channel
Multiple instance of the same class must be in a list
JSON should be parsed before it is persisted
23. SmartPhones often...
Comes bundled with support for JSON
Comes bundled with support for SQLite
Receive JSON data from a REST call
JSON Persistence Framework is forthcoming on
Android
iOS
Windows Phone