웹사이트 검색

Ubuntu 22.04에서 Node.js와 함께 SQLite를 사용하는 방법


작성자는 DOnations 프로그램에 쓰기를 선택했습니다.

소개

SQLite는 데이터 저장을 위한 널리 사용되는 오픈 소스 SQL 데이터베이스 엔진입니다. 서버리스이므로 실행하는 데 서버가 필요하지 않습니다. 대신 컴퓨터 디스크에 있는 파일에서 데이터를 읽고 씁니다. 또한 SQLite는 구성이 필요하지 않습니다. 이로 인해 임베디드 시스템, 데스크톱/모바일 앱, 프로토타이핑 등을 위한 휴대성과 대중적인 선택이 됩니다.

Node.js와 함께 SQLite를 사용하려면 SQLite 데이터베이스에 연결하고 실행을 위해 애플리케이션에서 데이터베이스로 SQL 문을 보내는 데이터베이스 클라이언트가 필요합니다. 널리 사용되는 선택 중 하나는 SQLite 3에 대한 비동기 바인딩을 제공하는 node-sqlite3 패키지입니다.

이 자습서에서는 node-sqlite3를 사용하여 SQLite 데이터베이스와의 연결을 만듭니다. 다음으로 테이블을 만들고 데이터를 데이터베이스에 삽입하는 Node.js 앱을 만듭니다. 마지막으로 node-sqlite3를 사용하여 데이터베이스에서 데이터를 검색, 업데이트 및 삭제하도록 앱을 수정합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 시스템에 설정된 Node.js 개발 환경. Ubuntu 22.04를 사용하는 경우 Node.js를 설치하고 로컬 개발 환경을 만드는 방법 자습서의 옵션 3에 따라 최신 버전의 Node.js를 설치합니다.\n
  • 개발 환경에 설치된 SQLite3. Ubuntu 20.04에서 SQLite를 설치하고 사용하는 방법 자습서의 1단계를 따르십시오.\n테이블을 만들고 SQL 쿼리를 작성하여 테이블의 데이터를 검색하고 수정하는 방법에 대한 기본 지식. Ubuntu 20.04에서 SQLite를 설치하고 사용하는 방법 자습서의 2~6단계를 따르십시오.\n
  • Node.js에서 첫 번째 프로그램을 작성하고 실행하는 방법 자습서에서 찾을 수 있는 Node.js 프로그램 작성 방법에 익숙합니다.\n

1단계 - 프로젝트 디렉토리 설정

이 단계에서는 프로젝트 디렉토리를 생성하고 node-sqlite3를 종속 항목으로 다운로드합니다.

시작하려면 mkdir 명령을 사용하여 디렉토리를 만듭니다. 이 튜토리얼에서는 sqlite_demo라고 부르지만 원하는 이름으로 바꿀 수 있습니다.

  1. mkdir sqlite_demo

다음으로 cd 명령을 사용하여 새로 생성된 디렉토리로 변경합니다.

  1. cd sqlite_demo

npm 명령을 사용하여 프로젝트 디렉토리를 npm 패키지로 초기화합니다.

  1. npm init -y

이 명령은 프로젝트의 중요한 메타데이터를 포함하는 package.json 파일을 생성합니다. -y 옵션은 npm이 모든 기본값을 수락하도록 지시합니다.

명령을 실행하면 다음 출력이 화면에 표시됩니다.

