javascript – A simple Cordova android example including Sqlite read/write and search-ThrowExceptions

Exception or error:

I was working on an Android app project using Cordova which in I had a simple Sqlite database.

ID | Name | Number  |

Since I’m new in android apps, I just Got the UI ready. I have two text inputs, a <div> tag to show the table data and 3 buttons. And when the user taps on each columns, a popup show’s up for deleting or editing the row contents.

enter image description here

Here’s the HTML code for UI:

    <h1>My first App</h1>
    <p>Open Database</p>
    <div id="qrpopup" > //The hidden div tag for implementing the popup
            <input type="text" id="editNameBox"><br>
            <input type="text" id="editNumberBox"><br>
            <button onclick="goDelete()">Delete</button>
            <button onclick="goEdit()">Edit</button>
            <button onclick="document.getElementById('qrpopup').style.display='none';">Discard</button>

        Name<input type="text" value="Name" id="txtName">
        Number<input type="text" value="123" id="txtNumber"><hr/>
    <div id="tblDiv"></div>
    <div style="text-align: center">
        <button onclick="goInsert()">Insert</button>
        <button onclick="goSearch()">Search</button>
        <button onclick="successCB()">Show All</button>

Also I used some Css styles to make my app looks better. Here’s my style.css file:

input[type='text'] {
       border: 1px solid black;
       width: 200px;
       margin-left: 10px;
table {
table, th, td {
              border: 1px solid black;
              border-collapse: collapse;
th, td {
    padding: 5px;
    text-align: left;
table#t01 tr:nth-child(even) {
    background-color: #eee;
table#t01 tr:nth-child(odd) {
table#t01 th    {
    background-color: black;
    color: white;
button {
    margin: 10px;
    font: bold 13px "Helvetica Neue", Helvetica, Arial, clean, sans-serif !important;
    text-shadow: 0 -1px 1px rgba(0,0,0,0.25), -2px 0 1px rgba(0,0,0,0.25);
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
    -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
    display: inline-block;
    color: white;
    padding: 5px 10px 5px;
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
    background-color: #BE3E76;
    border-style: none;
    text-align: center;
    overflow: visible;

button:active {
    background-position: 0 -100px;
    -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.7);
    -webkit-box-shadow: none;

#qrpopup {
    position:fixed;z-index:9999;background-color:rgba(0, 0, 0,0.9);width:100%; height:100%;display:none;

But I want to know how can I create insert, edit, delete and search functions using javascript in Cordova?

How to solve:

So after 3 days of trying, I finally got it done and I said it’s better to share it with people who are interested in using Sqlite database in Cordova and PhoneGap. So here is the answer:

These scripts goes on <head> tag:

 <!-- cordova script (this will be a 404 during development) -->
    <script src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

        // Wait for Cordova to load
        document.addEventListener("deviceready", onDeviceReady, false);

        var currentRow;
        // Populate the database
        function populateDB(tx) {

        // Query the database
        function queryDB(tx) {
            tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);

        function searchQueryDB(tx) {
            tx.executeSql("SELECT * FROM DEMO where name like ('%"+ document.getElementById("txtName").value + "%')",
                    [], querySuccess, errorCB);
        // Query the success callback
        function querySuccess(tx, results) {
            var tblText='<table id="t01"><tr><th>ID</th> <th>Name</th> <th>Number</th></tr>';
            var len = results.rows.length;
            for (var i = 0; i < len; i++) {
                var tmpArgs=results.rows.item(i).id + ",'" + results.rows.item(i).name
                        + "','" + results.rows.item(i).number+"'";
                tblText +='<tr onclick="goPopup('+ tmpArgs + ');"><td>' + results.rows.item(i).id +'</td><td>'
                        + results.rows.item(i).name +'</td><td>' + results.rows.item(i).number +'</td></tr>';
            tblText +="</table>";
            document.getElementById("tblDiv").innerHTML =tblText;

        //Delete query
        function deleteRow(tx) {
          tx.executeSql('DELETE FROM DEMO WHERE id = ' + currentRow, [], queryDB, errorCB);

        // Transaction error callback
        function errorCB(err) {
            alert("Error processing SQL: "+err.code);

        // Transaction success callback
        function successCB() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(queryDB, errorCB);

         // Cordova is ready
        function onDeviceReady() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(populateDB, errorCB, successCB);

        //Insert query
        function insertDB(tx) {
            tx.executeSql('INSERT INTO DEMO (name,number) VALUES ("' +document.getElementById("txtName").value

        function goInsert() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(insertDB, errorCB, successCB);

        function goSearch() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(searchQueryDB, errorCB);

        function goDelete() {
             var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
             db.transaction(deleteRow, errorCB);

        //Show the popup after tapping a row in table
        function goPopup(row,rowname,rownum) {
            document.getElementById("editNameBox").value = rowname;
            document.getElementById("editNumberBox").value = rownum;

        function editRow(tx) {
            tx.executeSql('UPDATE DEMO SET name ="'+document.getElementById("editNameBox").value+
                    '", number= "'+document.getElementById("editNumberBox").value+ '" WHERE id = '
                    + currentRow, [], queryDB, errorCB);
        function goEdit() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(editRow, errorCB);


That’s it! Now you can add, edit, delete and search through your data in Sqlite database using Cordova.

Hope it be helpful for the ones who are interested.


In Cordova 5.2.0 I had to do the following to the project.

Add the plugin
cordova plugin add cordova-plugin-sqlite

Also it now uses the sqlitePlugin.openDatabase instead of the old

Leave a Reply

Your email address will not be published. Required fields are marked *