Ionic with SQlite插件无法创建表
我正在使用ionic Sqlite本机插件。尝试创建表时,控制台中出现以下错误: 控制台消息错误:{“行”:{“长度”:0},“行受影响”:0} 我不明白,因为我觉得我的代码没问题Ionic with SQlite插件无法创建表,sqlite,ionic-framework,ionic3,native,ionic4,Sqlite,Ionic Framework,Ionic3,Native,Ionic4,我正在使用ionic Sqlite本机插件。尝试创建表时,控制台中出现以下错误: 控制台消息错误:{“行”:{“长度”:0},“行受影响”:0} 我不明白,因为我觉得我的代码没问题 import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { SQLite, SQLiteObject } from "@ionic-native/sqlite"; @
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { SQLite, SQLiteObject } from "@ionic-native/sqlite";
@Injectable()
export class DatabaseProvider {
theConsole: string = "Console Messages";
options: any = {
name: 'db_name.db',
location: 'default'
}
private db: SQLiteObject;
private isOpen: boolean;
constructor(public http: HttpClient,private sqlite: SQLite) {
console.log('Hello DatabaseProvider Provider');
this.connectToDb();
}
private connectToDb():void {
this.sqlite = new SQLite();
this.sqlite.create(this.options)
.then((db: SQLiteObject) => {
this.db = db;
this.isOpen = true;
console.log('Hello DatabaseProvider connected to db');
this.createTables();
})
.catch(e => {
this.theConsole += JSON.stringify(e);
console.log(this.getConsoleMessages());
});
}
private createTables():void{
this.createTableContatti();
}
private createTableContatti(): void{
var sql = 'create table IF NOT EXISTS contatti(id_contatto INTEGER PRIMARY
KEY AUTOINCREMENT,nome TEXT, data_nascita TEXT)';
this.db.executeSql(sql)
.then(() => {
this.theConsole += 'Executed SQL' + sql
console.log(this.getConsoleMessages());
})
.catch(e => {
this.theConsole += "Error: " + JSON.stringify(e)
console.log(this.getConsoleMessages());
});
}
有人能帮忙吗?
提前感谢爱奥尼亚SQLite的executeSql需要两个参数查询和数据。如果没有数据,则传递空数组对象
var sql = 'create table IF NOT EXISTS contatti(id_contatto INTEGER PRIMARY
KEY AUTOINCREMENT,nome TEXT, data_nascita TEXT)';
this.db.executeSql(sql,{})
.then(() => {
this.theConsole += 'Executed SQL' + sql
console.log(this.getConsoleMessages());
})
.catch(e => {
this.theConsole += "Error: " + JSON.stringify(e)
console.log(this.getConsoleMessages());
});
如果传递第二个参数,则查询工作正常。如果添加第二个参数,则会出现以下编译错误:“类型为“{}”的参数不能分配给类型为“any[]”的参数。类型为“{}”的参数中缺少属性“length”。”原因是我删除了第二个参数。你知道为什么不编译吗?我用第二个参数运行了你的代码,它成功了。你能给我看一下你所做的更改吗?private createTableContatti():void{var sql='如果不存在创建表contatti(id_contatto INTEGER主键自动递增,nome TEXT,data_nascita TEXT)';this.db.executeSql(sql,{})。然后(()=>{this.theConsole+='Executed sql'+sql;console.log(this.getConsoleMessages())catch(error=>{let errMsg=(error.messageText)?error.messageText:error.status;this.theConsole+=“error:”+errMsg+“”+JSON.stringify(error);console.log(this.getConsoleMessages();});}您的查询工作正常。你能试着删除所有额外的代码然后运行吗?只需在回调中记录“success”或“error”。如果这不起作用,请尝试传递空数组[],而不是{}