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:
- npm install sqlite3
Następnie należy zaimportować moduł sqlite3:
- const sqlite3 = require('sqlite3').verbose();
Otwarcie w trybie odczytu/zapisu lub stworzenie nowej bazy danych wygląda następująco:
- let db = new sqlite3.Database('./db/test.db', (err) => {
- if (err) {
- console.log('ERROR!');
- return console.error(err.message);
- }
- console.log('Connected SQlite db.');
- });
Stworzenie przykładowej bazy danych:
- db.serialize(() => {
- db.run(`CREATE TABLE test (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);`,
- (err) => {
- if (err) {
- console.log(err.message);
- }
- console.log('db create');
- });
- });
Dodanie wartości do wyświetlonych pól:
- db.serialize(() => {
- db.run(`INSERT INTO test (first_name, last_name, email, phone)
- VALUES ("imie", "nazwisko", "email1@gmail.com", "+48 654 544 423");`,
- (err) => {
- if (err) {
- console.log(err.message);
- }
- else {
- console.log('db value add');
- }
- });
Odczytanie wszystkich danych z bazy:
- db.serialize(() => {
- db.each(`SELECT * FROM test`, (err, row) => {
- if (err) {
- console.error(err.message);
- }
- else {
- console.log(row.contact_id + "\t" +
- row.first_name + "\t" +
- row.last_name + "\t" +
- row.email + "\t" + row.phone);
- }
- });
- });
Na samym końcu należy pamiętać o zamknięciu bazy danych:
- db.close((err) => {
- if (err) {
- console.log('ERROR!');
- return console.error(err.message);
- }
- console.log('Close db.');
- });
Wszystkie funkcje zostały przeniesione do osobnego modułu:
- const sqlite3 = require('sqlite3').verbose();
- let db;
- /* Return DB */
- function getDB() {
- return db;
- }
- /* Open DataBase*/
- function openDB(dbLoc) {
- db = new sqlite3.Database(dbLoc, (err) => {
- if (err) {
- console.log('ERROR!');
- return console.error(err.message);
- }
- console.log('Connected SQlite db.');
- });
- }
- /* Read all data */
- function readAllData(tableName) {
- db.serialize(() => {
- db.each(`SELECT * FROM ` + tableName, (err, row) => {
- if (err) {
- console.error(err.message);
- }
- else {
- console.log(row);
- }
- });
- });
- }
- /* search data */
- function searchData(tableName, searchColName, searchColValue) {
- db.serialize(() => {
- db.each(`SELECT * FROM ${tableName} WHERE ${searchColName} = '${searchColValue}';`, (err, row) => {
- if (err) {
- console.error(err.message);
- }
- else {
- console.log(row);
- }
- });
- });
- }
- /*
- tableName - ex. test'
- 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
- */
- function createTable(tableName, tableStructure) {
- db.serialize(() => {
- db.run('CREATE TABLE ' + tableName + ' (' + tableStructure + ');',
- (err) => {
- if (err) {
- console.log(err.message);
- }
- else {
- console.log('database create');
- }
- });
- });
- }
- /* Execute command */
- function executeCommand(command){
- db.serialize(() => {
- db.each(command, (err, row) => {
- if (err) {
- console.error(err.message);
- }
- else {
- console.log(row);
- }
- });
- });
- }
- /* Close DataBase */
- function closeDB() {
- db.close((err) => {
- if (err) {
- console.log('ERROR!');
- return console.error(err.message);
- }
- console.log('Close the database connection.');
- });
- }
- //Exports
- module.exports.getDB = getDB;
- module.exports.openDB = openDB;
- module.exports.closeDB = closeDB;
- module.exports.createTable = createTable;
- module.exports.readAllData = readAllData;
- module.exports.executeCommand = executeCommand;
- module.exports.searchData = searchData;
Poniżej przykładowe wywołanie modułu w pliku:
- //Import sqlite module
- const sqlite3 = require('sqlite3').verbose();
- const database = require('./sqlite_conn')
- database.openDB('./db/test.db');
- database.searchData('test', 'first_name', 'imie1');
- database.readAllData('test');
- database.closeDB();
Linux Debian:
Na samym początku należy zainstalować NodeJs oraz wszystkie potrzebne pakiety:
- cd ~
- curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
- sudo bash nodesource_setup.sh
- sudo apt install nodejs
- //Sprawdzenie wersji:
- node -v
- 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:
- sudo apt-get install sqlite3
- sudo apt-get install libsqlite3-dev
Na końcu należy doinstalować pakiety dla NodeJs:
- npm install sqlite3
Dalej procedura obsługi SQLITE za pomocą NodeJs odbywa się standardowo jak dla Windows.