Hướng dẫn sqlite nodejs - sqlite nodejs
Trong bài này, mình sẽ trình bày cách sử dụng Node.js kết hợp với SQLite 3 để thêm sửa xóa các bản ghi Database dạng CSDL quan hệ (có Table, Row, Column đàng hoàng). Trước giờ NodeJS thường được dùng với No-SQL ví dụ MongoDB, JSON. Bài này sẽ sử dụng SQLite 3. Nói thêm một chút, SQLite là một cơ sở dữ liệu quan hệ nhưng không cần server mà nó lưu trữ thành dạng file bê đi đâu cũng được ví dụ như một file word, exel vậy, rất là tiện lợi nếu cần đem phần mềm và cơ sở dữ liệu copy vào đâu cũng chạy. Cài đặt môi trườngMình sẽ bắt đầu bằng cách gõ lệnh 3 bên trong một thư mục mới tạo có tên là 4. Đây là lệnh để tạo mới một project bằng NodeJS. Khi chạy lệnh này thì Node sẽ hỏi chúng ta các câu hỏi cần thiết để tạo project. Ví dụ tên project, phiên bản, tác giả... Điền xong các bạn sẽ được như hình:
Tiếp theo, mình sẽ cần cài đặt gói 5 qua 6 như sau (trỏ cmd đến thư mục hiện tại và gõ như bên dưới):cmd đến thư mục hiện tại và gõ như bên dưới):
Ngoài sqlite3 mình sẽ cài đặt 7 để mình có thể sử dụng chức năng 8 quen thuộc trong lập trình Javascript (giúp thao tác với dữ liệu). 7 để mình có thể sử dụng chức năng 8 quen thuộc trong lập trình Javascript (giúp thao tác với dữ liệu).
Bây giờ mình sẽ tạo một file trống ngay bên cạnh tệp 9 gọi là 0 nơi SQLite sẽ lưu trữ dữ liệu trong đó.Thiết kế CSDLĐể lưu trữ dữ liệu cho bài toán mình sẽ thiết kế một mẫu dữ liệu quan hệ gồm 2 bảng nối nhau, kiểu master-detail. Giả sử mình cần tạo một ứng dụng dùng để quản lý dự án. Mỗi dự án có thể có một hoặc nhiều task cần hoàn thành, cần biết rõ task hoàn thành hay chưa. Mình có thể demo dữ liệu trong bảng như sau: Bảng projects
Bảng tasks
High level overview of sections WriteWrite article contents and code examples Ok, bây giờ mình biết dữ liệu gồm những gì, giờ hãy đi tạo bảng SQL để chứa được dữ liệu của 2 bảng trên
Tạo ra file Cơ sở dữ liệu
7: Được sử dụng để tạo hoặc thay đổi bảng và chèn hoặc cập nhật dữ liệu bảng.
8: Chọn một hàng dữ liệu từ một hoặc nhiều bảng. 9 : Chọn nhiều hàng dữ liệu từ một hoặc nhiều bảng.
Để bắt đầu, hãy khám phá hàm 7. Cú pháp của nó như sau:Tham số đầu tiên được truyền cho run (...) là một chuỗi SQL được thực thi và là tham số bắt buộc. Tham số thứ hai là một mảng tham số tùy chọn mà thư viện sqlite3 sẽ hoán đổi cho bất kỳ ký tự 1 trong tham số truyền vào. Tham số thứ 3 là một hàm callback để bắn ra lỗi nếu có lỗi sau khi thực thi.Để áp dụng vào class AppDAO của chúng ta mình sẻ dùng đến Promise của Javascript để đặt một lệnh 7 query và đợi kết quả trả về. Hàm được viết thêm vào file AppDAO như sau:
Như vậy là từ bây giờ chúng ta có thể gọi hàm AppDAO.runquery(...) và truyền vào 2 tham số cho nó để nó chạy kết nối đến db và lấy ra dữ liệu cần thiết cho mình, tùy thuộc vào câu sql truyền vào.
Như vậy là query SQL để tạo bảng đã hoàn tất, tiếp đến mình sẽ chuyển sang các hàm chèn dữ liệu vào các bảng. Chèn dữ liệuTrong class 8, mình cần thêm một hàm create nhận tên của dự án để tạo và thực thi câu lệnh INSERT thích hợp bằng AppDAO.runquery(...). Lưu ý cách mình đã sử dụng '?' để đại diện cho giá trị cho tên của dự án và sau đó đặt tham số name trong tham số mảng params tùy chọn vào hàm runquery(...). Đây là viết theo kiểu câu lệnh truy vấn được tham số hóa, nó sẽ nhận sql đầu vào để giảm thiểu rủi ro bị tấn công bằng SQL injection.
Một hàm khởi tạo tương tự cho class 5.
Bây giờ chúng ta đã có thể INSERT dữ liệu vào cơ sở dữ liệu. Giờ hãy chuyển qua chức năng để cập nhật CSDL. Cập nhật dữ liệuTrong class ProjectRepository, mình sẽ thêm một hàm update tất cả các trường cho bản ghi cơ sở dữ liệu của project. Đầu vào cần phải biết là project nào cần được update. Sử dụng hàm AppDAO.runquery(...), như sau: 0Tiếp theo là thêm hàm cập nhật tương ứng vào class TaskRepository. 1Xóa dữ liệuChức năng cuối cùng cần thực hiện là xóa các bản ghi trong cơ sở dữ liệu. Đối với chức năng này mình sẽ một lần nữa sử dụng 6 kết hợp với các hàm delete cho cả hai class 8 và 5.Đối với 8 viết thêm vào như sau: 2Và cho 5 viết như thế này: 3Đã xong, chúng ta đã viết xong toàn bộ các hàm THÊM, SỬA, XÓA cho cở sở dữ liệu của 2 bảng 3 và 4. Tiếp theo, mình sẽ giới thiệu hai hàm Node.js sqlite3 có liên quan đến get và all.Đọc dữ liệuĐể đọc dữ liệu ra từ CSDL sau khi đã được thêm vào, hàm get được sử dụng để truy xuất một dòng dữ liệu, còn hàm all được sử dụng để truy vấn nhiều dòng dữ liệu đồng thời. Cú pháp để get như sau: 4Ở đây db là một đối tượng kết nối đến file sqlite3. Bạn sẽ thấy rằng cú pháp về cơ bản giống với hàm run, nhưng ở hàm callback sau khi thực thi xong query SELECT sẽ có thêm một tham số result. Tham số này là bắt buộc vì nó sẽ chứa object (dòng dữ liệu trong bảng) đã được lấy ra và vứt vào đây. Cú pháp của hàm 9 về cơ bản là giống 8 tham số thứ hai cho hàm callback là một mảng các kết quả được truy vấn trả về, như sau: 5Cũng giống như mình đã làm với hàm 7 sqlite3 bên trên, mình sẽ thực hiện các hàm 8 và 9 sử dụng 8 trong class 6 như hình dưới đây: 6Bây giờ mình có thể sử dụng các hàm này trong các lớp 8 và 5 để lấy dữ liệu từ cơ sở dữ liệu SQLite.
Để bắt đầu, mình sẽ thêm hàm 2 cho mỗi lớp để chọn bản ghi theo id.Trong 8 mình viết thêm: 7Để chứng minh AppDAO.all(...), mình sẽ thêm khả năng chọn tất cả các dự án cũng như tất cả các nhiệm vụ cho một dự án cụ thể. Mã để SELECT tất cả các dự án trông như thế này: 8Sau đó, để chọn tất cả các nhiệm vụ cho một dự án, mình sẽ sử dụng một hàm được gọi là getTasks(projectId)dự kiến id của dự án bạn muốn các nhiệm vụ. 9Đặt Mã truy cập dữ liệu để sử dụng Cho đến nay mình đã cơ bản tạo ra một thư viện truy cập dữ liệu cho dự án hư cấu này và ứng dụng theo dõi nhiệm vụ. Những gì mình muốn làm bây giờ là sử dụng nó để tải lên dữ liệu thử nghiệm của mình được hiển thị trong các bảng trong phần Thiết kế cơ sở dữ liệu . Trong tập tin main.js mình sẽ muốn kéo trong AppDAO, 8 và class TaskRepository qua require. Sau đó, mình sẽ sử dụng chúng để tạo ra các bảng, điền chúng với dữ liệu sau đó, lấy dữ liệu từ cơ sở dữ liệu và hiển thị tới bàn điều khiển. 0Biên dịch và chạy hàm main bằng lệnh Node như sau: 1Và bạn sẽ thấy kết quả như hình dưới đây. Tất cả các hàm đều đã chạy ngon. 2Kết luậnTrong hướng dẫn này, mình đã xem lại các khái niệm cơ bản về các hàm 5 của 6 và đã trình bày cách bạn có thể dùng nó trong lập trình hướng đối tượng JavaScript . Và viết code theo kiểu không đồng bộ (async) dựa trên Promise để chương trình chạy nhanh hơn gọn hơn.
Như mọi khi, mình cảm ơn bạn đã đọc! Bài này là một bài dịch, link bài gốc ở đây: http://stackabuse.com/a-sqlite-tutorial-with-node-js/ |