Присоедините sql.js к sqlite ионному хранилищу - PullRequest
0 голосов
/ 08 ноября 2018

кто-нибудь может мне помочь с этим? У меня есть предварительно заполненная база данных SQLite .. с использованием SQL.JS Однако я увидел, что в него невозможно вставить данные, я уже пробовал несколько способов, но безуспешно. Поэтому я пытаюсь создать базу данных с Cordova Sqlite Storage, чтобы иметь возможность вводить данные. Я получаю данные в приложении из SQL.JS, и мне удалось открыть базу данных через хранилище, однако: при доступе к базе данных по устройству база данных не совпадает (хотя это sqlite) В случае, если у меня 2 Базы данных много разных. Некоторая помощь? Я хотел бы вставить данные в таблицу, которую я создал в SQlite Studio, в свою базу данных SQL.JS

@Injectable()
export class DatabaseProvider {
database: SQLiteObject;
private databaseReady: BehaviorSubject<boolean>;
dbName: string;

 constructor(public http: Http, private sqlitePorter: SQLitePorter, private storage: Storage, private sqlite: SQLite, private platform: Platform) {

this.databaseReady = new BehaviorSubject(false);
this.platform.ready().then(() => {
  this.sqlite.create({
    name: 'dbvidacarioca.sqlite',
    location: 'default'
  })
  .then((db: SQLiteObject) => {
    this.database = db;
    this.storage.get('database_filled').then(val => {
      if (val) {
        this.databaseReady.next(true);
      } else {
        this.fillDatabase();
      }
    })
  });
});


this.dbName = "dbvidacarioca.sqlite";    /* NOME DO BANCO DE DADOS */


 fillDatabase() {
this.http.get('assets/dummyDump.sql')
.map(res => res.text())
.subscribe(sql => {
  this.sqlitePorter.importSqlToDb(this.database, sql)
  .then(data => {
    this.databaseReady.next(true);
    this.storage.set('database_filled', true);
  })
  .catch(e => console.log(e));
});
}

addDeveloper(email) {
let data = [email];
console.log('insert data: ', data);
return this.database.executeSql("INSERT INTO tb_usuario (email) VALUES (?)", 
data).then(res => {
  return res;
})
.catch(err => {
  console.log('error: ', err);
});
}

  getDatabaseState() {
return this.databaseReady.asObservable();
  }

  getAllDevelopers() {
return this.database.executeSql("SELECT * FROM tb_usuario", []).then(data => 
  {
  let usuarios = [];
  if (data.rows.length > 0) {
    for (var i = 0; i < data.rows.length; i++) {
      usuarios.push({email: data.rows.item(i).email})
    }
  }
  return usuarios;
}, err => {
  console.log('Error: ', err);
  return [];
})
}

executeQuery(sql: string) {
let db: any;
return new Promise<any>((resolve, reject) => {
  let xhr = new XMLHttpRequest();
  xhr.open('GET', this.dbName, true);
  xhr.responseType = 'arraybuffer';

  xhr.onload = (e) => {
    let uInt8Array = new Uint8Array(xhr.response);
    db = new SQL.Database(uInt8Array);
    let contents = db.exec(sql);
    if (contents.length > 0)
      resolve(contents[0].values);
    else resolve()
  };
  xhr.send();

});

}

...