2016-10-17 2 views
0

Я новичок в разработке ионных 2 (также не работал с ионным-1).Работа с плагином Cordova Sqlite в ионном режиме 2

Я пытаюсь использовать плагин corova sqlite в приложении. Я последовал за Use SQLite in Ionic 2 ссылкой. Мог добавить плагин в проект, используя следующую команду.

$ ionic plugin add cordova-sqlite-storage

После развертывания приложения на реальном устройстве data.db был создан и открыт, а также people таблица была создана успешно. Ниже бревно из Xcode:

2016-10-17 16:29:16.435992 SqlProject[238:3982] -[SQLitePlugin pluginInitialize] [Line 67] no cloud sync at path: /var/mobile/Containers/Data/Application/DFDADD59-D48E-4D4C-B8F0-23EEDE169471/Library/LocalDatabase 2016-10-17 16:29:16.436138 SqlProject[238:4034] -[SQLitePlugin openNow:] [Line 137] open full db path: /var/mobile/Containers/Data/Application/DFDADD59-D48E-4D4C-B8F0-23EEDE169471/Library/LocalDatabase/data.db 2016-10-17 16:29:16.443765 SqlProject[238:4034] -[SQLitePlugin openNow:] [Line 163] Good news: SQLite is thread safe! 2016-10-17 16:29:16.448487 SqlProject[238:3982] OPEN database: data.db - OK 2016-10-17 16:29:16.463667 SqlProject[238:3982] TABLE CREATED: [object Object]

Код для открытия базы данных:

import { SQLite } from 'ionic-native';

constructor(platform: Platform) { 
    platform.ready().then(() => { 
    StatusBar.styleDefault(); 

    let database = new SQLite(); 
     database.openDatabase({ 
      name: "data.db", 
      location: "default" 
     }).then(() => { 
      database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)", {}).then((data) => { 
       console.log("TABLE CREATED: ", data); 

      }, (error) => { 
       console.error("Unable to create table", error); 

      }) 
     }, (error) => { 

      console.error("Unable to open database", error); 
     }); 
    }); 
} 

Но, теперь я получаю ошибку при Вставка и Fetching записи из db.

public add() { 

console.log("Inside the add function- "); 

this.database.executeSql("INSERT INTO people (firstname, lastname) VALUES (?, ?)", ['mahesh', 'bhalerao']).then((data) => { 

    console.log("INSERTED: " + JSON.stringify(data)); 

}, (error) => { 
    console.log("ERROR: " + JSON); 
}); 
} 

public fetchRecords() { 

    this.database.executeSql("SELECT * FROM people", []).then((data) => { 
       alert("executeSql refresh function success"); 

     this.people = []; 

     if(data.rows.length > 0) { 
      for(var i = 0; i < data.rows.length; i++) { 
       this.people.push({firstname: data.rows.item(i).firstname, lastname: data.rows.item(i).lastname}); 
      } 
     } 
    }, (error) => { 
     console.log("ERROR: " + JSON.stringify(error.err)); 
    }); 
} 

Я получаю неопределенную ошибку.

ERROR: undefined

Не уверен, что случилось.

Любая помощь будет оценена по достоинству. Спасибо!

+0

Вы абсолютно уверены, что этот плагин поддерживает обещания? Если я правильно его помню, вам нужно использовать обратный вызов успеха, который возвращает набор результатов. Можете ли вы показать, пожалуйста, покажите более подходящий код (например, что это такое. База данных и как он открывается и обрабатывается) – Fylax

+0

@Fylax Я добавил соответствующий для открытия базы данных. – Mahesh

ответ

0

Первый фрагмент, пятая строка: у вас есть let database = new SQLite();; вы создаете базу данных на диск (если она еще не существует), а затем вы выходите из contructor.

Из-за обзора let после того, как вы выходите из costructor, то database переменная не существует, к add и fetch методы, которые он никогда не существовал.

Вместо let вы должны положить database в атрибут (то есть, где методы его ищут), а затем все должно работать нормально.

Другими словами, вы должны иметь подобный код:

public database: SQLite //here the attribute 

constructor(platform: Platform) { 
    platform.ready().then(() => { 
    StatusBar.styleDefault(); 

    this.database = new SQLite(); //here you initialize the attribute instead of a volative variable 
    this.database.openDatabase({ //in this block you open an then populate the attribute 
      name: "data.db", 
      location: "default" 
     }).then(() => { 
      database.executeSql("CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY AUTOINCREMENT, firstname TEXT, lastname TEXT)").then((data) => { 
       console.log("TABLE CREATED: ", 
      }, (error) => { 
       console.error("Unable to create table", error); 
      }); 
     }, (error) => { 
      console.error("Unable to open database", error); 
     }); 
    }); 
} 
Смежные вопросы