Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Базы данных - лекция6 - Веб-приложение на Node.js + SQL

Anton
October 16, 2018

Базы данных - лекция6 - Веб-приложение на Node.js + SQL

Anton

October 16, 2018
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. sqlite-createdb.js var sqlite3 = require("sqlite3").verbose(); //var db = new sqlite3.Database(":memory:");

    var db = new sqlite3.Database("students.db"); // кстати, для колонки нельзя использовать имя 'group' - // это зарезервированное ключевое слово db.run("CREATE TABLE Student (name TEXT, grp TEXT)"); var stmt = db.prepare("INSERT INTO Student VALUES (?, ?)"); stmt.run("Багдасарян Луиза", "16-САИ"); stmt.run("Обухова Анна", "16-САИ"); stmt.run("Батанин Данил", "16-ПМ"); stmt.run("Горенкова Алла", "16-ПМ"); stmt.finalize(); db.close(); console.log("created db: students.db");
  2. или так sqlite-createdb.js var sqlite3 = require("sqlite3").verbose(); //var db =

    new sqlite3.Database(":memory:"); var db = new sqlite3.Database("students.db"); // для колонки нельзя использовать имя 'group' - // это зарезервированное ключевое слово db.run("CREATE TABLE Student (name TEXT, grp TEXT)", function(err) { if(err) { console.log(err); } else { var stmt = db.prepare("INSERT INTO Student VALUES (?, ?)"); stmt.run("Багдасарян Луиза", "16-САИ"); stmt.run("Обухова Анна", "16-САИ"); stmt.run("Глазов Сергей", "16-САИ"); stmt.run("Батанин Данил", "16-ПМ"); stmt.run("Гиниятуллин Адель", "16-ПМ"); stmt.run("Горенкова Алла", "16-ПМ"); stmt.finalize(); console.log("created db: students.db"); } db.close(); });
  3. sqlite-http-hello.js var http = require("http"); var sqlite3 = require("sqlite3").verbose(); var

    db = new sqlite3.Database("students.db"); http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}); response.write( "<!DOCTYPE html>\n" + "<html>\n" + " <head>\n" + " <meta charset='utf-8'>\n" + " </head>\n" + " <body>\n" );
  4. sqlite-http-hello.js db.all("SELECT * FROM Student", function(err, rows) { if(err) {

    response.write("<div style='font-size: 30px; color:red'>" + err + "</div>\n"); } else { response.write("<table>\n"); for(var i = 0; i < rows.length; i++) { var row = rows[i]; response.write("<tr><td>" + row.name + "</td><td>" + row.grp + "</td></tr>\n"); } response.write("</table>\n"); } response.end( " </body>\n" + "</html>\n" ); });
  5. и еще раз sqlite-http-hello.js var http = require("http"); var sqlite3

    = require("sqlite3").verbose(); var db = new sqlite3.Database("students.db"); http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}); response.write([...]); db.all("SELECT * FROM Student", function(err, rows) { [...] response.end( " </body>\n" + "</html>\n" ); }); }).listen(3000); console.log("Server running at http://localhost:3000/");
  6. • npm install sqlite3 (если не сделали раньше) • npm

    install http (на самом деле не обязательно)
  7. или package.json + npm install { "name": "sqlite-http-hello", "version": "0.1.0",

    "main": "sqlite-http-hello.js", "dependencies": { "http": "0.0.0", "sqlite3": "^4.0.2" } }
  8. Чуть сломаем запрос db.all("SELECT * FROM Students", function(err, rows) {

    if(err) { response.write("<div style='font-size: 30px; color:red'>" + err + "</div>\n"); } else { [...] } response.end( " </body>\n" + "</html>\n" ); });
  9. db.each vs db.all • db.all: колбэк возвращает записи одним массивом

    • db.each: колбэк возвращает записи по одной строке • db.all: пробежали записи по циклу for, сформировали таблицу HTML, завершили запрос response.end • db.each: как узнать, что строки закончились и можно отправлять response.end? никак
  10. Лаба 4.1: научиться работать с реляционной базой данных из приложения

    на Node.js • Выбрать встраиваемую реляционную базу данных (sqlite) • Выбрать модуль для работы с базой данных SQL или ORM (sqlite3 — помесь SQL и ORM) • Создать базу, заполнить 20 строк • Вывести записи из базы на страницу динамически