Introduction to SQLite
in Adobe AIR
Peter Elst - Flash Platform Consultant
Why SQLite in Adobe AIR?
■ Embedded SQL Database Engine

■ Implements most of SQL92

■ Light-weight, cross-platform, open ...
How do you use it?
1. Create a File reference

2. Create an instance of flash.data.SQLConnection and
   flash.data.SQLStatem...
How do you use it?
 import flash.filesystem.File;
 import flash.data.*;

 var dbFile:File =
 File.applicationStorageDirect...
Synchronous versus Asynchronous
■ Synchronous - blocks application until result is available

   var sqlConn:SQLConnection...
flash.data.SQLConnection
■ Connects to the database file

■ Provides events for asynchronous use

■ Schema access
flash.data.SQLStatement
■ Executes a SQL query on the specified database connection

■ Provides events for asynchronous use
...
flash.data.SQLMode
■ SQLMode.CREATE (default)

  ■ open connection and create database if it doesn’t exist

■ SQLMode.READ
...
Storage types
■ NULL - NULL value (null)

■ INTEGER - signed integer (int)

■ REAL - floating point (Number)

■ TEXT - UTF1...
AIR specific column affinities
■ String - String value (equivalent to TEXT)

■ Number - floating point number (equivalent to ...
SQLStatement Parameters
■ The parameters feature protects your SQL statements from
  SQL injection

  var sqlStatement:SQL...
Result Paging
■ Paging allows you to limit the amount of rows you get
  returned when doing a select operation

  var sqlS...
flash.data.SQLResult
■ SQLResult.data - array of objects for each row of the result

■ SQLResult.complete - returns a boole...
Transactions
■ Transactions allow multiple SQL statements to run within one
  write operation to the database

■ Much more...
Database Schema
■ Allows you to introspect tables, views, columns, indices, triggers

 var sqlConn:SQLConnection = new SQL...
Schema demo
Database encryption
■ New feature in AIR 1.5
■ Password protect database files

 var encryptionKey:ByteArray = new ByteArra...
Encryption best practices
■ Do not embed passwords in your application!

■ com.adobe.air.crypto.EncryptionKeyGenerator
   ...
Database synchronization
■ Synchronize database between server and client(s)
■ Some different strategies
     ■ overwrite ...
SQLite Tools
Mac OSX Terminal
Lita - SQLite database administration
DAO-Ext - value object generator
What is DAO?
■ Data Access Objects - abstract interface to a database
     ■ implements common features (select, update, d...
What is DAO?
■ Data Access Objects - abstract interface to a database
     ■ implements common features (select, update, d...
Example VO
 public class contactsVO {

     private var _name:String;

     public function get name():String {
         r...
Example DAO
 public class contactsDAO {

     public function insertRow(rowItem:contactsVO):void {
         ...
     }

  ...
DAO demo
SQLite wrapper classes
■ Simple way to use SQLite features in your application
■ ActionScript 3.0 classes, primarily for u...
SQLite wrapper - SQLite class
■ Properties
    ■ file - name of database file
    ■ connection - returns SQLConnection insta...
SQLite wrapper - Query class
■ Properties
    ■ connection - reference to SQLConnection
    ■ sql - String value of SQL st...
SQLite wrapper demo
Resources
■ Lita - SQLite Administration Tool by David Deraedt
  www.dehats.com/drupal/?q=node/58

■ DAO-Ext by Comtaste
 ...
Thanks for your time
 Any questions or feedback - feel free to get in touch!


    blog       www.peterelst.com
    email ...
Upcoming SlideShare
Loading in...5
×

Introduction to SQLite in Adobe AIR

17,474
-1

Published on

updated presentation on using local SQLite database support in Adobe AIR 1.5 for Flash at the Lake in Zurich - Switzerland (June 26th 2009)

Published in: Technology, Art & Photos
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
17,474
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
311
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Introduction to SQLite in Adobe AIR

  1. 1. Introduction to SQLite in Adobe AIR Peter Elst - Flash Platform Consultant
  2. 2. Why SQLite in Adobe AIR? ■ Embedded SQL Database Engine ■ Implements most of SQL92 ■ Light-weight, cross-platform, open source ■ No setup, configuration or server required ■ Each database is contained within a single file
  3. 3. How do you use it? 1. Create a File reference 2. Create an instance of flash.data.SQLConnection and flash.data.SQLStatement 3. Open the database connection 4. Specify the connection and SQL query to run 5. Run SQLStatement.execute()
  4. 4. How do you use it? import flash.filesystem.File; import flash.data.*; var dbFile:File = File.applicationStorageDirectory.resolvePath("contacts.db"); var sqlConn:SQLConnection = new SQLConnection(); var sqlStatement:SQLStatement = new SQLStatement(); sqlConn.open(dbFile); sqlStatement.sqlConnection = sqlConn; sqlStatement.text = "SELECT * FROM contacts"; sqlStatement.execute(); var result:Array = sqlStatement.getResult().data;
  5. 5. Synchronous versus Asynchronous ■ Synchronous - blocks application until result is available var sqlConn:SQLConnection = new SQLConnection(); sqlConn.open(dbFile); var result:SQLResult = sqlConn.getResult().result; ■ Asynchronous - uses events and event listeners var sqlConn:SQLConnection = new SQLConnection(); sqlConn.addEventListener(SQLResultEvent.RESULT, onSQLResult); sqlConn.addEventListener(SQLResultEvent.ERROR, onSQLError); sqlConn.openAsync(dbFile);
  6. 6. flash.data.SQLConnection ■ Connects to the database file ■ Provides events for asynchronous use ■ Schema access
  7. 7. flash.data.SQLStatement ■ Executes a SQL query on the specified database connection ■ Provides events for asynchronous use ■ Supports result paging
  8. 8. flash.data.SQLMode ■ SQLMode.CREATE (default) ■ open connection and create database if it doesn’t exist ■ SQLMode.READ ■ open connection as read only ■ SQLMode.UPDATE ■ open connection, don’t create database if it doesn’t exist
  9. 9. Storage types ■ NULL - NULL value (null) ■ INTEGER - signed integer (int) ■ REAL - floating point (Number) ■ TEXT - UTF16 text string (String) ■ BLOB - blob of data (ByteArray)
  10. 10. AIR specific column affinities ■ String - String value (equivalent to TEXT) ■ Number - floating point number (equivalent to REAL) ■ Boolean - Boolean class ■ Date - Date class ■ XML - XML class ■ XMLList - XMLList class ■ Object - Object class
  11. 11. SQLStatement Parameters ■ The parameters feature protects your SQL statements from SQL injection var sqlStatement:SQLStatement = new SQLStatement(); sqlStatement.sqlConnection = sqlConn; sqlStatement.text = "SELECT * FROM contacts WHERE id = @ID"; sqlStatement.parameters["@ID"] = someVariable; sqlStatement.execute(); ■ You can use the @ or : symbol to denote a parameter to be replaced, works both string based as index based sqlStatement.parameters[0] = someVariable;
  12. 12. Result Paging ■ Paging allows you to limit the amount of rows you get returned when doing a select operation var sqlStatement:SQLStatement = new SQLStatement(); sqlStatement.sqlConnection = sqlConn; sqlStatement.text = "SELECT * FROM contacts"; sqlStatement.execute(10); ■ You can get the next batch of rows returned by calling the next method on the SQLStatement instance sqlStatement.next();
  13. 13. flash.data.SQLResult ■ SQLResult.data - array of objects for each row of the result ■ SQLResult.complete - returns a boolean indicating whether or not the full result was shown ■ SQLResult.lastInsertRowID - return id for the last row that was inserted ■ SQLResult.rowsAffected - number of rows affected by an insert, update or delete operation
  14. 14. Transactions ■ Transactions allow multiple SQL statements to run within one write operation to the database ■ Much more optimized way of handling large insert operations, allows rollback of the complete transaction if an error occurs var sqlStatement:SQLStatement = new SQLStatement(); sqlStatement.sqlConnection = sqlConn; sqlStatement.text = "INSERT into contacts VALUES (@NAME, @EMAIL)"; sqlConn.begin(); for(var i:uint=0; i<contacts.length; i++) { sqlStatement.parameters["@NAME"] = contacts[i].name; sqlStatement.parameters["@EMAIL"] = contacts[i].email; sqlStatement.execute(); } sqlConn.commit();
  15. 15. Database Schema ■ Allows you to introspect tables, views, columns, indices, triggers var sqlConn:SQLConnection = new SQLConnection(); sqlConn.open(dbFile); sqlConn.loadSchema(); var result:SQLSchemaResult = sqlConn.getSchemaResult(); var table:SQLTableSchema = result.tables[0]; var column:SQLColumnSchema = table.columns[0]; trace(column.name); // returns name of the first column in the first table
  16. 16. Schema demo
  17. 17. Database encryption ■ New feature in AIR 1.5 ■ Password protect database files var encryptionKey:ByteArray = new ByteArray(); encryptionKey.writeUTFBytes("notverysecretpassword"); var sqlConn:SQLConnection = new SQLConnection(); sqlConn.open(dbFile,SQLMode.READ,null,false,1024,encryptionKey);
  18. 18. Encryption best practices ■ Do not embed passwords in your application! ■ com.adobe.air.crypto.EncryptionKeyGenerator ■ Secure solution: creates random salt and stores in the EncryptedLocalStore (linked to user and machine) ■ Prevents dictionary attack ■ com.dehats.air.sqlite.SimpleEncryptionKeyGenerator ■ Less secure but allows access by other users and other applications, doesn’t generate a random salt value. http://bit.ly/SimpleEncryptionKeyGenerator
  19. 19. Database synchronization ■ Synchronize database between server and client(s) ■ Some different strategies ■ overwrite (server overwrites client) ■ check what to synchronize ■ timestamp field ■ field by field comparison ■ dirty flag ■ LiveCycle Data Services has built-in SQLite synchronization support including offline caching and conflict management.
  20. 20. SQLite Tools
  21. 21. Mac OSX Terminal
  22. 22. Lita - SQLite database administration
  23. 23. DAO-Ext - value object generator
  24. 24. What is DAO? ■ Data Access Objects - abstract interface to a database ■ implements common features (select, update, delete, ...) ■ Uses value objects (VO)
  25. 25. What is DAO? ■ Data Access Objects - abstract interface to a database ■ implements common features (select, update, delete, ...) ■ Uses value objects (VO) ■ Value Objects (also known as Data Transfer Objects) ■ don’t implement any behavior ■ encapsulates properties through getter/setter methods ■ represent an entry in a database table
  26. 26. Example VO public class contactsVO { private var _name:String; public function get name():String { return _name; } public function set name(value:String):void { _name = value; } ... }
  27. 27. Example DAO public class contactsDAO { public function insertRow(rowItem:contactsVO):void { ... } public function updateRow(rowItem:contactsVO):void { ... } public function deleteRow(rowItem:contactsVO):void { ... } }
  28. 28. DAO demo
  29. 29. SQLite wrapper classes ■ Simple way to use SQLite features in your application ■ ActionScript 3.0 classes, primarily for use as tags in MXML <sql:SQLite id="myDB" file="contacts.db" open="myQuery.execute()" /> <sql:Query id="myQuery" connection="{myDB.connection}" sql="SELECT * FROM contacts" /> <mx:DataGrid id="myDataGrid" dataProvider="{myQuery.data}" /> <mx:Button label="Refresh data" click="myQuery.execute()" />
  30. 30. SQLite wrapper - SQLite class ■ Properties ■ file - name of database file ■ connection - returns SQLConnection instance ■ Methods ■ open - create database connection ■ close - close database connection ■ Events ■ open - database connection is opened ■ close - database connection is closed ■ error - error connecting to database
  31. 31. SQLite wrapper - Query class ■ Properties ■ connection - reference to SQLConnection ■ sql - String value of SQL statement ■ parameters - parameters for SQL statement ■ data - result returned from query ■ Methods ■ execute - run query on database ■ Events ■ result - result received from query ■ error - error executing query
  32. 32. SQLite wrapper demo
  33. 33. Resources ■ Lita - SQLite Administration Tool by David Deraedt www.dehats.com/drupal/?q=node/58 ■ DAO-Ext by Comtaste code.google.com/p/dao-ext/ ■ Adobe AIR Developer Center www.adobe.com/devnet/air/ ■ Adobe AIR Marketplace www.adobe.com/go/airmarketplace
  34. 34. Thanks for your time Any questions or feedback - feel free to get in touch! blog www.peterelst.com email info@peterelst.com twitter @peterelst e confe rence! rest o f th En joy the
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×