niedziela, 27 września 2020

Som Labs - IMx6 ULL - Debian - NodeJs SQLIte

W tym poście chciałbym opisać sposób obsługi bazy danych SQLite za pomocą środowiska NodeJs.

[Źródło: https://pixabay.com/pl/vectors/js-w%C4%99z%C5%82%C3%B3w-logo-nodejs-javascript-736399/]

Windows:


Na samym początku należy pobrać i zainstalować moduł obsługujący bazę sqlite3:

  1. npm install sqlite3

Następnie należy zaimportować moduł sqlite3:

  1. const sqlite3 = require('sqlite3').verbose();

Otwarcie w trybie odczytu/zapisu lub stworzenie nowej bazy danych wygląda następująco:

  1. let db = new sqlite3.Database('./db/test.db', (err) => {
  2.     if (err) {
  3.       console.log('ERROR!');
  4.       return console.error(err.message);
  5.     }
  6.     console.log('Connected SQlite db.');
  7. });

Stworzenie przykładowej bazy danych:

  1. db.serialize(() => {
  2.   db.run(`CREATE TABLE test (contact_id integer PRIMARY KEY,
  3.                           first_name text NOT NULL,
  4.                           last_name text NOT NULL,
  5.                           email text NOT NULL UNIQUE,
  6.                         phone text NOT NULL UNIQUE);`,
  7.   (err) => {
  8.     if (err) {
  9.       console.log(err.message);
  10.     }
  11.     console.log('db create');
  12.   });
  13. });

Dodanie wartości do wyświetlonych pól:

  1. db.serialize(() => {
  2.   db.run(`INSERT INTO test (first_name, last_name, email, phone)
  3.           VALUES ("imie", "nazwisko", "email1@gmail.com", "+48 654 544 423");`,
  4.   (err) => {
  5.     if (err) {
  6.       console.log(err.message);
  7.     }
  8.     else {
  9.       console.log('db value add');
  10.     }  
  11.   });

Odczytanie wszystkich danych z bazy:

  1. db.serialize(() => {
  2.   db.each(`SELECT * FROM test`, (err, row) => {
  3.     if (err) {
  4.       console.error(err.message);
  5.     }
  6.     else {
  7.       console.log(row.contact_id + "\t" +
  8.                   row.first_name + "\t" +
  9.                   row.last_name + "\t" +
  10.                   row.email + "\t" + row.phone);
  11.     }
  12.   });
  13. });

Na samym końcu należy pamiętać o zamknięciu bazy danych:

  1. db.close((err) => {
  2.   if (err) {
  3.     console.log('ERROR!');
  4.     return console.error(err.message);
  5.   }
  6.   console.log('Close db.');
  7. });

Wszystkie funkcje zostały przeniesione do osobnego modułu:

  1. const sqlite3 = require('sqlite3').verbose();
  2. let db;
  3.  
  4. /* Return DB */
  5. function getDB() {
  6.     return db;
  7. }
  8.  
  9. /* Open DataBase*/
  10. function openDB(dbLoc) {
  11.     db = new sqlite3.Database(dbLoc, (err) => {
  12.         if (err) {
  13.           console.log('ERROR!');
  14.           return console.error(err.message);
  15.         }
  16.         console.log('Connected SQlite db.');
  17.     });
  18. }
  19.  
  20. /* Read all data */
  21. function readAllData(tableName) {
  22.     db.serialize(() => {
  23.         db.each(`SELECT * FROM ` + tableName, (err, row) => {
  24.             if (err) {
  25.                 console.error(err.message);
  26.             }
  27.             else {
  28.                 console.log(row);
  29.             }
  30.         });
  31.     });
  32. }
  33.  
  34. /* search data */
  35. function searchData(tableName, searchColName, searchColValue) {
  36.     db.serialize(() => {
  37.         db.each(`SELECT * FROM ${tableName} WHERE ${searchColName} = '${searchColValue}';`, (err, row) => {
  38.             if (err) {
  39.                 console.error(err.message);
  40.             }
  41.             else {
  42.                 console.log(row);
  43.             }
  44.         });
  45.     });
  46. }
  47.  
  48. /*
  49. tableName - ex. test'
  50. tableStructure - contact_id integer PRIMARY KEY, first_name text NOT NULL, last_name text NOT NULL, email text NOT NULL UNIQUE, phone text NOT NULL UNIQUE
  51. */
  52. function createTable(tableName, tableStructure) {
  53.     db.serialize(() => {
  54.         db.run('CREATE TABLE ' + tableName + ' (' + tableStructure + ');',
  55.         (err) => {
  56.           if (err) {
  57.             console.log(err.message);
  58.           }
  59.           else {
  60.             console.log('database create');
  61.           }
  62.         });
  63.       });
  64. }
  65.  
  66. /* Execute command */
  67. function executeCommand(command){
  68.     db.serialize(() => {
  69.         db.each(command, (err, row) => {
  70.             if (err) {
  71.                 console.error(err.message);
  72.             }
  73.             else {
  74.                 console.log(row);
  75.             }
  76.         });
  77.     });
  78. }
  79.  
  80. /* Close DataBase */
  81. function closeDB() {
  82.     db.close((err) => {
  83.         if (err) {
  84.             console.log('ERROR!');
  85.             return console.error(err.message);
  86.         }
  87.         console.log('Close the database connection.');
  88.     });
  89. }
  90.  
  91. //Exports
  92. module.exports.getDB = getDB;
  93. module.exports.openDB = openDB;
  94. module.exports.closeDB = closeDB;
  95. module.exports.createTable = createTable;
  96. module.exports.readAllData = readAllData;
  97. module.exports.executeCommand = executeCommand;
  98. module.exports.searchData = searchData;

Poniżej przykładowe wywołanie modułu w pliku:

  1. //Import sqlite module
  2. const sqlite3 = require('sqlite3').verbose();
  3. const database = require('./sqlite_conn')
  4.  
  5. database.openDB('./db/test.db');
  6. database.searchData('test', 'first_name', 'imie1');
  7. database.readAllData('test');
  8. database.closeDB();

Linux Debian:

Na samym początku należy zainstalować NodeJs oraz wszystkie potrzebne pakiety:

  1. cd ~
  2. curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
  3. sudo bash nodesource_setup.sh
  4. sudo apt install nodejs
  5. //Sprawdzenie wersji:
  6. node -v
  7. npm -v

W przypadku braku zainstalowanego narzędzia do przesyłania danych z pakietu URL (curl) należy go zainstalować poleceniem apt install curl.

Po instalacji należy zainstalować pakiety SQLITE:

  1. sudo apt-get install sqlite3
  2. sudo apt-get install libsqlite3-dev

Na końcu należy doinstalować pakiety dla NodeJs:

  1. npm install sqlite3

Dalej procedura obsługi SQLITE za pomocą NodeJs odbywa się standardowo jak dla Windows.