Share
Embed
Transcript
18 slides
-
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"); -
или так 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(); }); -
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" ); -
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" ); }); -
и еще раз 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/"); -
• npm install sqlite3 (если не сделали раньше) • npm
install http (на самом деле не обязательно) -
или 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" } } -
Чуть сломаем запрос 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" ); }); -
db.each vs db.all • db.all: колбэк возвращает записи одним массивом
• db.each: колбэк возвращает записи по одной строке • db.all: пробежали записи по циклу for, сформировали таблицу HTML, завершили запрос response.end • db.each: как узнать, что строки закончились и можно отправлять response.end? никак -
Лаба 4.1: научиться работать с реляционной базой данных из приложения
на Node.js • Выбрать встраиваемую реляционную базу данных (sqlite) • Выбрать модуль для работы с базой данных SQL или ORM (sqlite3 — помесь SQL и ORM) • Создать базу, заполнить 20 строк • Вывести записи из базы на страницу динамически