API Cơ sở dữ liệu Web SQL thực sự không phải là một phần của đặc tả HTML5 nhưng nó là một đặc tả riêng giới thiệu một bộ API để thao tác cơ sở dữ liệu phía máy khách bằng SQL
Tôi cho rằng bạn là một nhà phát triển web tuyệt vời và nếu đúng như vậy thì không còn nghi ngờ gì nữa, bạn sẽ biết rõ về các khái niệm SQL và RDBMS. Nếu bạn vẫn muốn có một phiên làm việc với SQL thì bạn có thể xem qua Hướng dẫn SQL của chúng tôi
Cơ sở dữ liệu Web SQL sẽ hoạt động trong phiên bản Safari, Chrome và Opera mới nhất
Các phương pháp cốt lõi
Có ba phương thức cốt lõi sau được xác định trong thông số kỹ thuật mà tôi sẽ trình bày trong hướng dẫn này -
openDatabase - Phương thức này tạo đối tượng cơ sở dữ liệu bằng cách sử dụng cơ sở dữ liệu hiện có hoặc tạo cơ sở dữ liệu mới
giao dịch - Phương thức này cung cấp cho chúng tôi khả năng kiểm soát giao dịch và thực hiện cam kết hoặc khôi phục dựa trên tình huống
execSql - Phương thức này được sử dụng để thực thi truy vấn SQL thực tế
Mở cơ sở dữ liệu
Phương thức openDatabase đảm nhận việc mở cơ sở dữ liệu nếu nó đã tồn tại, phương thức này sẽ tạo nó nếu nó chưa tồn tại
Để tạo và mở cơ sở dữ liệu, hãy sử dụng đoạn mã sau -
var db = openDatabase['mydb', '1.0', 'Test DB', 2 * 1024 * 1024];
Phương thức trên lấy năm tham số sau -
- Tên cơ sở dữ liệu
- số phiên bản
- mô tả văn bản
- Kích thước của cơ sở dữ liệu
- gọi lại tạo
Đối số cuối cùng và thứ 5, cuộc gọi lại tạo sẽ được gọi nếu cơ sở dữ liệu đang được tạo. Tuy nhiên, nếu không có tính năng này, cơ sở dữ liệu vẫn đang được tạo một cách nhanh chóng và được phiên bản chính xác
Thực hiện truy vấn
Để thực hiện một truy vấn bạn sử dụng cơ sở dữ liệu. chức năng giao dịch []. Hàm này cần một đối số duy nhất, là hàm đảm nhiệm việc thực thi truy vấn như sau -
var db = openDatabase['mydb', '1.0', 'Test DB', 2 * 1024 * 1024]; db.transaction[function [tx] { tx.executeSql['CREATE TABLE IF NOT EXISTS LOGS [id unique, log]']; }];
Truy vấn trên sẽ tạo một bảng có tên LOGS trong cơ sở dữ liệu 'mydb'
thao tác CHÈN
Để tạo các mục nhập vào bảng, chúng ta thêm truy vấn SQL đơn giản vào ví dụ trên như sau -
var db = openDatabase['mydb', '1.0', 'Test DB', 2 * 1024 * 1024]; db.transaction[function [tx] { tx.executeSql['CREATE TABLE IF NOT EXISTS LOGS [id unique, log]']; tx.executeSql['INSERT INTO LOGS [id, log] VALUES [1, "foobar"]']; tx.executeSql['INSERT INTO LOGS [id, log] VALUES [2, "logmsg"]']; }];
Chúng ta có thể truyền các giá trị động trong khi tạo nhập như sau -
var db = openDatabase['mydb', '1.0', 'Test DB', 2 * 1024 * 1024]; db.transaction[function [tx] { tx.executeSql['CREATE TABLE IF NOT EXISTS LOGS [id unique, log]']; tx.executeSql['INSERT INTO LOGS [id,log] VALUES [?, ?'], [e_id, e_log]; }];
Ở đây e_id và e_log là các biến bên ngoài và execSql ánh xạ từng mục trong đối số mảng thành dấu "?"
Thao tác ĐỌC
Để đọc các bản ghi đã tồn tại, chúng tôi sử dụng một cuộc gọi lại để nắm bắt các kết quả như sau -
var db = openDatabase['mydb', '1.0', 'Test DB', 2 * 1024 * 1024]; db.transaction[function [tx] { tx.executeSql['CREATE TABLE IF NOT EXISTS LOGS [id unique, log]']; tx.executeSql['INSERT INTO LOGS [id, log] VALUES [1, "foobar"]']; tx.executeSql['INSERT INTO LOGS [id, log] VALUES [2, "logmsg"]']; }]; db.transaction[function [tx] { tx.executeSql['SELECT * FROM LOGS', [], function [tx, results] { var len = results.rows.length, i; msg = "Found rows: " + len + "
"; document.querySelector['#status'].innerHTML += msg; for [i = 0; i < len; i++] { alert[results.rows.item[i].log ]; } }, null]; }];
Ví dụ cuối cùng
Vì vậy, cuối cùng, chúng ta hãy giữ ví dụ này trong một tài liệu HTML5 chính thức như sau và thử chạy nó với trình duyệt Safari
Bạn có thể tạo HTML từ SQL vì SQL Server có hỗ trợ tích hợp để xuất XML và HTML được hiểu tốt nhất là một phương ngữ hơi kỳ lạ của XML truyền đạt ý nghĩa cho các thẻ được xác định trước. Có rất nhiều trường hợp cạnh trong đó cấu trúc HTML là cách rõ ràng nhất để giao tiếp các bảng, danh sách và thư mục. Khi dữ liệu được phân cấp, nó có thể có ý nghĩa hơn nữa. William Brewer giới thiệu đơn giản về một số kỹ thuật xuất HTML
Bạn có thể tạo HTML từ SQL không? . Bạn có bao giờ muốn? . Nguyên tắc rất đơn giản. HTML thực sự chỉ là một phương ngữ hơi kỳ lạ của XML truyền đạt ý nghĩa cho các thẻ được xác định trước. SQL Server có các cách tích hợp sẵn để xuất ra nhiều loại XML. Mặc dù trước đây tôi đã từng xuất toàn bộ trang web từ SQL, nhưng điều tự nhiên nhất là tạo ra các cấu trúc HTML như bảng, danh sách và thư mục
HTML5 nói chung có thể được xử lý bằng SQL như thể nó là một đoạn XML. Tất nhiên, XML không có các thẻ được xác định trước và có thể mở rộng, trong khi HTML được thiết kế để tạo thuận lợi cho việc kết xuất và hiển thị dữ liệu. Theo tùy chỉnh, nó đã trở nên dễ dung thứ hơn XML, nhưng nói chung, HTML5 dựa trên XML
Tạo bảng từ các biểu thức SQL
Trong HTML5, các bảng được thực hiện tốt nhất một cách đơn giản, nhưng sử dụng các phần tử và cấu trúc con để nhà thiết kế web có toàn quyền kiểm soát giao diện của bảng. CSS3 cho phép bạn chỉ định các tập hợp ô trong danh sách các phần tử con. Ví dụ: các thẻ TD riêng lẻ trong một hàng của bảng [TR] có thể phân định các ô của bảng có thể có kiểu dáng riêng, nhưng việc hiển thị cấu trúc bảng hoàn toàn tách biệt với chính dữ liệu
Bảng bắt đầu với một phần tử phụ đề tùy chọn, theo sau là 0 hoặc nhiều phần tử colgroup, tiếp theo là phần tử thead tùy chọn. Sau đó, tiêu đề này được theo sau tùy ý bởi một phần tử tfoot, theo sau là 0 hoặc nhiều phần tử tbody hoặc một hoặc nhiều phần tử tr, theo sau là một phần tử tfoot tùy chọn, nhưng chỉ có thể có một phần tử tfoot
'Mẫu' HTML5 cho các bảng
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1..n
1..n
1. n
1..n
1. n
1..n
1. n
1. n
Trong SQL Server, người ta có thể tạo XML cho một bảng như thế này với loại truy vấn này ở dạng mẫu có dữ liệu giả
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LỰA CHỌN
[CHỌN 'Bảng I' CHO400 THEN 'TextRed'
KHI ĐẾM[*]>250 THEN 'TextMauve'
KHÔNG 'TextBlue'END AS [td/@class],
XẾP HẠNG[] HƠN [ORDER BY COUNT[*] desc] AS td ,
'' AS [*],--hack to allow the use of PATH
ĐẾM[*] NHƯ td,--PATH otherwise concatenates TDs
'' AS [*],--hack to allow the use of PATH
a. Thành phố + ', ' + sp.Tên + ', ' + cr.Tên AS td
TỪ Bán hàng. SalesOrderHeader AS soh
THAM GIA Người. Địa chỉ AS a
BẬT a. ID địa chỉ = soh. BillToAddressID
THAM GIA Người. Tiểu bang Tỉnh AS sp
BẬT sp. ID tỉnh bang = a. ID tỉnh bang
THAM GIA Người. Quốc giaKhu vực AS cr
BẬT cr. Mã vùng quốc gia = sp. Mã vùng quốc gia
NHÓM BỞI a. Thành phố + ', ' + sp.Tên + ', ' + cr.Tên
ĐẶT HÀNG BẰNG ĐẾM[*] DESC
CHO XML PATH['tr'], ELEMENTS, TYPE
] NHƯ không phải ai'
CHO XML PATH[''], ROOT['table']]];
Có, chúng tôi đã thay đổi câu lệnh SQL trước đó để tạo các thuộc tính 'lớp' cho phép chúng tôi tô màu các số thứ tự xếp hạng mà chúng tôi vừa thêm sao cho phần thể hiện tốt nhất có màu đỏ, phần tốt nhất tiếp theo có màu hoa cà và phần còn lại có màu xanh đậm; . Nó sẽ trông giống như thế này…
Rõ ràng, bạn có thể sử dụng điều này cho bất kỳ thẻ HTML nào yêu cầu thuộc tính. Ví dụ: thẻ IMG hình ảnh cần có 'src' và thẻ neo A cần có 'href'. Nhược điểm duy nhất là bạn mất đi sự gọn gàng khi sử dụng RAW. HTML trộn lẫn các thuộc tính và thành phần nên tôi nghi ngờ rằng bạn sẽ cần sử dụng cú pháp FOR XML PATH cho loại công việc này
Tạo danh sách thư mục từ các biểu thức SQL
HTML dùng để hiển thị các nhóm giá trị tên như từ điển, chỉ mục, định nghĩa, câu hỏi và câu trả lời và từ vựng. Nhóm tên-giá trị bao gồm một hoặc nhiều tên [phần tử dt] theo sau là một hoặc nhiều giá trị [phần tử dd]. Trong một phần tử dl, không được có nhiều hơn một phần tử dt cho mỗi tên
Chúng tôi sẽ lấy một đoạn trích từ thuật ngữ SQL Server xuất sắc làm ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CHỌN F. Thời hạn AS DT, F . .Định nghĩa AS DD
TỪ
[
GIÁ TRỊ
['bộ nhớ cache bị lão hóa',
'Cơ chế lưu vào bộ nhớ đệm xác định thời điểm một hàng trong bộ đệm đã lỗi thời và phải được làm mới'
],
['ứng dụng bộ đệm',
'A. NET sử dụng API ứng dụng khách Windows Server AppFabric để giao tiếp và lưu trữ dữ liệu vào hệ thống bộ nhớ đệm phân tán Windows Server AppFabric. '
],
['cụm bộ đệm',
'Việc khởi tạo dịch vụ bộ đệm được phân phối, được tạo thành từ một hoặc nhiều phiên bản của dịch vụ lưu trữ bộ đệm làm việc cùng nhau để lưu trữ và phân phối dữ liệu. Dữ liệu được lưu trữ trong bộ nhớ để giảm thiểu thời gian phản hồi cho các yêu cầu dữ liệu. Công nghệ phân cụm này khác với Windows Clustering. '
],
['vô hiệu hóa bộ đệm',
'Quá trình gắn cờ một đối tượng trong bộ đệm để nó không còn được sử dụng bởi bất kỳ ứng dụng khách bộ đệm nào. Điều này xảy ra khi một đối tượng ở trong bộ đệm lâu hơn giá trị hết thời gian của bộ đệm [khi nó hết hạn]. '
],
['mục bộ đệm',
'Một đối tượng được lưu trữ trong bộ nhớ cache và thông tin bổ sung được liên kết với đối tượng đó, chẳng hạn như thẻ và phiên bản. Nó có thể được trích xuất từ cụm bộ đệm bằng API máy khách GetCacheItem. '
],
['thông báo bộ đệm',
'Thông báo không đồng bộ có thể được kích hoạt bởi nhiều thao tác bộ đệm trên cụm bộ đệm. Thông báo bộ đệm có thể được sử dụng để gọi các phương thức ứng dụng hoặc tự động vô hiệu hóa các đối tượng được lưu trong bộ nhớ cache cục bộ. '
],
['thao tác bộ đệm',
'Một sự kiện xảy ra trên các khu vực hoặc các mục đã lưu trong bộ nhớ cache có thể kích hoạt thông báo trong bộ nhớ cache. '
],
['cổng bộ đệm',
'Một cổng TCP/IP được các máy chủ bộ đệm sử dụng để truyền dữ liệu đến và từ các máy khách bộ đệm. Số cổng được sử dụng cho cổng bộ đệm có thể khác nhau trên mỗi máy chủ lưu trữ bộ đệm. Các cài đặt này được duy trì trong cài đặt cấu hình cụm. '
],
['vùng bộ đệm',
'Một vùng chứa dữ liệu, bên trong bộ đệm, cùng định vị tất cả các đối tượng được lưu trong bộ nhớ đệm trên một máy chủ bộ đệm duy nhất. Vùng bộ đệm cho phép khả năng tìm kiếm tất cả các đối tượng được lưu trong bộ đệm trong vùng bằng cách sử dụng các chuỗi mô tả, được gọi là thẻ. '
],
['dịch vụ bộ đệm',
'Giải pháp bộ nhớ đệm trong bộ nhớ được phân phối cho phép người dùng xây dựng các ứng dụng có khả năng mở rộng và đáp ứng cao bằng cách đưa dữ liệu đến gần người dùng cuối hơn. '
],
['thẻ bộ đệm',
'Một hoặc nhiều giá trị nhận dạng dựa trên chuỗi tùy chọn có thể được liên kết với từng đối tượng đã lưu trong bộ nhớ cache được lưu trữ trong một khu vực. Các khu vực cho phép bạn truy xuất các đối tượng được lưu trong bộ nhớ cache dựa trên một hoặc nhiều thẻ. '
],
['mẫu lập trình lưu bộ nhớ đệm',
'Một mẫu lập trình trong đó nếu dữ liệu không có trong bộ đệm thì ứng dụng, chứ không phải hệ thống bộ đệm phân tán, phải tải lại dữ liệu vào bộ đệm từ nguồn dữ liệu gốc. '
],
['ứng dụng hỗ trợ bộ đệm',
'Một ứng dụng sử dụng ứng dụng khách bộ nhớ đệm Windows Server AppFabric để lưu trữ dữ liệu trong bộ nhớ đệm trên cụm bộ đệm. '
]
] F[Thời hạn, Definition]
CHO XML RAW[''],ROOT['DL'], ELEMENTS, TYPE;
Điều này tạo ra một danh sách thư mục có thể được hiển thị như bạn muốn
Tạo danh sách phân cấp từ các biểu thức SQL
Danh sách HTML có lẽ là cách hữu ích nhất để chuyển dữ liệu phân cấp đơn giản tới một ứng dụng. Bạn thực sự có thể sử dụng các thư mục [DL] để làm điều này cho các cặp tên-giá trị danh sách và thậm chí cả các bảng cho dữ liệu phức tạp hơn. Đây là một ví dụ đơn giản về danh sách phân cấp, được tạo từ AdventureWorks. Bạn muốn sử dụng một hàm đệ quy cho bất kỳ điều gì phức tạp hơn. Tôi sẽ cho bạn thấy điều này trong giây lát. Đây là một phiên bản đơn giản chỉ cung cấp cho bạn một cấp độ
1
2
3
4
5
6
7
8
9
10
11
12
CHỌN CHUYỂN ĐỔI[ NVARCHAR[MAX],
[SELECT f. [Nhóm] AS li,
[CHỌN g. Tên AS li
TỪ Bán hàng. Lãnh thổ bán hàng g
Ở ĐÂU g. [Nhóm] = f . .[Nhóm]
CHO XML RAW[''], ROOT['ul'], ELEMENTS, TYPE
]
TỪ Bán hàng. Lãnh thổ bán hàng f
NHÓM BỞI f. [Nhóm]
CHO XML RAW[''], ROOT['ul'], ELEMENTS, TYPE
]
];
…cho…
Có một hệ thống phân cấp phức tạp hơn trong AdventureWorks mà chúng ta có thể sử dụng để chỉ ra cách hiển thị một hệ thống phân cấp với độ sâu tùy ý dưới dạng danh sách. Đây là cách bạn có thể làm điều đó. Đầu tiên hàm đệ quy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TẠO CHỨC NĂNG MeAndMyReports[@Me HIERARCHYID]
TRẢ LẠI XML
BẮT ĐẦU
TRẢ LẠI
[CHỌN tôi. ID đăng nhập AS li,
[SELECT dbo. Báo cáo của tôi[báo cáo. Nút tổ chức]
TỪ Nhân sự. Nhân viên NHƯ báo cáo
Ở ĐÂU báo cáo. Nút tổ chức. GetAncestor[1] = . me.Nút tổ chức
CHO XML RAW[''], ROOT['ul'], ELEMENTS, TYPE
]
TỪ Nhân sự. Nhân viên NHƯ tôi
Ở ĐÂU tôi. Nút tổ chức = @Tôi
CHO XML RAW[''], ELEMENTS, TYPE
];
END;
ĐI
Bây giờ chúng ta có thể chỉ đơn giản chứng minh làm thế nào để gọi nó…
1
2
3
4
5
6
7
KHAI BÁO @sếp HIERARCHYID;
SELECT @sếp = Nút tổ chức
TỪ Nhân sự. Nhân viên
Ở ĐÂU Nhân viên. ID đăng nhập = 'adventure-works\roberto0';
CHỌN dbo. Báo cáo của MeAndMy[@sếp];
and this will give you the list that then just needs the base
- node
- Biên tập
- Biên tập
- Blog
- Lập trình T-SQL
- Blog
- Lập trình T-SQL
- Lập trình T-SQL
kết luận
Hiện tại có khá nhiều cấu trúc trong HTML5. Ngay cả thẻ nội dung cũng có tiêu đề phụ, điều hướng, phần, bài viết, sang một bên, chân trang, chi tiết và thẻ tóm tắt. Nếu bạn đọc Khuyến nghị của W3C, nó sẽ đưa ra những gợi ý hay về việc sử dụng đánh dấu để tạo cấu trúc. Thẻ trước có thể sử dụng mã con, thẻ samp và kbd để tạo định dạng thông minh. Dữ liệu trong SQL Server có thể dễ dàng tạo ra loại đánh dấu HTML5 có cấu trúc này. Điều này rõ ràng được sử dụng trong các chỉ mục, lập chương, bảng chú giải thuật ngữ cũng như tạo ra các báo cáo dựa trên bảng rõ ràng. Có khá nhiều dặm trong việc tạo HTML từ các truy vấn SQL Server
0 0
0 0
0 1
0 1
0 2