Arhn - архитектура программирования

Создайте базу данных в SQLite с помощью IONIC 3 + CORDOVA

Я разрабатываю приложение с SQLite, которое создает и перечисляет пользователей...

Скриншот

Для этого я создал сервис, в котором я создаю базу данных и два метода (создать и перечислить), следует отметить, что ошибок нет, и я все импортировал правильно

база данных.тс:

@Injectable()
export class DatabaseProvider {

  private db: SQLiteObject;
  private isOpen: boolean;

  constructor(
    public http: Http,
    public storage: SQLite) {

      if(!this.isOpen){
        this.storage = new SQLite();
        this.storage.create({ name: "data.db", location:"default" }).then((db:SQLiteObject) => {
          this.db = db;
          db.executeSql("CREATE TABLE IF NOT EXIST usuarios (Codigo INTEGER PRIMARY KEY AUTOINCREMENT, Identificacion INTEGER, Nombre TEXT, Apellido TEXT)", []);
          this.isOpen = true;
        }).catch((error) => {
          console.log(error);
        })
      }
      }

crearUsuario(Identificacion:number, Nombre:string, Apellido:string){
  return new Promise ((resolve , reject) => {
    let sql = "INSERT INTO usuarios (Identificacion, Nombre, Apellido) VALUES (?, ?, ?)";
    this.db.executeSql(sql, [Identificacion, Nombre, Apellido]).then((data) => {
      resolve(data);
    }, (error) => {
      reject(error);
    });  
  });
}

listarUsuario(){
  return new Promise ((resolve , reject) => {
    this.db.executeSql("SELECT * FROM usuarios", []).then((data) => {
      let arrayUsuarios = [];
      if(data.rows.length > 0){
        for (var i=0; i < data.rows.length; i++){
          arrayUsuarios.push({
            Codigo: data.rows.item(i).Codigo,
            Identificacion: data.rows.item(i).Identificacion,
            Nombre: data.rows.item(i).Nombre,
            Apellido: data.rows.item(i).Apellido,
          });
        }
      }
      resolve(arrayUsuarios);
    }, (error) => {
      reject(error);
    })
  });
}

}

на мой взгляд home.html у меня есть форма и две кнопки... одна перечисляет пользователей, а другая создает пользователей формы

домашний.html:

<button ion-button block color="secondary" (click)="listarUsuario()">Listar Usuario</button>

<form [formGroup]="todo" (ngSubmit)="crearUsuario()" novalidate>
  <ion-item>
    <ion-label>Nombre</ion-label>
    <ion-input type="text" formControlName="Nombre"></ion-input>
  </ion-item>
  <ion-item *ngIf="todo.get('Nombre').errors && todo.get('Nombre').dirty">     
  </ion-item>
  <ion-item>
    <ion-label>Apellido</ion-label>
    <ion-input type="text" formControlName="Apellido"></ion-input>
  </ion-item>
  <ion-item *ngIf="todo.get('Apellido').errors && todo.get('Apellido').dirty">      
  </ion-item>
  <ion-item>
    <ion-label>Indentificación</ion-label>
    <ion-input type="text" formControlName="Identificacion"></ion-input>
  </ion-item>
  <button ion-button block type="submit" [disabled]="!todo.valid">Crear Usuario</button>
</form>

<ion-list>
  <ion-item-sliding *ngFor="let item of listaPersonas">
    <ion-item>      
      <h2>{{item.Nombre}} - {{item.Apellido}}</h2>     
    </ion-item>   
    <ion-item-options side="right">
      <button ion-button color="danger">
        <ion-icon name="delete"></ion-icon>
        Eliminar
      </button>
    </ion-item-options> 
  </ion-item-sliding>
</ion-list>

мой контроллер имеет следующий код:

дом.тс:

export class HomePage {

  private listaPersonas: any;
  private todo: FormGroup;

  constructor(public navCtrl: NavController, private database: DatabaseProvider, private formBuilder: FormBuilder) {

    this.todo = this.formBuilder.group({
      Nombre: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(8)]],
      Apellido: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(8)]],
      Identificacion: ['', Validators.required],
    });

  } 

  crearUsuario(){
    console.log(this.todo);

      this.database.crearUsuario(this.todo.value.Identificacion, this.todo.value.Nombre, this.todo.value.Apellido).then((data) => {
        console.log(data);
        this.listarUsuario();
      }, (error) => {
        console.log(error);
      }) 
    }

  listarUsuario(){
    this.database.listarUsuario().then((data: any) => {
      console.log(data);
      this.listaPersonas = data;
    }, (error) => {
      console.log(error);
    })
  }    

}

Я тестирую свое приложение на физическом устройстве, но оно ничего не делает... не создает, не перечисляет пользователей, я думаю, я не создаю базу данных, я новичок в IONIC 3 и развертываю свои приложение на физическом устройстве сначала я создаю с помощью команды ionic cordova build android, а затем развертываю свое приложение на телефоне с помощью команды ionic cordova run android --device

Что я делаю не так? Как найти ошибку, попробовав приложение на физическом устройстве? с моей консолью отладки? где база данных Ionic 3 физически хранится на моем устройстве (в каталоге)? любая помощь для меня?


Ответы:


1

Я считаю, что ваша проблема в том, что синтаксис для: -

CREATE TABLE IF NOT EXIST usuarios (Codigo INTEGER PRIMARY KEY AUTOINCREMENT, Identificacion INTEGER, Nombre TEXT, Apellido TEXT)

неправильно.

То есть ключевое слово EXISTS, а не EXIST. Я бы предложил попробовать/использовать: -

db.executeSql("CREATE TABLE IF NOT EXISTS usuarios (Codigo INTEGER PRIMARY KEY AUTOINCREMENT, Identificacion INTEGER, Nombre TEXT, Apellido TEXT)", []); 
22.08.2018

2

Для создания таблицы в sqlite вам нужно сначала создать хранилище. Вы можете сделать что-то вроде этого:

 if (this.platform.is('cordova'))
          this.sqlite.create({
            name: 'fundamentos.offline',
            location: 'default'
          })
.then((db: SQLiteObject) => {
    db.executeSql(CREATE TABLE IF NOT EXIST usuarios 
    (Codigo INTEGER PRIMARY KEY AUTOINCREMENT, Identificacion INTEGER, 
     Nombre TEXT, Apellido TEXT),[])
    .then(() => console.log('Table Created'))
    .catch(e => {
                console.error(JSON.stringify(e));
              });`

Для справки: https://ionicframework.com/docs/native/sqlite/ https://www.djamware.com/post/59c53a1280aca768e4d2b143/ionic-3-angular-4-and-sqlite-crud-offline-mobile-app

22.08.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..