{"id":5205,"date":"2017-04-16T22:21:44","date_gmt":"2017-04-16T20:21:44","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=5205"},"modified":"2019-01-05T19:55:34","modified_gmt":"2019-01-05T17:55:34","slug":"ionic-2-3-sqlite-servis","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/","title":{"rendered":"Ionic 2 &#038; 3 &#8211; SQLite servis"},"content":{"rendered":"<p>Ovaj blog post je nastavak prethodnog pod naslovom <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic2-sqlite\/\" target=\"_blank\"><em>Ionic 2<\/em> \u2013 <em>SQLite<\/em> za trajno spremanje podataka<\/a>. Iako sam ondje ve\u0107 obradio temu spremanja podataka u lokalnu bazu podataka i prikaz tih podataka <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic2-provjera-povezanost-mreza-internet\/\" target=\"_blank\">kada aplikacija nije povezana s mre\u017eom<\/a> va\u017eno je znati da postoji i bolji na\u010din kako to napraviti. <\/p>\n<p>Kreiranjem <em>SQLite<\/em> servisa svu logiku vezanu uz kreiranje i kori\u0161tenje lokalne baze podataka imamo na jednom mjestu.<\/p>\n<h2>Instalacija <em>SQLite<\/em> plugina<\/h2>\n<p><a href=\"https:\/\/ionicframework.com\/docs\/native\/sqlite\/\" target=\"_blank\">Plugin instalirate<\/a> naredbama<\/p>\n<pre class=\"lang:sh decode:true \" >$ ionic plugin add cordova-sqlite-storage\r\n$ npm install --save @ionic-native\/sqlite<\/pre>\n<p>Vi\u0161e o <em>SQLite<\/em> pluginu na adresi https:\/\/github.com\/litehelpers\/Cordova-sqlite-storage<\/p>\n<h2>Kreiranje <em>SQLite<\/em> servisa<\/h2>\n<p>Servis kreirate naredbom<\/p>\n<pre class=\"lang:sh decode:true \" >$ ionic g provider MyData<\/pre>\n<p>Cilj ovog  <span class=\"lang:default decode:true  crayon-inline \" >DatabaseService<\/span>  servisa je da na jednom mjestu kreiramo sve potrebne tablice te da ih uz \u0161to manje ponavljanja koda koristimo u ostatku aplikacije. <\/p>\n<p>Unutar konstuktora kreiramo tablice <span class=\"lang:js decode:true  crayon-inline\">mojaTablica<\/span> i <span class=\"lang:js decode:true  crayon-inline\">mojaDrugaTablica<\/span>. <\/p>\n<p>Funkcionalnosti poput spremanja u lokalnu bazu, \u010ditanja iz nje i brisanja spremamo u posebne funkcije, kao \u0161to su npr <span class=\"lang:js decode:true  crayon-inline\">saveTablicaToSqlite()<\/span>, <span class=\"lang:js decode:true  crayon-inline\">getTablicaMyOfflineData()<\/span> i <span class=\"lang:js decode:true  crayon-inline\">deleteTablicaMyOfflineData()<\/span>, koje onda mo\u017eemo pozivati u ostatku aplikacije.<\/p>\n<pre class=\"lang:js decode:true \" title=\"my-data.ts\" >import { Injectable } from '@angular\/core';\r\nimport { Http } from '@angular\/http';\r\nimport 'rxjs\/add\/operator\/map';\r\nimport { Platform } from 'ionic-angular';\r\nimport { SQLite, SQLiteObject } from '@ionic-native\/sqlite';\r\n\r\n@Injectable()\r\nexport class DatabaseService {\r\n\r\n  db:any;\r\n  private isOpen: boolean;\r\n\r\n  \/\/Konstruktor po\u010detak\r\n  constructor(public _http: Http, public _platform: Platform, private sqlite: SQLite) {\r\n    console.log('Hello Database Provider');\r\n\r\n    this._platform.ready().then(() => {\r\n\r\n     if(!this.isOpen) {\r\n            this.sqlite = new SQLite();\r\n            this.sqlite.create({name: \"baza.db\", location: \"default\"}).then((db: SQLiteObject) => {\r\n                 \/\/Prva tablica\r\n                 db.executeSql('CREATE TABLE IF NOT EXISTS mojaTablica (mojaTablicaId INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, user_name TEXT, location TEXT)', {})\r\n                 .then(() => console.log('Executed SQL - PrvaTablica'))\r\n                 .catch(e => console.log(e));\r\n                 \/\/Druga tablica\r\n                 db.executeSql('CREATE TABLE IF NOT EXISTS mojaDrugaTablica (mojaDrugaTablicaId INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)', {})\r\n                 .then(() => console.log('Executed SQL - DrugaTablica'))\r\n                 .catch(e => console.log(e));\r\n             })\r\n             .catch(e => console.log(e));\r\n     } \r\n     \r\n\r\n     });\r\n  }\r\n  \/\/Konstruktor kraj\r\n   \/\/\/\/\/\/\/\/\/\/Tablica\\\\\\\\\\\\\\\\\\\\\r\n   \/\/SPREMI\r\n    public saveTablicaToSqlite(DataArray){\r\n\t  this.sqlite.create({\r\n      name: 'baza.db',\r\n      location: 'default'\r\n      })\r\n      .then((db: SQLiteObject) => {\r\n           db.executeSql(\"INSERT INTO mojaTablica (name, user_name, location) VALUES (?,?,?)\", [DataArray.name, DataArray.user_name, DataArray.location]).then((data) => {\r\n           console.log(\"INSERTED: \" + JSON.stringify(data));\r\n           }, (error) => {\r\n           console.log(\"ERROR kod inserta: \" + JSON.stringify(error.err));\r\n        });\r\n\t  })\r\n     .catch(e => console.log(e));\r\n    }\r\n    \/\/DOHVATI\r\n    public getTablicaMyOfflineData() {\r\n        return new Promise((resolve, reject) => {\r\n          this.sqlite.create({\r\n          name: 'baza.db',\r\n          location: 'default'\r\n          })\r\n          .then((db: SQLiteObject) => {\r\n            db.executeSql(\"SELECT * FROM mojaTablica\", []).then((data) => {\r\n                let DataArray = [];\r\n                if(data.rows.length > 0) {\r\n                    for(let i = 0; i < data.rows.length; i++) {\r\n                        DataArray.push({\r\n                            name: data.rows.item(i).name,\r\n                            user_name: data.rows.item(i).user_name,\r\n                            location: data.rows.item(i).location\r\n                        });\r\n                    }\r\n                }\r\n                resolve(DataArray);\r\n            }, (error) => {\r\n                reject(error);\r\n            });\r\n          })\r\n         .catch(e => console.log(e));\r\n        });\r\n    }\r\n    \/\/OBRI\u0160I\r\n    public deleteTablicaMyOfflineData(){\r\n\t  this.sqlite.create({\r\n      name: 'baza.db',\r\n      location: 'default'\r\n      })\r\n      .then((db: SQLiteObject) => {\r\n           db.executeSql(\"DELETE FROM mojaTablica\",[]).then((data) => {\r\n           console.log(\"DELETED: \" + JSON.stringify(data));\r\n           }, (error) => {\r\n           console.log(\"ERROR kod brisanja: \" + JSON.stringify(error.err));\r\n        });\r\n\t })\r\n     .catch(e => console.log(e));\r\n    }\r\n   \/\/\/\/\/\/\/\/\/\/DrugaTablica\\\\\\\\\\\\\\\\\\\\\r\n   \/\/SPREMI\r\n    public saveToSqlite(DataArrayTwo){\r\n\t  this.sqlite.create({\r\n      name: 'baza.db',\r\n      location: 'default'\r\n      })\r\n      .then((db: SQLiteObject) => {\r\n           db.executeSql(\"INSERT INTO mojaDrugaTablica (firstname, lastname) VALUES (?,?)\", [DataArrayTwo.firstname, DataArrayTwo.lastname]).then((data) => {\r\n           console.log(\"INSERTED: \" + JSON.stringify(data));\r\n           }, (error) => {\r\n           console.log(\"ERROR kod inserta: \" + JSON.stringify(error.err));\r\n        });\r\n\t  })\r\n     .catch(e => console.log(e));\r\n    }\r\n    \/\/DOHVATI\r\n    public getMyOfflineData() {\r\n        return new Promise((resolve, reject) => {\r\n          this.sqlite.create({\r\n          name: 'baza.db',\r\n          location: 'default'\r\n          })\r\n          .then((db: SQLiteObject) => {\r\n            db.executeSql(\"SELECT * FROM mojaDrugaTablica\", []).then((data) => {\r\n                let LocalArrayTwo = [];\r\n                if(data.rows.length > 0) {\r\n                    for(let i = 0; i < data.rows.length; i++) {\r\n                        LocalArrayTwo.push({\r\n                            firstname: data.rows.item(i).firstname,\r\n                            lastname: data.rows.item(i).lastname\r\n                        });\r\n                    }\r\n                }\r\n                resolve(LocalArrayTwo);\r\n            }, (error) => {\r\n                reject(error);\r\n            });\r\n          })\r\n         .catch(e => console.log(e));\r\n        });\r\n    }\r\n    \/\/OBRI\u0160I\r\n    public deleteMyOfflineData(){\r\n\t  this.sqlite.create({\r\n      name: 'baza.db',\r\n      location: 'default'\r\n      })\r\n      .then((db: SQLiteObject) => {\r\n           db.executeSql(\"DELETE FROM mojaDrugaTablica\",[]).then((data) => {\r\n           console.log(\"DELETED: \" + JSON.stringify(data));\r\n           }, (error) => {\r\n           console.log(\"ERROR kod brisanja: \" + JSON.stringify(error.err));\r\n        });\r\n\t })\r\n     .catch(e => console.log(e));\r\n    }\r\n\r\n  }<\/pre>\n<p>Kako bi ovaj servis mogli koristiti trebamo ga navesti u <span class=\"lang:default decode:true  crayon-inline\">app.module.ts<\/span> <\/p>\n<pre class=\"lang:js decode:true \" title=\"app.module.ts\" >import { DatabaseService } from '..\/providers\/my-data';\r\nimport { SQLite } from '@ionic-native\/sqlite';\r\n...\r\n providers: [StatusBar, \r\n             SplashScreen,\r\n             DatabaseService, \r\n             SQLite, \r\n             {provide: ErrorHandler, useClass: IonicErrorHandler}]<\/pre>\n<h2>Kori\u0161tenje <em>SQLite<\/em> baze u ostatku aplikacije<\/h2>\n<p>Ranije kreiran <em>SQLite<\/em> servis sada mo\u017eemo koristiti u ostatku aplikacije za spremanje podataka koje onda mo\u017eemo prikazivati korisnicima kada aplikacije nije povezana s mre\u017eom. <\/p>\n<p>Recimo da u ovom primjeru na po\u010detnoj stranici \u017eelimo <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic2-prikaz-json-podatak-api\/\">povu\u0107i \u017eive podatke s <em>API<\/em>-ja<\/a> dok je aplikacije povezana s mre\u017eom i odmah ih spremiti u <em>SQLite<\/em> bazu kako bi ih mogli koristiti kada se povezanost s mre\u017eom izgubi. <\/p>\n<p>Kada se otvori <span class=\"lang:default decode:true  crayon-inline\">home.ts<\/span> i pokrene funkcija  <span class=\"lang:sh decode:true  crayon-inline\">storeMyOfflineData()<\/span> pozvat \u0107e se funkcija <span class=\"lang:sh decode:true  crayon-inline\">getMyLiveDataFromApi()<\/span> koja dovla\u010di vanjske podatke u mobilnu aplikaciju. Te podatke u tom trenutku odmah mo\u017eemo prikazati korisnicima. Istovremeno, pozivamo  <span class=\"lang:js decode:true  crayon-inline\">_database.saveTablicaToSqlite<\/span> servis kojemu proslje\u0111ujemo niz podataka <span class=\"lang:js decode:true  crayon-inline\">this.DataArray[i]<\/span>  koje smo dobili iz API-ja.<\/p>\n<pre class=\"lang:js decode:true \" title=\"home.ts\" >import { Component } from '@angular\/core';\r\nimport { NavController, IonicPage } from 'ionic-angular';\r\nimport { ApiProvider } from '..\/..\/providers\/api-providers';\r\nimport { DatabaseService } from \"..\/..\/providers\/database-service\";\r\n\r\n@IonicPage()\r\n@Component({\r\n  selector: 'page-home',\r\n  templateUrl: 'home.html',\r\n  providers: [ApiProvider]\r\n})\r\nexport class HomePage {\r\n\r\n  public DataArray: Array&lt;Object&gt;;\r\n\r\n  \/\/Podaci potrebni API-ju da bi vratio podatke\r\n  parameters = { user_id: localStorage.getItem('user_id'), access_token: localStorage.getItem('access_token') };\r\n\r\n  constructor(public _navCtrl: NavController, \r\n              public _api: ApiProvider,\r\n              public _database: DatabaseService) {\r\n  }\r\n  \r\n   \/\/Spremi \u017eive podatke u lokalnu SQLite bazu\r\n    storeMyOfflineData(){\r\n         this._api.getMyLiveDataFromApi(this.parameters).subscribe(res =&gt; {\r\n          this.DataArray = res;\r\n          if(res.length &gt; 0) {\r\n                for(var i = 0; i &lt; res.length; i++) {\r\n                  this._database.saveTablicaToSqlite(this.DataArray[i]);\r\n                }\r\n          }\r\n           }); \r\n    }\r\n\t\r\n\t\/\/Prika\u017ei lokalne podatke\r\n\t getMyOfflineData(){\r\n       this._database.getTablicaMyOfflineData().then((result) =&gt; {\r\n            this.DataArray = &lt;Array&lt;Object&gt;&gt; result;\r\n        }, (error) =&gt; {\r\n            console.log(\"ERROR: \", error);\r\n        });\r\n    } \r\n\t\r\n\t \/\/Isprazni lokalnu bazu\r\n     deleteMyOfflineData() {\r\n       this._database.deleteTablicaMyOfflineData();\r\n    } \r\n\r\n}<\/pre>\n<h2>Testiranje na mobilnom ure\u0111aju<\/h2>\n<p>Uspje\u0161nost kreiranja SQLite baze kao i kori\u0161tenje najbolje \u0107ete testirati na fizi\u010dkom ure\u0111aju. Spojite ure\u0111aj na PC, pokrenite naredbu  <\/p>\n<pre class=\"lang:sh decode:true \" >$ ionic run android<\/pre>\n<p>i otvorite <em>chrome:\/\/inspect\/#devices<\/em> u <em>Chrome<\/em> web pregledniku. Ondje \u0107ete vidjeti svoj mobilni ure\u0111aj na kojemu je pokrenuta aplikacija. Ispod imena aplikacije kliknite na <em>inspect<\/em>. <\/p>\n<p>Sada u konzoli mo\u017eete vidjeti da su <em>SQLite<\/em> tablice uspje\u0161no kreiranje.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-1024x227.png\" alt=\"Ionic 2 &amp; 3 \u2013 SQLite servis - kreiranje tablice\" width=\"660\" height=\"146\" class=\"aligncenter size-large wp-image-5225\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-1024x227.png 1024w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-300x66.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-768x170.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis.png 1490w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p>Dalje, kada se otvori po\u010detna stranica mo\u017ee se vidjeti da se otvara baza i da se spremaju podaci. Sljede\u0107i put kada opet otvorimo po\u010detnu stranicu, bri\u0161u se iz lokalne baze do tada spremljni podaci i dodaju se svje\u017ei podaci.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-spremi-obrisi.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-spremi-obrisi.png\" alt=\"SQLite servis - brisanje i spremanje\" width=\"645\" height=\"191\" class=\"aligncenter size-full wp-image-5227\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-spremi-obrisi.png 645w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic2-3-sqlite-servis-spremi-obrisi-300x89.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a><\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>Usporedite <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic2-sqlite\/\">prethodni blog post<\/a> i ovaj pa zaklju\u010dite koji je na\u010din kori\u0161tenja <em>SQLite<\/em> baze bolji. Moje mi\u0161ljenje je da je bolji na\u010din kori\u0161tenje servisa jer tako ne moramo ponavljati jedan te isti kod u ostatku aplikacije nego samo pozivamo funkcije za spremanje, \u010ditanje i brisanje lokalnih podataka. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ovaj blog post je nastavak prethodnog pod naslovom Ionic 2 \u2013 SQLite za trajno spremanje podataka. Iako sam ondje ve\u0107 obradio temu spremanja podataka u lokalnu bazu podataka i prikaz tih podataka kada aplikacija nije povezana s mre\u017eom va\u017eno je znati da postoji i bolji na\u010din kako to napraviti. Kreiranjem SQLite servisa svu logiku vezanu &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Ionic 2 &#038; 3 &#8211; SQLite servis<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":5207,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[564,351],"tags":[381,400,399],"class_list":["post-5205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile","category-razvoj","tag-ionic-2","tag-ionic-3","tag-sqlite"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ionic 2 &amp; 3 - SQLite servis - Tomislav Stankovi\u0107<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic 2 &amp; 3 - SQLite servis - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"Ovaj blog post je nastavak prethodnog pod naslovom Ionic 2 \u2013 SQLite za trajno spremanje podataka. Iako sam ondje ve\u0107 obradio temu spremanja podataka u lokalnu bazu podataka i prikaz tih podataka kada aplikacija nije povezana s mre\u017eom va\u017eno je znati da postoji i bolji na\u010din kako to napraviti. Kreiranjem SQLite servisa svu logiku vezanu &hellip; Nastavi \u010ditati Ionic 2 &#038; 3 &#8211; SQLite servis\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-16T20:21:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-05T17:55:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Ionic 2 &#038; 3 &#8211; SQLite servis\",\"datePublished\":\"2017-04-16T20:21:44+00:00\",\"dateModified\":\"2019-01-05T17:55:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/\"},\"wordCount\":467,\"commentCount\":11,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/ionic3-sqlite-servis.png\",\"keywords\":[\"Ionic 2\",\"Ionic 3\",\"SQlite\"],\"articleSection\":[\"Mobile\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/\",\"name\":\"Ionic 2 & 3 - SQLite servis - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/ionic3-sqlite-servis.png\",\"datePublished\":\"2017-04-16T20:21:44+00:00\",\"dateModified\":\"2019-01-05T17:55:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/ionic3-sqlite-servis.png\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/04\\\/ionic3-sqlite-servis.png\",\"width\":825,\"height\":510,\"caption\":\"Ionic 2 & 3 - SQLite servis\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/ionic-2-3-sqlite-servis\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic 2 &#038; 3 &#8211; SQLite servis\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ionic 2 & 3 - SQLite servis - Tomislav Stankovi\u0107","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/","og_locale":"hr_HR","og_type":"article","og_title":"Ionic 2 & 3 - SQLite servis - Tomislav Stankovi\u0107","og_description":"Ovaj blog post je nastavak prethodnog pod naslovom Ionic 2 \u2013 SQLite za trajno spremanje podataka. Iako sam ondje ve\u0107 obradio temu spremanja podataka u lokalnu bazu podataka i prikaz tih podataka kada aplikacija nije povezana s mre\u017eom va\u017eno je znati da postoji i bolji na\u010din kako to napraviti. Kreiranjem SQLite servisa svu logiku vezanu &hellip; Nastavi \u010ditati Ionic 2 &#038; 3 &#8211; SQLite servis","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2017-04-16T20:21:44+00:00","article_modified_time":"2019-01-05T17:55:34+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png","type":"image\/png"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"6 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Ionic 2 &#038; 3 &#8211; SQLite servis","datePublished":"2017-04-16T20:21:44+00:00","dateModified":"2019-01-05T17:55:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/"},"wordCount":467,"commentCount":11,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png","keywords":["Ionic 2","Ionic 3","SQlite"],"articleSection":["Mobile","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/","name":"Ionic 2 & 3 - SQLite servis - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png","datePublished":"2017-04-16T20:21:44+00:00","dateModified":"2019-01-05T17:55:34+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/04\/ionic3-sqlite-servis.png","width":825,"height":510,"caption":"Ionic 2 & 3 - SQLite servis"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/ionic-2-3-sqlite-servis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ionic 2 &#038; 3 &#8211; SQLite servis"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/5205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=5205"}],"version-history":[{"count":26,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/5205\/revisions"}],"predecessor-version":[{"id":5429,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/5205\/revisions\/5429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/5207"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=5205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=5205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=5205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}