用Node.js显示SQLite3数据库中的数据
想做的事情
创建一个SQLite测试数据并在控制台中显示。
写的代码
npm install sqlite3
const sqlite3 = require('sqlite3').verbose();
// データベース接続の作成
const db = new sqlite3.Database('mydatabase.db');
// テーブル作成のクエリ
const createTableQuery = `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
)
`;
// テーブルの作成
db.run(createTableQuery, function(err) {
if (err) {
console.error(err.message);
} else {
console.log('テーブルが作成されました');
}
});
// ユーザーの挿入クエリ
const insertUserQuery = `
INSERT INTO users (name, email)
VALUES (?, ?)
`;
// ユーザーのデータ
const user = {
name: 'John Doe',
email: 'john@example.com',
};
// ユーザーの挿入
db.run(insertUserQuery, [user.name, user.email], function(err) {
if (err) {
console.error(err.message);
} else {
console.log('ユーザーが追加されました');
}
});
// ユーザーの取得クエリ
const getUsersQuery = 'SELECT * FROM users';
// ユーザーの取得
db.all(getUsersQuery, function(err, rows) {
if (err) {
console.error(err.message);
} else {
rows.forEach(row => {
console.log(row);
});
}
});
// データベース接続のクローズ
db.close();
运行以上代码时,第一次会导致错误,但第二次及之后可以正常获取用户。
这是因为db.run内部是异步进行操作的,所以需要进行修正使其以同步方式运行。
SQLITE_ERROR: no such table: users
SQLITE_ERROR: no such table: users
テーブルが作成されました
テーブルが作成されました
ユーザーが追加されました
{ id: 1, name: 'John Doe', email: 'john@example.com' }
使用db.serialize可以同步地发送查询。
const sqlite3 = require('sqlite3').verbose();
// データベース接続の作成
const db = new sqlite3.Database('mydatabase.db');
// テーブル作成のクエリ
const createTableQuery = `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
)
`;
// ユーザーの挿入クエリ
const insertUserQuery = `
INSERT INTO users (name, email)
VALUES (?, ?)
`;
// ユーザーのデータ
const user = {
name: 'John Doe',
email: 'john@example.com',
};
// ユーザーの取得クエリ
const getUsersQuery = 'SELECT * FROM users';
db.serialize(() => {
// テーブルの作成
db.run(createTableQuery, function(err) {
if (err) {
console.error(err.message);
} else {
console.log('テーブルが作成されました');
}
});
// ユーザーの挿入
db.run(insertUserQuery, [user.name, user.email], function(err) {
if (err) {
console.error(err.message);
} else {
console.log('ユーザーが追加されました');
}
});
// ユーザーの取得
db.all(getUsersQuery, function(err, rows) {
if (err) {
console.error(err.message);
} else {
rows.forEach(row => {
console.log(row);
});
}
});
console.log('end serialize');
});
console.log('after serialize');
// データベース接続のクローズ
db.close();
end serialize
after serialize
テーブルが作成されました
ユーザーが追加されました
{ id: 1, name: 'John Doe', email: 'john@example.com' }
{ id: 2, name: 'John Doe', email: 'john@example.com' }
查询本身是同步运行的,但并不等待查询完成,所以请注意这一点。