SQLITE.ALL Подготовка 1 - PullRequest
       10

SQLITE.ALL Подготовка 1

0 голосов
/ 15 марта 2019

В моем проекте NativeScript с Angular я пытаюсь использовать SQLite для создания своей базы данных.Тем не менее, всякий раз, когда я пытаюсь запустить его, я получаю сообщение об ошибке в моих инструкциях создания таблицы, которое говорит SQLITE.ALL - Prepare Error 1.Я пытался найти проблему, но ничего не могу найти на ней.

Вот мой database.service.ts файл:

var Sqlite = require("nativescript-sqlite");

@Injectable()
export class DatabaseService {

    private createDB() {
        return new Promise((resolve, reject) => {
            return (new Sqlite("imtracker.db")).then(db => {
            db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, password TEXT, firstName TEXT, lastName TEXT, gender TEXT, permissions TEXT, year INTEGER, basketball NUMERIC, dodgeball NUMERIC, football NUMERIC, soccer NUMERIC, softball NUMERIC, volleyball NUMERIC, teamID INTEGER)").then(id => {
                resolve(db);
            }, error => {
                console.log("CREATE USESRS TABLE ERROR: ", error);
                reject(error);
            });
            db.execSQL("CREATE TABLE IF NOT EXISTS leagues (id INTEGER PRIMARY KEY AUTO INCREMENT, teamSize INTEGER, sportID INTEGER)").then(id => {
                resolve(db);
            }, error => {
                console.log("CREATE LEAGUES TABLE ERROR: ", error);
                reject(error);
            });
        }, error => {
            reject(error);
        })
    })
}

public insertUser(user: User) {
    return new Promise((resolve, reject) => {
        this.createDB().then((res: any) => {
            res.execSQL("INSERT INTO users (id,password,firstName,lastName,gender,permissions,year,basketball,dodgeball,football,soccer,softball,volleyball,teamID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", [user.id, user.password, user.firstName, user.lastName, user.gender, user.permissions, user.year, user.basketball, user.dodgeball, user.football, user.soccer, user.softball, user.volleyball, user.teamID]).then(id => {
                console.log("INSERT RESULT: ", id);
                resolve(true);
            }, error => {
                console.log("INSERT USERS FAILED: ", error);
                reject(false);
            })
        })
    })
}

public insertLeague(league: Leagues) {
    return new Promise((resolve, reject) => {
        this.createDB().then((res: any) => {
            res.execSQL("INSERT INTO leagues (id,teamSize,sportID) VALUES (?,?,?)", [league.id, league.teamSize, league.sportID]).then(id => {
                console.log("INSERT RESULT: ", id);
                resolve(true);
            }, error => {
                console.log("INSERT LEAGUES FAILED: ", error);
                reject(false);
            })
        })
    })
}

public selectAllUsers() {
    return new Promise((resolve, reject) => {
        this.createDB().then((res: any) => {
            return res.all("SELECT * FROM user").then(rows => {
                let result: User[] = [];
                for (let row in rows) {
                    result.push({
                        "id": rows[row][1],
                        "password": rows[row][2],
                        "firstName": rows[row][3],
                        "lastName": rows[row][4],
                        "gender": rows[row][5],
                        "permissions": rows[row][6],
                        "year": rows[row][7],
                        "basketball": rows[row][8],
                        "dodgeball": rows[row][9],
                        "football": rows[row][10],
                        "soccer": rows[row][11],
                        "softball": rows[row][12],
                        "volleyball": rows[row][13],
                        "teamID": rows[row][14]
                    });
                }
                resolve(result);
            }, error => {
                console.log("SELECT USERS ERROR: ", error);
                reject(error);
            })
        })
    })
}

public selectAllLeagues() {
    return new Promise((resolve, reject) => {
        this.createDB().then((res: any) => {
            return res.all("SELECT * FROM leagues").then(rows => {
                let result: Leagues[] = [];
                for (let row in rows) {
                    result.push({
                        "id": rows[row][1],
                        "teamSize": rows[row][2],
                        "sportID": rows[row][3]
                    });
                }
                resolve(result);
            }, error => {
                console.log("SELECT LEAGUES ERROR: ", error);
                reject(error);
            })
        })
    })
  }
}

, а затем вот мои модели:

league.model.ts:

export interface Leagues {
    id: number,
    teamSize: number,
    sportID: number
}

user.model.ts:

export interface User {
    id: number,
    password: string,
    firstName: string,
    lastName: string,
    gender: string,
    permissions: string,
    year: number,
    basketball: boolean,
    dodgeball: boolean,
    football: boolean,
    soccer: boolean,
    softball: boolean,
    volleyball: boolean,
    teamID: number
}

и вот где я вызываю его в своем компоненте:

constructor(private router: Router, private databaseService: DatabaseService) {

    this.databaseService.selectAllUsers().then((res: any) => {
        this.usersList = res;
    })
}

Любая помощь будет принята с благодарностью, так как я сейчас очень смущен.Спасибо!

1 Ответ

0 голосов
/ 15 марта 2019

Я подозреваю, что вы обращаетесь к таблицам в вашем запросе выбора слишком рано, даже до того, как он создан. Вам нужно обновить ваш метод createDB до следующего,

private createDB() {
        return (new Sqlite("imtracker.db")).then(db => {
            return Promise.all([
                db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, password TEXT, firstName TEXT, lastName TEXT, gender TEXT, permissions TEXT, year INTEGER, basketball NUMERIC, dodgeball NUMERIC, football NUMERIC, soccer NUMERIC, softball NUMERIC, volleyball NUMERIC, teamID INTEGER)")
                    .catch(error => {
                        console.log("CREATE USESRS TABLE ERROR: ", error);
                        throw error;
                    }),
                db.execSQL("CREATE TABLE IF NOT EXISTS leagues (id INTEGER PRIMARY KEY AUTO INCREMENT, teamSize INTEGER, sportID INTEGER)")
                    .catch(error => {
                        console.log("CREATE LEAGUES TABLE ERROR: ", error);
                        throw error;
                    })
            ]).then(() => db);
        });
    }
...