Я новичок в NodeJS и базах данных. И я запутался с поведением моей программы. Я просто пытаюсь создать таблицу, а затем удалить ее. Но что-то не так в моем коде. Результаты действительно странные. Я запускал свой код несколько раз, и результаты разные. Пример результатов:
First execution
[ { name: 'first' } ]
createTable error SQLITE_ERROR: table first already exists
[ { name: 'first' } ]
table first dropped
Second execution
[]
[]
table first(name text) created succesfully
Third execution
createTable error SQLITE_ERROR: table first already exists
[ { name: 'first' } ]
[ { name: 'first' } ]
table first dropped
Код указан ниже. Если бы кто-то мог указать на мою ошибку, я был бы признателен.
import { Database } from 'sqlite3';
class DBWrapper {
private db: Database;
constructor(dbName: string) {
this.db = new Database(dbName, (error) => {
if (error) {
console.log('Database construction failed');
} else {
console.log('Database created successfully');
}
});
}
public createTable(tableName: string): void {
this.db.serialize(() => {
this.db.run('CREATE TABLE ' + tableName, (error) => {
if (error) {
console.log('createTable error ' + error.message);
} else {
console.log('table ' + tableName + ' created succesfully');
}
});
});
this.db.close();
this.db = new Database('sqlitest');
}
public printTables(): void {
this.db.serialize(() => {
this.db.all('select name from sqlite_master where type=\'table\'', (error, tables) => {
console.log(tables);
});
});
this.db.close();
this.db = new Database('sqlitest');
}
public clear(): void {
this.db.serialize(() => {
this.db.all('select name from sqlite_master where type=\'table\'', (error, tables) => {
if (error) {
console.log('error in select all tables');
} else {
tables.forEach((table) => {
this.db.run('DROP TABLE ' + table.name, (innerError) => {
if (innerError) {
console.log('drop table ' + table.name + ' error ' + innerError.message);
} else {
console.log('table ' + table.name + ' dropped');
}
});
});
}
});
});
this.db.close();
this.db = new Database('sqlitest');
}
}
const testDB = new DBWrapper('sqlitest');
testDB.createTable('first(name text)');
testDB.printTables();
testDB.clear();
testDB.printTables();