Output
Wrote to /home/sammy/sqlite_demo/package.json: { "name": "sqlite_demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }

출력은 프로젝트의 중요한 메타데이터를 기록하는 속성이 포함된 package.json 파일이 생성되었음을 나타냅니다. 몇 가지 중요한 옵션은 다음과 같습니다.

  • name: 프로젝트의 이름입니다.
  • version: 프로젝트 버전.
  • main: 프로젝트의 시작점입니다.

기본 옵션을 그대로 둘 수 있지만 기본 설정에 맞게 속성 값을 자유롭게 수정할 수 있습니다. 속성에 대한 자세한 내용은 npm의 package.json 설명서를 참조하세요.

다음으로 npm install을 사용하여 node-sqlite3 패키지를 설치합니다.

  1. npm install sqlite3

패키지를 설치하면 출력이 다음과 같이 표시됩니다.

Output
added 104 packages, and audited 105 packages in 9s 5 packages are looking for funding run `npm fund` for details found 0 vulnerabilities

이제 node-sqlite3를 설치했으므로 다음 섹션에서 이를 사용하여 SQLite 데이터베이스에 연결합니다.

2단계 - SQLite 데이터베이스에 연결

이 단계에서는 node-sqlite3를 사용하여 Node.js 프로그램을 생성할 SQLite 데이터베이스에 연결합니다. 이 데이터베이스에는 다양한 상어와 해당 속성이 포함되어 있습니다. 데이터베이스 연결을 설정하기 위해 node-sqlite3 패키지는 Database 클래스를 제공합니다. 인스턴스화되면 클래스는 컴퓨터 디스크에 SQLite 데이터베이스 파일을 만들고 연결합니다. 연결이 설정되면 이후 섹션에서 데이터를 삽입, 검색 또는 업데이트하는 데 사용할 애플리케이션용 테이블을 생성합니다.

nano 또는 선호하는 텍스트 편집기를 사용하여 db.js 파일을 만들고 엽니다.

  1. nano db.js

db.js 파일에서 다음 코드를 추가하여 SQLite 데이터베이스와의 연결을 설정합니다.

const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";

function createDbConnection() {
  const db = new sqlite3.Database(filepath, (error) => {
    if (error) {
      return console.error(error.message);
    }
  });
  console.log("Connection with SQLite has been established");
  return db;
}

첫 번째 줄에서 node-sqlite3 모듈을 프로그램 파일로 가져옵니다. 두 번째 줄에서 SQLite 데이터베이스가 상주할 경로와 데이터베이스 파일의 이름(이 경우 fish.dbfilepath를 설정합니다. >.

다음 줄에서 SQLite 데이터베이스와의 연결을 설정하는 createDbConnection() 함수를 정의합니다. 함수 내에서 new 키워드를 사용하여 sqlite3.Database() 클래스를 인스턴스화합니다. 이 클래스는 파일 경로와 콜백이라는 두 가지 인수를 사용합니다.

첫 번째 인수인 filepath는 SQLite 데이터베이스의 이름과 경로를 허용합니다. 여기서는 ./fish.db입니다. 두 번째 인수는 데이터베이스가 생성되고 데이터베이스에 대한 연결이 설정되면 실행되는 콜백입니다. 콜백은 데이터베이스 연결을 설정하려고 할 때 오류가 발생하는 경우 error 객체로 설정된 error 매개변수를 사용합니다. 콜백 내에서 if 문을 사용하여 오류가 있는지 확인합니다. 조건이 참이면 console.error() 메서드를 사용하여 오류 메시지를 기록합니다.

이제 sqlite3.Database() 클래스를 사용하여 인스턴스를 생성하면 프로젝트 디렉토리에 SQLite 데이터베이스 파일이 생성되고 db 에 저장된 데이터베이스 개체가 반환됩니다. 변수. 데이터베이스 개체는 테이블을 만들고 데이터를 삽입, 검색 또는 수정하는 SQL 문을 전달하는 데 사용할 수 있는 메서드를 제공합니다.

마지막으로 console.log()를 호출하여 성공 메시지를 기록하고 db 변수에 데이터베이스 개체를 반환합니다.

다음으로 강조 표시된 코드를 추가하여 테이블을 만드는 함수를 만듭니다.

...
function createDbConnection() {
    ...
}

function createTable(db) {
  db.exec(`
  CREATE TABLE sharks
  (
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    name   VARCHAR(50) NOT NULL,
    color   VARCHAR(50) NOT NULL,
    weight INTEGER NOT NULL
  );
`);
}

createTable() 함수는 SQLite 데이터베이스에 테이블을 생성합니다. 데이터베이스 개체 db를 매개변수로 사용합니다. createTable() 함수 내에서 주어진 SQL 문을 데이터베이스로 보내는 db 데이터베이스 개체의 exec() 메서드를 호출합니다. 실행됩니다. exec() 메서드는 결과 행을 반환하지 않는 쿼리에만 사용됩니다.

exec() 메서드에 전달된 CREATE TABLE sharks... SQL 문은 다음 필드가 있는 테이블 sharks를 생성합니다.

  • ID: INTEGER 데이터 유형의 값을 저장합니다. PRIMARY KEY 제약 조건은 열을 기본 키로 지정하고 AUTOINCREMENT는 테이블의 각 행에 대한 ID 열 값을 자동으로 증가시키도록 SQLite에 지시합니다.
  • name: 최대 50자의 VARCHAR 데이터 유형을 사용하여 상어의 이름을 자세히 설명합니다. NOT NULL 제약 조건은 필드가 NULL 값을 저장할 수 없도록 합니다.
  • color: 최대 50자의 VARCHAR 데이터 유형을 사용하여 상어의 색상을 나타냅니다. NOT NULL 제약 조건은 필드가 NULL 값을 허용하지 않아야 함을 나타냅니다.
  • weight: INTEGER 데이터 유형을 사용하여 상어의 무게를 킬로그램으로 저장하고 NOT NULL 제약 조건을 사용하여 NULL 값을 보장합니다. 허용되지 않습니다.

동일한 db.js 파일에서 강조 표시된 코드를 추가하여 createTable() 함수를 호출합니다.

function createDbConnection() {
  const db = new sqlite3.Database(filepath, (error) => {
    if (error) {
      return console.error(error.message);
    }
    createTable(db);
  });
  console.log("Connection with SQLite has been established");
  return db;
}


function createTable(db) {
    ...
}

콜백이 실행되면 db 데이터베이스 개체를 인수로 사용하여 createTable() 함수를 호출합니다.

다음으로 createDbConnection() 함수를 호출하기 위해 다음 줄을 추가합니다.

...
function createDbConnection() {
    ...
}


function createTable(db) {
    ...
}

module.exports = createDbConnection();

이전 코드에서 데이터베이스에 대한 연결을 설정하고 데이터베이스 개체를 반환하는 createDbConnection() 함수를 호출합니다. 그런 다음 module.exports를 사용하여 다른 파일에서 참조할 수 있도록 데이터베이스 개체를 내보냅니다.

이제 파일에 다음이 포함됩니다.

const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";

function createDbConnection() {
  const db = new sqlite3.Database(filepath, (error) => {
    if (error) {
      return console.error(error.message);
    }
    createTable(db);
  });
  console.log("Connection with SQLite has been established");
  return db;
}

function createTable(db) {
  db.exec(`
  CREATE TABLE sharks
  (
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    name   VARCHAR(50) NOT NULL,
    color   VARCHAR(50) NOT NULL,
    weight INTEGER NOT NULL
  );
`);
}

module.exports = createDbConnection();

파일을 저장하고 종료합니다. nano를 사용하는 경우 CTRL+X를 눌러 종료하고 y를 눌러 변경 사항을 저장한 다음 ENTER 를 누릅니다. 파일명을 확인합니다.

node 명령을 사용하여 db.js 파일을 실행합니다.

  1. node db.js

출력은 데이터베이스 연결이 성공적으로 설정되었음을 나타냅니다.

Output
Connection with SQLite has been established

다음으로 ls 명령을 사용하여 fish.db 데이터베이스 파일이 생성되었는지 확인합니다.

  1. ls
Output
db.js fish.db node_modules package-lock.json package.json

출력에 fish.db 데이터베이스 파일이 표시되면 데이터베이스가 성공적으로 생성되었음을 확인할 수 있습니다.

이제 db.js 파일을 실행할 때마다 createTable() 함수를 호출하여 데이터베이스에 테이블을 생성합니다. 이미 존재하는 테이블을 만들려고 하면 SQLite가 트리거되어 오류가 발생합니다. 이를 확인하려면 node 명령으로 db.js 파일을 다시 실행하십시오.

  1. node db.js

이번에는 다음 출력과 같이 오류가 표시됩니다.

Output
Connection with SQLite has been established undefined:0 [Error: SQLITE_ERROR: table sharks already exists Emitted 'error' event on Database instance at: ] { errno: 1, code: 'SQLITE_ERROR' } Node.js v17.6.0

오류 메시지는 sharks 테이블이 이미 있음을 나타냅니다. node 명령을 처음 실행할 때 fish 데이터베이스와 sharks 테이블이 생성되었기 때문입니다. 명령을 다시 실행하면 createTable() 함수가 두 번째로 다시 실행되어 테이블이 이미 존재하므로 오류가 발생합니다.

이 오류는 데이터베이스 개체 메서드를 사용하여 다른 파일에서 데이터베이스를 조작하려고 할 때마다 트리거됩니다. 예를 들어 다음 단계에서는 데이터베이스에 데이터를 삽입하는 파일을 만듭니다. 데이터베이스 개체를 사용하려면 db.js 파일을 가져와 데이터베이스에 데이터를 삽입하는 관련 메서드를 호출합니다. 파일을 실행하면 db.js가 실행되어 동일한 오류가 발생합니다.

이 문제를 해결하려면 fs 모듈의 existsSync() 메서드를 사용하여 fish.db 데이터베이스 파일이 있는지 확인합니다. 프로젝트 디렉토리. 데이터베이스 파일이 존재하는 경우 createTable() 함수를 호출하지 않고 데이터베이스에 대한 연결을 설정합니다. 존재하지 않는 경우 연결을 설정하고 createTable() 함수를 호출합니다.

이렇게 하려면 편집기에서 db.js를 한 번 더 엽니다.

  1. nano db.js

db.js 파일에서 강조 표시된 코드를 추가하여 데이터베이스 파일이 있는지 확인합니다.

const fs = require("fs");
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";

function createDbConnection() {
  if (fs.existsSync(filepath)) {
    return new sqlite3.Database(filepath);
  } else {
    const db = new sqlite3.Database(filepath, (error) => {
      if (error) {
        return console.error(error.message);
      }
      createTable(db);
    });
    console.log("Connection with SQLite has been established");
    return db;
  }
}

먼저 파일 시스템과 상호 작용하는 데 사용되는 fs 모듈을 가져옵니다. 둘째, 추가된 if 문에서 fs.existSync() 메서드를 호출하여 주어진 인수에 파일이 있는지 확인합니다. 이 파일은 데이터베이스 파일 <./fish.db 여기. 파일이 존재하면 데이터베이스 파일 경로로 sqlite3.Database()를 호출하고 콜백을 생략합니다. 그러나 파일이 존재하지 않는 경우 데이터베이스 인스턴스를 생성하고 콜백에서 createTable() 함수를 호출하여 데이터베이스에 테이블을 생성합니다.

이제 전체 파일이 다음과 같이 표시됩니다.

const fs = require("fs");
const sqlite3 = require("sqlite3").verbose();
const filepath = "./fish.db";

function createDbConnection() {
  if (fs.existsSync(filepath)) {
    return new sqlite3.Database(filepath);
  } else {
    const db = new sqlite3.Database(filepath, (error) => {
      if (error) {
        return console.error(error.message);
      }
      createTable(db);
    });
    console.log("Connection with SQLite has been established");
    return db;
  }
}

function createTable(db) {
  db.exec(`
  CREATE TABLE sharks
  (
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    name   VARCHAR(50) NOT NULL,
    color   VARCHAR(50) NOT NULL,
    weight INTEGER NOT NULL
  );
`);
}

module.exports = createDbConnection();

변경을 완료하면 파일을 저장하고 닫습니다.

db.js 파일이 여러 번 실행될 때 오류가 발생하지 않도록 하려면 rm이 포함된 fish.db 파일을 삭제하십시오. 새로 시작하는 명령:

  1. rm fish.db

db.js 파일을 실행합니다.

  1. node db.js
Output
Connection with SQLite has been established

이제 db.js가 데이터베이스에 연결되고 파일을 실행하여 db.js 파일의 모든 후속 재실행에 대해 테이블을 다시 생성하려고 시도하지 않는지 확인합니다. 다시:

  1. node db.js

이제 더 이상 오류가 발생하지 않는다는 것을 알 수 있습니다.

이제 SQLite 데이터베이스에 대한 연결을 설정하고 테이블을 만들었으므로 데이터베이스에 데이터를 삽입합니다.

3단계 - SQLite 데이터베이스에 데이터 삽입

이 단계에서는 node-sqlite3 모듈을 사용하여 SQLite 데이터베이스에 데이터를 삽입하는 함수를 생성합니다. 명령줄 인수로 삽입하려는 데이터를 프로그램에 전달합니다.

텍스트 편집기에서 insertData.js 파일을 만들고 엽니다.

  1. nano insertData.js

insertData.js 파일에서 다음 코드를 추가하여 명령줄 인수를 가져옵니다.

const db = require("./db");

function insertRow() {
  const [name, color, weight] = process.argv.slice(2);
}

첫 번째 줄에서는 이전 단계에서 db.js 파일로 내보낸 데이터베이스 개체를 가져옵니다. 두 번째 줄에서 테이블에 데이터를 삽입하는 데 곧 사용할 insertRow() 함수를 정의합니다. 함수에서 process.argv는 배열의 모든 명령줄 인수를 반환합니다. 인덱스 0의 첫 번째 요소에는 노드에 대한 경로가 포함됩니다. 색인 1의 두 번째 요소는 JavaScript 프로그램의 파일 이름을 저장합니다. 인덱스 2에서 시작하는 모든 후속 요소에는 파일에 전달한 명령줄 인수가 포함되어 있습니다. 처음 두 인수를 건너뛰려면 JavaScript의 slice() 메서드를 사용하여 배열의 얕은 복사본을 만들고 인덱스 2에서 배열 끝까지 요소를 반환합니다.

다음으로 강조 표시된 코드를 추가하여 데이터베이스에 데이터를 삽입합니다.

const db = require("./db");

function insertRow() {
  const [name, color, weight] = process.argv.slice(2);
  db.run(
    `INSERT INTO sharks (name, color, weight) VALUES (?, ?, ?)`,
    [name, color, weight],
    function (error) {
      if (error) {
        console.error(error.message);
      }
      console.log(`Inserted a row with the ID: ${this.lastID}`);
    }
  );
}

앞의 코드에서 db.run() 메서드를 호출합니다. 이 메서드는 SQL 문, 배열 및 콜백의 세 가지 인수를 사용합니다. 첫 번째 인수 INSERT INTO sharks...는 데이터베이스에 데이터를 삽입하는 SQL 문입니다. INSERT 문의 VALUES 문은 삽입해야 하는 쉼표로 구분된 값 목록을 사용합니다. 값을 직접 전달하는 대신 ? 자리 표시자를 전달하고 있음에 유의하십시오. 이것은 SQL 주입 공격을 피하기 위한 것입니다. 실행하는 동안 SQLite는 명령줄 인수 값을 포함하는 배열인 db.run() 메서드 두 번째 인수에 전달된 값으로 자리 표시자를 자동으로 대체합니다.

마지막으로 db.run() 메서드의 세 번째 인수는 데이터가 테이블에 성공적으로 삽입되었을 때 실행되는 콜백입니다. 오류가 있으면 오류 메시지가 콘솔에 기록됩니다. 삽입에 성공하면 this.lastID가 반환한 새로 삽입된 행의 ID로 성공 메시지를 기록합니다.

이제 강조 표시된 줄을 추가하여 insertRow() 함수를 호출합니다.

const db = require("./db");

function insertRow() {
  const [name, color, weight] = process.argv.slice(2);
  db.run(
    `INSERT INTO sharks (name, color, weight) VALUES (?, ?, ?)`,
    [name, color, weight],
    function (error) {
      if (error) {
        console.error(error.message);
      }
      console.log(`Inserted a row with the ID: ${this.lastID}`);
    }
  );
}

insertRow();

파일을 저장하고 닫은 다음 상어 이름, 색상 및 무게 인수를 사용하여 파일을 실행합니다.

  1. node insertData.js sammy blue 1900

출력은 행이 기본 ID가 1인 테이블에 삽입되었음을 나타냅니다.

Output
Inserted a row with the ID: 1

다른 인수를 사용하여 명령을 다시 실행하십시오.

  1. node insertData.js max white 2100
Output
Inserted a row with the ID: 2

앞의 명령을 실행하면 sharks 테이블에 두 개의 행이 생성됩니다.

이제 SQLite 데이터베이스에 데이터를 삽입할 수 있으므로 다음으로 데이터베이스에서 데이터를 검색합니다.

4단계 - SQLite 데이터베이스에서 데이터 검색

이 단계에서는 node-sqlite3 모듈을 사용하여 SQLite 데이터베이스의 sharks 테이블에 저장된 모든 데이터를 검색하고 콘솔에 로그인합니다.

먼저 listData.js 파일을 엽니다.

  1. nano listData.js

listData.js 파일에서 다음 코드를 추가하여 모든 행을 검색합니다.

const db = require("./db");

function selectRows() {
  db.each(`SELECT * FROM sharks`, (error, row) => {
    if (error) {
      throw new Error(error.message);
    }
    console.log(row);
  });
}

먼저 db.js 파일에서 데이터베이스 개체를 가져옵니다. 둘째, SQLite 데이터베이스의 모든 행을 검색하는 selectRows() 함수를 정의합니다. 함수 내에서 데이터베이스 개체 dbeach() 메서드를 사용하여 데이터베이스에서 행을 하나씩 검색합니다. each() 메서드는 SQL 문과 콜백이라는 두 가지 인수를 사용합니다.

첫 번째 인수 SELECTsharks 테이블의 모든 행을 반환합니다. 두 번째 인수는 데이터베이스에서 행이 검색될 때마다 실행되는 콜백입니다. 콜백에서 오류를 확인합니다. 오류가 있는 경우 throw 문을 사용하여 사용자 지정 오류를 만듭니다. 검색 중에 오류가 발생하지 않으면 데이터가 콘솔에 기록됩니다.

이제 강조 표시된 코드를 추가하여 selectRows() 함수를 호출합니다.

const db = require("./db");

function selectRows() {
  db.each(`SELECT * FROM sharks`, (error, row) => {
    if (error) {
      throw new Error(error.message);
    }
    console.log(row);
  });
}

selectRows();

파일을 저장하고 종료한 다음 파일을 실행합니다.

  1. node listData.js

명령을 실행하면 다음과 같이 표시되는 출력이 표시됩니다.

Output
{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 } { ID: 2, name: 'max', color: 'white', weight: 2100 }

출력에는 이전 단계에서 sharks 테이블에 삽입한 모든 행이 표시됩니다. node-sqlite3 모듈은 각 SQL 결과를 JavaScript 객체로 변환합니다.

이제 SQLite 데이터베이스에서 데이터를 검색할 수 있으므로 SQLite 데이터베이스의 데이터를 업데이트합니다.

5단계 - SQLite 데이터베이스에서 데이터 수정

이 단계에서는 node-sqlite3 모듈을 사용하여 SQLite 데이터베이스의 행을 업데이트합니다. 이를 위해 수정하려는 행의 기본 ID와 행을 업데이트하려는 값을 포함하는 명령줄 인수를 프로그램에 전달합니다.

텍스트 편집기에서 updateData.js 파일을 만들고 엽니다.

  1. nano updateData.js

updateData.js 파일에서 다음 코드를 추가하여 레코드를 업데이트합니다.

const db = require("./db");

function updateRow() {
  const [id, name] = process.argv.slice(2);
  db.run(
    `UPDATE sharks SET name = ? WHERE id = ?`,
    [name, id],
    function (error) {
      if (error) {
        console.error(error.message);
      }
      console.log(`Row ${id} has been updated`);
    }
  );
}

updateRow();

먼저 db.js 파일에서 데이터베이스 개체를 가져옵니다. 둘째, 데이터베이스의 행을 업데이트하는 updateRow 함수를 정의합니다. 함수 내에서 명령줄 인수를 idname 변수로 압축 해제합니다. id 변수에는 업데이트하려는 행의 기본 ID가 포함되고 name에는 이름 필드에 반영할 값이 포함됩니다.

다음으로 SQL 문과 콜백 인수를 사용하여 db.run() 함수를 호출합니다. UPDATE SQL 문은 name 열을 현재 값에서 name 변수에 전달된 값으로 변경합니다. WHERE 절은 id 변수에 ID가 있는 행만 업데이트되도록 합니다. db.run() 메서드는 값이 업데이트되면 실행되는 콜백인 두 번째 인수를 사용합니다.

마지막으로 updateRow() 함수를 호출합니다.

변경을 마치면 파일을 저장하고 닫습니다.

변경하려는 행의 id와 새 이름을 사용하여 updateData.js 파일을 실행합니다.

  1. node updateData.js 2 sonny
Output
Row 2 has been updated

이름이 변경되었는지 확인합니다.

  1. node listData.js

명령을 실행하면 출력은 다음과 유사합니다.

Output
{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 } { ID: 2, name: 'sonny', color: 'white', weight: 2100 }

출력은 ID가 2인 행에 이제 name 필드의 값으로 sonny가 있음을 나타냅니다.

이를 통해 이제 데이터베이스의 행을 업데이트할 수 있습니다. 다음으로 SQLite 데이터베이스에서 데이터를 삭제합니다.

6단계 - SQLite 데이터베이스에서 데이터 삭제

이 섹션에서는 node-sqlite3를 사용하여 SQLite 데이터베이스의 테이블에서 행을 선택하고 삭제합니다.

텍스트 편집기에서 deleteData.js 파일을 만들고 엽니다.

  1. nano deleteData.js

deleteData.js 파일에서 다음 코드를 추가하여 데이터베이스에서 행을 삭제합니다.

const db = require("./db");

async function deleteRow() {
  const [id] = process.argv.slice(2);
  db.run(`DELETE FROM sharks WHERE id = ?`, [id], function (error) {
    if (error) {
      return console.error(error.message);
    }
    console.log(`Row with the ID ${id} has been deleted`);
  });
}

deleteRow();

먼저 db.js 파일에서 데이터베이스 개체를 가져옵니다. 두 번째로 sharks 테이블에서 행을 삭제하는 deleteRow()를 정의합니다. 함수 내에서 기본 키 ID의 압축을 풀고 id 변수에 저장합니다. 다음으로 두 개의 인수를 사용하는 db.run()을 호출합니다. 첫 번째 인수는 sharks 테이블의 행을 삭제하는 DELETE from sharks... SQL 문입니다. WHERE 절은 id 변수에 ID가 있는 행만 삭제되도록 합니다. 두 번째 인수는 행이 삭제되면 실행되는 콜백입니다. 성공하면 함수는 성공 메시지를 기록합니다. 그렇지 않으면 콘솔에 오류를 기록합니다.

마지막으로 deleteRow() 함수를 호출합니다.

파일을 저장하고 닫은 후 다음 명령을 실행합니다.

  1. node deleteData.js 2
Output
Row with the ID 2 has been deleted

다음으로 행이 삭제되었는지 확인합니다.

  1. node listData.js

명령을 실행하면 출력이 다음과 유사하게 표시됩니다.

Output
{ ID: 1, name: 'sammy', color: 'blue', weight: 1900 }

ID가 2인 행은 더 이상 결과에 없습니다. 이것은 행이 삭제되었음을 확인합니다.

이제 node-sqlite3 모듈을 사용하여 SQLite 데이터베이스에서 행을 삭제할 수 있습니다.

결론

이 기사에서는 node-sqlite3 모듈을 사용하여 SQLite 데이터베이스에 연결하고 테이블을 만드는 Node.js 앱을 만들었습니다. 다음으로 데이터베이스에서 데이터를 삽입, 검색 및 업데이트하도록 앱을 수정했습니다. 마지막으로 데이터베이스의 데이터를 삭제하도록 앱을 수정했습니다.

node-sqlite3 메서드에 대한 자세한 내용은 Node.js 코딩 방법 시리즈를 참조하세요.