0

有人可以帮我吗?我有一个 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();

});

}

4

0 回答 0