The index.html
file containing JavaScript that makes use of the
Encrypted SQL API functionality is listed below.
<!DOCTYPE html> <html manifest="manifest.appcache"> <head> <title> Encrypted SQL API usage example </title> <link rel="x-antenna-managed-webapp-descriptor" href="webapp-descriptor.xml"/> <script type="text/javascript"> var db; function openDB() { if (db == null) { try { var onCreated = function() { printText('db Created/opened'); } printText("Opening database..."); // var radios = document.getElementsByName('sharing'); var sharing; for (var i = 0, length = radios.length; i < length; i++) { if (radios[i].checked) { sharing = radios[i].value; break; } } // db = openDatabase('testdb', '1.0', 'my test database', 2 * 1024 * 1024, sharing); } catch (e) { printText("Error occured in openDB: " + e); } } } function createDBandPopulateSampleData() { try { openDB(); dbObj = db; sharing = null; // create schema (using object callbacks) printText("Creating schema..."); dbObj.transaction( function (tx) { tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (1, "apple")'); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [2, 'banana']); tx.executeSql('INSERT INTO testtable (id, text) VALUES (?, ?)', [3, 'kiwi'], function(tx, result) { printText('kiwi record insert succeeded.') }, function(tx, error) { printText('kiwi record insert failed.' + error.message) } ); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [4, 'orange'], null, function(tx, error) { printText('orange record insert failed.') } ); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [5, 'plum'], function(tx, result) { printText('plum record insert succeeded.') }, null); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [6, "an'a'nas"], null, null); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [7, 'gr"a"pe'], undefined, undefined); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [8, "man'go"], function(tx, result) { printText( 'mango record insert succeeded.') }, undefined); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, null)', [9]); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [10, null]); }, function (err) { printText("Something went wrong when inserting data: " + JSON.stringify(err.message)); }, function () { printText("Inserting data transaction succeeded"); } ); printText("Data inserted."); } catch (e) { printText("Error occured in createDBandPopulateSampleData: " + e); } } function createDBandPopulateSampleDataWithInnerTransaction() { try { openDB(); dbObj = db; // create schema (using object callbacks) printText("Creating schema..."); dbObj.transaction( function(tx) { tx.executeSql( 'CREATE TABLE IF NOT EXISTS testtable (id unique, text)'); }, function(err) { printText("Something went wrong when creating schema: " + err); } ); printText("Schema created"); // populate date (using function callbacks) printText("Inserting data..."); dbObj.transaction( function(tx) { tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (1, "apple")'); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [2, 'banana'], function(parentTx, results) { console.log( "inside banana executeSql callback, parentTx: " + JSON.stringify(parentTx) + ", results: " + results); parentTx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [11, 'bananaInner11']); parentTx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [12, 'bananaInner12']); }, function(err) { console.log("outer banana tx error: " + err); } ); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [3, 'kiwi'], function() { printText('kiwi record insert succeeded.'); }, function(parentTx, error) { printText( 'kiwi record insert failed.' + error.message); }); tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (?, ?)', [4, 'orange'], null, function() { printText('orange record insert failed.'); } ); console.log("started long loop"); for (var i = 0; i < 49999; i++) { var t = new Date().getTime(); } console.log("finished long loop"); }, function(err) { printText("Something went wrong when inserting data: " + JSON.stringify(err.message)); }, function() { printText("Inserting data transaction succeeded"); } ); printText("Data inserted."); } catch(e) { printText("Error occured in createDBandPopulateSampleData: " + e); } } function selectAndPrintAllDataWithCallbackFunction() { try { openDB(); dbObj = db; printText("Selecting all data (with callback function)..."); dbObj.transaction( function (tx) { tx.executeSql('SELECT * FROM testtable', [], function (tx, results) { console.log(results); var len = results.rows.length; for (var i = 0; len > i; i++) { printText("row " + i + ": id=[" + results.rows.item(i).id + "] text=[" + results.rows.item(i).text + "]"); } }, function(tx, result) { printText('Reading data failed: ' + result.message)} ); }, function (err) { printText( "Something went wrong when selecting all data (with callback function): " + err); }, function () { printText("Selecting data transaction succeeded"); } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function selectAndPrintAllDataWithCallbackObject() { try { openDB(); dbObj = db; printText("Selecting all data (with callback object)..."); dbObj.transaction({ handleEvent: function (tx) { tx.executeSql('SELECT * FROM testtable', [], { handleEvent: function (tx, results) { var len = results.rows.length, i; for (i = 0; len > i; i++) { printText("row " + i + ": id=[" + results.rows.item(i).id + "] text=[" + results.rows.item(i).text + "]"); } } }); } }, { handleEvent: function (err) { printText( "Something went wrong when selecting all data (with callback object): " + err); } }); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function deleteDataWithCallbackFunction() { try { openDB(); dbObj = db; printText("Deleting all data (with callback function)..."); dbObj.transaction(function (tx) { printText("Deleting in sequence..."); tx.executeSql("DELETE FROM testtable WHERE id=1"); tx.executeSql("DELETE FROM testtable WHERE id=?", [2]); tx.executeSql("DELETE FROM testtable WHERE id=?", [3], null); tx.executeSql("DELETE FROM testtable WHERE id=?", [4], null, null); tx.executeSql("DELETE FROM testtable WHERE id=?", [5], undefined); tx.executeSql("DELETE FROM testtable WHERE id=?", [6], undefined, undefined); tx.executeSql("DELETE FROM testtable WHERE id=?", [7], function(tx, result) { printText('Record with id=7 deleted.')}); tx.executeSql("DELETE FROM testtable WHERE id=?", [8], null, function(tx, error) { printText( 'Got an error when deleting record with id=8.')}); }, function (err) { printText( "Something went wrong while deleting all data (with callback function): " + err); }, function () { printText("Deleting data transaction succeeded"); } ); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function deleteAllDataWithCallbackFunction() { try { openDB(); dbObj = db; printText("Deleting all data (with callback function)..."); dbObj.transaction(function (tx) { printText("Deleting all data..."); tx.executeSql("DELETE FROM testtable", [], function(tx, result) { printText('Deleted data.')}, function(tx, error) { printText( 'Error occured when deleting data.')} ); }, function (err) { printText( "Something went wrong while deleting all data (with callback function): " + err); }, function () { printText("Deleting data transaction succeeded"); }); } catch (e) { printText("Error occured in selectAndPrintAllData: " + e); } } function selectAndPrintDataWithNullText() { try { openDB(); dbObj = db; printText("Selecting data with null text..."); dbObj.transaction( function (tx) { tx.executeSql('SELECT * FROM testtable WHERE text IS NULL', [], function (tx, results) { var len = results.rows.length, i; for (i = 0; len > i; i++) { printText("row " + i + ": id=[" + results.rows.item(i).id + "], text=[" + results.rows.item(i).text + "], text === null: " + (results.rows.item(i).text === null)); } } ); }, function (err) { printText("Something went wrong when selecting data with null text): " + err); } ); } catch (e) { printText("Error occured in selectAndPrintDataWithNullText: " + e); } } function printText(str) { var d = document.getElementById('results'); d.innerHTML += "<br/>" + str; d.scrollTop = d.scrollHeight; console.log(str); } function clearText() { var d = document.getElementById('results'); d.innerHTML = ""; } function changeDBVersion() { openDB(); dbObj = db; dbObj.changeVersion("1.0", "1.1", function (tx) { tx.executeSql( 'INSERT INTO testtable (id, text) VALUES (11, "apple")'); }); } </script> </head> <body> <header> <h3> AMP Hybrid Client <span> Encrypted SQL API Usage Example </span> </h3> </header> <div style="padding: 10px;"> <div class="info"> This Application demonstrates the use of the SQL JavaScript API provided by AMP Hybrid Client. </div> </div> <div> <form action="#n" name="sharingForm"> <label for="gender"> Sharing: </label> <input type="radio" name="sharing" value="" checked=""> None </input> <br> <br> <input type="radio" name="sharing" value="window.launchbox.SQLStorage.SHARED_AMONG_APPS" > Among apps </input> <br> <br> <input type="radio" name="sharing" value="window.launchbox.SQLStorage.SHARED_AMONG_USERS" > Among users </input> <br> <br> </form> </div> <div id="simple-buttons" style="display: block;padding: 10px;"> <input type="button" onclick="createDBandPopulateSampleData();" value="Create DB and populate sample data"/> <input type="button" onclick="createDBandPopulateSampleDataWithInnerTransaction();" value="Create db, select and print all data with inner transaction"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackFunction();" value="Select and print all data (callback function)"/> <input type="button" onclick="selectAndPrintAllDataWithCallbackObject();" value="Select and print all data (callback object)"/> <input type="button" onclick="selectAndPrintDataWithNullText();" value="Print data with null text"/> <input type="button" onclick="deleteAllDataWithCallbackFunction();" value="Delete all data"/> <input type="button" onclick="changeDBVersion();" value="Change DB version"/> </div> <div style="padding: 10px;margin-top:-20px;"> <input type="button" onclick="clearText();" value="Clear all text"/> </div> <div id="results"> </div> <script type="text/javascript"> function openTabButtons(openShared) { var toOpen = document.getElementById("simple-buttons"); var toClose = document.getElementById("shared-buttons"); var toBold = document.getElementById("simple-activate"); var toUnbold = document.getElementById("shared-activate"); if(openShared) { toOpen = document.getElementById("shared-buttons"); toClose = document.getElementById("simple-buttons"); toBold = document.getElementById("shared-activate"); toUnbold = document.getElementById("simple-activate"); } toOpen.style.display = "block"; toClose.style.display = "none"; toBold.style.fontWeight = "bold"; toUnbold.style.fontWeight = "normal"; } </script> </body> </html>
The contents of the cache manifest file called manifest.appcache
for
this application are listed below:
CACHE MANIFEST CACHE: index.html NETWORK: *
The webapp-descriptor.xml
file for this application is defined in the
following way:
<?xml version="1.0" encoding="UTF-8"?> <webapp-descriptor xmlns="http://www.pega.com/application-hosting/web-app-descriptor/2.0"> <id>com.pega.sample.encryptedsql</id> <version>1.0.0</version> <name>Encrypted SQL API usage example</name> </webapp-descriptor>