用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' }

查询本身是同步运行的,但并不等待查询完成,所以请注意这一点。

广告
将在 10 秒后关闭
bannerAds