TCL có phải là Trình kết nối MySQL không?

Giao diện kết nối cơ sở dữ liệu Tcl

Nội dung chương

Nội dung chính "

Bản quyền © 2017 Ashok P. Nadkarni. Đã đăng ký Bản quyền

TCL có phải là Trình kết nối MySQL không?
Đây là một chương nháp từ cuốn sách Ngôn ngữ lập trình Tcl, hiện đã có ở dạng in và điện tử từ Amazon, Gumroad và những người khác

1. Giới thiệu

Tiện ích mở rộng Kết nối cơ sở dữ liệu Tcl (TDBC) cung cấp API Tcl để truy cập cơ sở dữ liệu SQL. Vì API này độc lập với hệ thống cơ sở dữ liệu cơ bản nên hầu hết [] mã truy cập cơ sở dữ liệu trong một ứng dụng có thể chạy không thay đổi giữa các lần triển khai cơ sở dữ liệu khác nhau

Một chút về lịch sử

TDBC 1. 0, tác giả Kevin B. Kenny, đã được phát hành với Tcl 8. 6. Trước khi phát hành, việc thiếu API truy cập cơ sở dữ liệu Tcl tiêu chuẩn dẫn đến một số tiện ích mở rộng với các giao diện khác nhau bao gồm

  • tclodbc để kết nối với cơ sở dữ liệu bằng ODBC

  • DIO là một phần của Apache Rivet

  • nstcl và nsdbi, cả hai đều bắt nguồn từ máy chủ web AOL Server

  • Các tiện ích mở rộng dành riêng cho cơ sở dữ liệu khác nhau như oratcl cho Oracle và pgtcl cho PostgreSQL

Với sự ra đời của TDBC, giờ đây các ứng dụng có thể dựa vào giao diện chuẩn cho cơ sở dữ liệu từ Tcl

TDBC được chia thành hai lớp

  • Lớp trên, là những gì chúng tôi trình bày ở đây, là giao diện được các ứng dụng sử dụng để truy cập cơ sở dữ liệu

  • Lớp dưới bao gồm các trình điều khiển khác nhau thực hiện quyền truy cập vào cơ sở dữ liệu cụ thể. Tại thời điểm viết bài, bản phân phối TDBC bao gồm các trình điều khiển cho MySQL, PostgreSQL, Sqlite3 và bất kỳ cơ sở dữ liệu nào có thể truy cập thông qua giao diện ODBC. Tài liệu TDBC cũng định nghĩa một giao diện cho phép viết trình điều khiển mới cho các triển khai cơ sở dữ liệu khác

1. 1. Cài đặt TDBC

Phần mở rộng TDBC được bao gồm trong Tcl 8 tiêu chuẩn. 6 phân phối nguồn cũng như phân phối nhị phân từ ActiveState

1. 2. Đang tải TDBC

TDBC được tải bằng lệnh Tcl

package require tdbc::odbc
4 tiêu chuẩn. Gói cụ thể sẽ được tải tùy thuộc vào trình điều khiển cơ sở dữ liệu nào được mong muốn. Các gói bao gồm trong phân phối cốt lõi được hiển thị trong

Bảng 1. Gói trình điều khiển TDBC lõiGóiCơ sở dữ liệu

tdbc. sqlite3

Sqlite3

tdbc. postgres

PostgreSQL

tdbc. mysql

mysql

tdbc. odbc

Bất kỳ cơ sở dữ liệu nào cung cấp giao diện ODBC

Đương nhiên, khi xử lý nhiều triển khai cơ sở dữ liệu trong một ứng dụng, nhiều hơn một trong các gói này có thể được tải nếu muốn

Đối với các ví dụ mã của chúng tôi, chúng tôi sẽ sử dụng cơ sở dữ liệu Sqlite3 và do đó tải gói tương ứng

% package require tdbc::sqlite3
→ 1.0.4

2. Các khái niệm

TDBC tuân theo mô hình chung giống như các API truy cập cơ sở dữ liệu khác và bao gồm các bước gần như sau

  1. Đầu tiên, một kết nối [] phải được thiết lập với cơ sở dữ liệu (và nhà cung cấp cơ sở dữ liệu) quan tâm. Ngoài việc xác định cơ sở dữ liệu, điều này cũng có thể bao gồm thông tin đăng nhập ủy quyền và các tùy chọn khác. Tất cả các tương tác tiếp theo cho cơ sở dữ liệu được thực hiện thông qua đối tượng kết nối này và các đối tượng thay thế của nó

  2. Tiếp theo, một câu lệnh SQL được chuẩn bị bằng cách sử dụng đối tượng kết nối và sau đó được thực thi với kết quả được trả về dưới dạng tập kết quả

  3. Tập kết quả được lặp lại để hoạt động trên dữ liệu được trả về

  4. Tập lệnh và tập kết quả được giải phóng để không sử dụng hết tài nguyên

  5. Các bước 2-4 được lặp lại khi cần thiết

  6. Khi hoàn tất, kết nối cơ sở dữ liệu bị đóng

TDBC đóng gói tất cả các khái niệm trừu tượng ở trên dưới dạng các lớp

package require tdbc::odbc
5,
package require tdbc::odbc
6 và
package require tdbc::odbc
7

3. Kết nối với cơ sở dữ liệu

Một kết nối cơ sở dữ liệu được đại diện bởi một đối tượng của lớp

package require tdbc::odbc
8 thích hợp. Để kết nối với cơ sở dữ liệu, bạn tạo một đối tượng của lớp này chỉ định cơ sở dữ liệu quan tâm. Cách xác định cơ sở dữ liệu phụ thuộc vào trình điều khiển cơ sở dữ liệu đang sử dụng

3. 1. Sqlite3

Gói

package require tdbc::odbc
9 phải được tải để truy cập cơ sở dữ liệu Sqlite3

package require tdbc::sqlite3

Để mở cơ sở dữ liệu Sqlite3, đường dẫn đến tệp cơ sở dữ liệu sqlite3 được chuyển. Ví dụ: để mở cơ sở dữ liệu Sqlite3 trong thư mục hiện tại,

________số 8

Điều này sẽ tạo đối tượng

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
0 đại diện cho kết nối cơ sở dữ liệu với cơ sở dữ liệu
tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
1. Như chúng ta thấy trong giây lát, chúng ta có thể thao tác trên cơ sở dữ liệu bằng cách gọi các phương thức trên đối tượng này

Đối với mã mẫu của chúng tôi, chúng tôi sẽ tạo và sử dụng cơ sở dữ liệu Sqlite3 trong bộ nhớ. Mã thông báo đặc biệt

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
2 dẫn đến cơ sở dữ liệu được tạo hoàn toàn trong bộ nhớ mà không có ổ đĩa. Nó sẽ bị xóa sau khi đóng đủ cho mục đích mã mẫu

% package require tdbc::sqlite3
→ 1.0.4
2

Lưu ý ở đây chúng tôi sử dụng phương thức TclOO

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
3 trái ngược với
tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
4 để tạo tên đối tượng kết nối cho chúng tôi

3. 2. ODBC

Kết nối cơ sở dữ liệu mở (ODBC) là một API tiêu chuẩn công nghiệp để truy cập cơ sở dữ liệu. Việc triển khai cơ sở dữ liệu hỗ trợ giao diện này có thể được truy cập thông qua gói

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
5

package require tdbc::odbc

TCL có phải là Trình kết nối MySQL không?
Windows đi kèm với hỗ trợ ODBC tích hợp nhưng để sử dụng ODBC trên Unix hoặc Linux, bạn có thể cần cài đặt gói ODBC như unixODBC hoặc iODBC

Để kết nối với cơ sở dữ liệu ODBC, chuỗi kết nối phải được chỉ định. Điều này có dạng một loạt các cặp giá trị và tên thuộc tính chỉ định các đặc điểm kết nối. Ví dụ: (giả sử chúng tôi đang sử dụng Windows)

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"

sẽ trả về một đối tượng kết nối cho cơ sở dữ liệu SQL Server

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
6 trên hệ thống cục bộ. Lưu ý các thuộc tính bổ sung có thể được chỉ định trong chuỗi kết nối. Chẳng hạn, thuộc tính và giá trị
tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
7 chỉ định rằng thông tin đăng nhập của tài khoản Windows mà ứng dụng đang chạy sẽ được sử dụng để cấp quyền

Tùy thuộc vào hệ thống và cơ sở dữ liệu, bạn có thể xác định tên nguồn dữ liệu (DSN) lưu trữ dữ liệu được sử dụng để tạo chuỗi kết nối. Sau đó, bạn chỉ cần chỉ định DSN để kết nối với cơ sở dữ liệu. Vì vậy, cuộc gọi trên sau đó sẽ trở thành

package require tdbc::odbc
0

Bạn có thể sử dụng trong TDBC để xác định DSN nếu triển khai ODBC cơ bản hỗ trợ API trình cài đặt ODBC. Ngoài ra, trên các hệ thống Windows, bạn có thể sử dụng ứng dụng ODBC trong Bảng điều khiển để xác định và định cấu hình DSN. Trên Unix/Linux, unixODBC và iODBC đều cung cấp GUI và phương tiện dòng lệnh để xác định DSN

TCL có phải là Trình kết nối MySQL không?
Chuỗi kết nối là trình điều khiển ODBC cụ thể và đôi khi khó hiểu đúng. Trang web là một nguồn tài nguyên hữu ích để hiểu và xây dựng những

Ngoài các trình điều khiển TDBC được hỗ trợ, một số môi trường ODBC hỗ trợ tùy chọn

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
8 dẫn đến lời nhắc về thông tin xác thực của người dùng nếu được yêu cầu. xem tdbc. tài liệu tham khảo odbc để biết chi tiết về việc sử dụng nó

Như đã mô tả, gói này cũng thực hiện một số lệnh tiện ích để tương tác với trình quản lý ODBC của hệ thống

3. 3. mysql

Kết nối với MySQL yêu cầu gói

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
9

package require tdbc::odbc
3

Gói khác với Sqlite3 và ODBC ở chỗ kết nối được chỉ định thông qua một tập hợp các tùy chọn thay vì được chuyển dưới dạng tên tệp hoặc đối số chuỗi kết nối. Các tùy chọn này được hiển thị trong

ban 2. Tùy chọn kết nối MySQL và PostgreSQLTùy chọnMô tả

package require tdbc::odbc
00

Tên của hệ thống mà máy chủ cơ sở dữ liệu đang chạy. Mặc định cho hệ thống cục bộ

package require tdbc::odbc
01

Số cổng TCP/IP mà máy chủ đang lắng nghe kết nối

package require tdbc::odbc
02

Tên của tên người dùng được sử dụng để truy cập cơ sở dữ liệu. Mặc định cho id người dùng hiện tại của quy trình

package require tdbc::odbc
03

Mật khẩu được trình bày cho máy chủ. Theo mặc định, không có mật khẩu nào được hiển thị

package require tdbc::odbc
04

Tên của cơ sở dữ liệu được đặt mặc định nếu không có cơ sở dữ liệu nào được chỉ định trong một truy vấn. Mặc định cho cơ sở dữ liệu mặc định cho người dùng được chỉ định bởi tùy chọn

package require tdbc::odbc
05

Trình điều khiển MySQL hỗ trợ các tùy chọn bổ sung dành riêng cho trình điều khiển mà chúng tôi không mô tả ở đây. xem tdbc. trang tham khảo mysql để biết chi tiết

3. 4. PostgreSQL

Kết nối với cơ sở dữ liệu PostgreSQL ít nhiều giống với những gì đã được mô tả trước đây cho MySQL. Gói

package require tdbc::odbc
06 đã được tải

package require tdbc::odbc
1

và kết nối được thực hiện bằng cách sử dụng các tùy chọn hiển thị trong

Trình điều khiển PostgreSQL cũng hỗ trợ các tùy chọn bổ sung dành riêng cho trình điều khiển. xem tdbc. trang tham khảo postgres

3. 5. tùy chọn kết nối

Tất cả các trình điều khiển TDBC đều hiểu bộ tùy chọn chung được hiển thị trong

bàn số 3. Tùy chọn kết nối chung cho tất cả các trình điều khiển TDBC Tùy chọnMô tả

package require tdbc::odbc
07

Tên của mã hóa ký tự sẽ được sử dụng trên kết nối. TÊN phải là một trong những tên được trả về bởi lệnh Tcl

package require tdbc::odbc
08. Nói chung, không cần thiết phải chỉ định điều này nhưng hãy lưu ý rằng các trình điều khiển khác nhau trong cách xử lý tùy chọn này

package require tdbc::odbc
09

Chỉ định mức cô lập giao dịch cần thiết cho các giao dịch trên cơ sở dữ liệu. ISOLATION phải là một trong số

package require tdbc::odbc
30,
package require tdbc::odbc
31,
package require tdbc::odbc
32 hoặc
package require tdbc::odbc
33. xem tdbc. tham khảo kết nối để biết chi tiết

package require tdbc::odbc
34

Chỉ định khoảng thời gian sau đó một thao tác sẽ hết thời gian chờ với một lỗi. Giá trị mặc định của

package require tdbc::odbc
35 cho biết không có thời gian chờ. Các hoạt động áp dụng thời gian chờ khác nhau giữa các trình điều khiển và cơ sở dữ liệu khác nhau. Tham khảo các trang tham khảo thích hợp cho từng trình điều khiển

package require tdbc::odbc
36

Nếu được chỉ định là

package require tdbc::odbc
37 hoặc
package require tdbc::odbc
38, kết nối sẽ không sửa đổi cơ sở dữ liệu

3. 6. Định cấu hình kết nối

Các giá trị của các tùy chọn có thể được chỉ định tại thời điểm đối tượng

package require tdbc::odbc
5 được tạo có thể được truy xuất thông qua phương thức
package require tdbc::odbc
10 của đối tượng kết nối. Phương pháp tương tự cũng có thể được sử dụng để sửa đổi các giá trị của một số tùy chọn

Vì vậy, để truy xuất cấu hình của cơ sở dữ liệu mẫu trong bộ nhớ của chúng tôi

package require tdbc::odbc
6

Chúng tôi cũng có thể chuyển một hoặc nhiều tùy chọn cấu hình để sửa đổi

package require tdbc::sqlite3
0

3. 7. Giải phóng tài nguyên

Khi không còn cần thiết, các kết nối cơ sở dữ liệu phải được đóng lại bằng cách gọi phương thức

package require tdbc::odbc
11 trên đối tượng
package require tdbc::odbc
12

package require tdbc::sqlite3
1

Thao tác này cũng sẽ đóng và giải phóng các tài nguyên liên quan đến đối tượng

package require tdbc::odbc
6 và
package require tdbc::odbc
7 được tạo thông qua kết nối

4. Hoạt động cơ bản

4. 1. Thực thi SQL

Việc thực thi một câu lệnh SQL trước tiên bao gồm việc truy xuất một đối tượng

package require tdbc::odbc
6 thông qua phương thức
package require tdbc::odbc
16 của một
package require tdbc::odbc
5. Do đó, để thêm một bảng vào cơ sở dữ liệu mẫu trong bộ nhớ mà chúng tôi đã kết nối trước đó,

package require tdbc::sqlite3
2

Phương thức

package require tdbc::odbc
18 của đối tượng
package require tdbc::odbc
6 sau đó được gọi để chạy câu lệnh SQL

package require tdbc::sqlite3
3

Phương thức

package require tdbc::odbc
18 trả về một đối tượng
package require tdbc::odbc
7 mà chúng ta sẽ kiểm tra sau. Hiện tại, chúng tôi giải phóng cả hai đối tượng bằng cách gọi phương thức
package require tdbc::odbc
11 của chúng. Giống như các đối tượng
package require tdbc::odbc
5, các đối tượng
package require tdbc::odbc
6 và
package require tdbc::odbc
7 cũng nên được giải phóng khi không còn cần thiết

package require tdbc::sqlite3
4

Lưu ý rằng việc đóng

package require tdbc::odbc
66 cũng đóng bất kỳ đối tượng
package require tdbc::odbc
67 nào được chứa, vì vậy chúng tôi không cần phải đóng
package require tdbc::odbc
68 một cách rõ ràng tại đây. Tương tự, các đối tượng
package require tdbc::odbc
6 không được đóng một cách rõ ràng sẽ bị đóng khi đối tượng sở hữu
package require tdbc::odbc
5 bị đóng. Tuy nhiên, để tiết kiệm tài nguyên, nói chung nên giải phóng chúng một cách rõ ràng khi không còn cần thiết. Vì chúng tôi có nhiều việc muốn làm với kết nối và không đóng nó, nên chúng tôi đóng
package require tdbc::odbc
66 một cách rõ ràng

Chèn và truy vấn theo một mẫu tương tự

package require tdbc::sqlite3
5

TCL có phải là Trình kết nối MySQL không?
Cũng sẽ đóng tập kết quả được trả về bởi
package require tdbc::odbc
18

Chuỗi nhiều bước chuẩn bị và thực hiện này có thể hơi tẻ nhạt và TDBC cung cấp một số phương thức hoạt động như trình bao bọc và làm cho nó thuận tiện hơn. Chúng ta sẽ thảo luận về những điều này và những ưu và nhược điểm của chúng một chút sau

4. 2. Truyền giá trị cho SQL

Ví dụ trên mã hóa cứng các giá trị được chèn vào bảng. Đương nhiên, đó không phải là một lựa chọn khả thi khi các giá trị không được biết trước tại thời điểm viết chương trình.

TDBC cho phép các giá trị biến Tcl được chuyển vào câu lệnh SQL bằng cách thay thế tất cả các tên trong SQL bắt đầu bằng

package require tdbc::sqlite3
03 bằng các giá trị ''tương ứng'' của chúng. Các giá trị này có thể đến từ các biến Tcl cùng tên hoặc từ một từ điển được truyền vào. Cả hai đều được minh họa dưới đây

package require tdbc::sqlite3
6

Ở đây, các giá trị được chèn vào được chọn từ các biến Tcl

Ngoài ra, chúng ta có thể chuyển từ điển sang lệnh

package require tdbc::odbc
18. Các giá trị sẽ được lấy từ các khóa cùng tên trong từ điển

package require tdbc::sqlite3
7

TCL có phải là Trình kết nối MySQL không?
Thứ tự của các yếu tố không quan trọng

Lưu ý từ trình tự trên rằng một câu lệnh đã chuẩn bị có thể được thực hiện nhiều lần với các giá trị khác nhau

4. 3. Lấy dữ liệu

Truy vấn dữ liệu từ cơ sở dữ liệu tuân theo cùng một mẫu chính xác nhưng bây giờ chúng tôi cũng phải trích xuất dữ liệu từ đối tượng

package require tdbc::odbc
7 được trả về bởi bất kỳ lệnh gọi
package require tdbc::odbc
18 nào

package require tdbc::sqlite3
8

Bây giờ chúng ta có một đối tượng

package require tdbc::odbc
7 đang giữ kết quả của truy vấn

Mỗi hàng trong tập kết quả có thể được trả về bằng các phương thức

package require tdbc::sqlite3
08 và
package require tdbc::sqlite3
09. Trong cả hai trường hợp, mỗi cuộc gọi trả về hàng tiếp theo từ tập hợp kết quả. Hàng được lưu trữ trong một biến có tên được truyền cho phương thức và chính phương thức đó trả về
package require tdbc::odbc
38 khi một hàng được trả về thành công và
package require tdbc::odbc
35 nếu không có thêm dữ liệu nào được trả về

Sự khác biệt giữa hai loại này là

package require tdbc::sqlite3
08 trả về hàng dưới dạng danh sách theo thứ tự như được trả về bởi phương thức
package require tdbc::sqlite3
13 trong khi
package require tdbc::sqlite3
09 trả về hàng dưới dạng
package require tdbc::sqlite3
15 với các tên cột là khóa

package require tdbc::sqlite3
9

4. 4. phương pháp tiện lợi

Như chúng ta đã thấy ở trên, các hoạt động của cơ sở dữ liệu liên quan đến việc gọi các phương thức

package require tdbc::odbc
16 và
package require tdbc::odbc
18 và sau đó giải phóng các đối tượng
package require tdbc::odbc
6 và
package require tdbc::odbc
7. Để đảm bảo dọn dẹp đúng cách, trình tự phải được bao bọc trong các khối
package require tdbc::sqlite3
20 hoặc
package require tdbc::sqlite3
21. Vì vậy, trong mã giả, mã trông giống như thế này

tdbc::sqlite3::connection create db my-database.sqlite3
0

TDBC cung cấp một số phương pháp tiện lợi đảm nhiệm tất cả các bản tóm tắt ở trên

4. 4. 1. Phương pháp
% package require tdbc::sqlite3
→ 1.0.4
28

Phương thức

% package require tdbc::sqlite3
→ 1.0.4
28 đóng gói mã giả ở trên trong đó quá trình xử lý vòng lặp bao gồm việc thu thập tất cả các kết quả được trả về bởi
package require tdbc::sqlite3
09 hoặc
package require tdbc::sqlite3
08 vào một danh sách duy nhất

Phương thức được hỗ trợ bởi cả ba loại đối tượng

  • Trong trường hợp của

    package require tdbc::odbc
    7,
    % package require tdbc::sqlite3
    → 1.0.4
    28 chỉ cần lặp lại trên tập kết quả thu thập đầu ra của các phương thức
    package require tdbc::sqlite3
    08 hoặc
    package require tdbc::sqlite3
    09

  • Trong trường hợp của

    package require tdbc::odbc
    6, phương thức thực thi câu lệnh và sau đó thu thập các hàng từ tập kết quả trả về như được mô tả trong trường hợp trước

  • Trong trường hợp của

    package require tdbc::odbc
    5, phương thức chuẩn bị SQL được truyền dưới dạng tham số, sau đó thực thi câu lệnh được trả về như được mô tả trong trường hợp trước

Trong mọi trường hợp, phương pháp

% package require tdbc::sqlite3
→ 1.0.4
28 sẽ giải phóng các đối tượng và tài nguyên một cách thích hợp ngay cả trong trường hợp có lỗi

Dưới đây chúng tôi minh họa một truy vấn đơn giản sử dụng các phương pháp khác nhau, đầu tiên không sử dụng

% package require tdbc::sqlite3
→ 1.0.4
28

tdbc::sqlite3::connection create db my-database.sqlite3
1

Bây giờ cùng mã nhưng sử dụng phương thức

% package require tdbc::sqlite3
→ 1.0.4
28 của đối tượng
package require tdbc::odbc
7. Lưu ý rằng điều này trả về các hàng dưới dạng từ điển theo mặc định

tdbc::sqlite3::connection create db my-database.sqlite3
2

TCL có phải là Trình kết nối MySQL không?
Thay thế vòng lặp bên trong ví dụ trước

Ở trên, chúng tôi chỉ lưu viết vòng lặp trong cùng trong code. Chúng ta có thể tiến thêm một bước nữa và sử dụng phương thức

% package require tdbc::sqlite3
→ 1.0.4
28 của đối tượng
package require tdbc::odbc
6. Lưu ý sự khác biệt so với phương thức
% package require tdbc::sqlite3
→ 1.0.4
28 của
package require tdbc::odbc
7 ở chỗ ở đây chúng ta cần chuyển các giá trị được sử dụng để truy vấn sang phương thức
% package require tdbc::sqlite3
→ 1.0.4
28

tdbc::sqlite3::connection create db my-database.sqlite3
3

TCL có phải là Trình kết nối MySQL không?
Chúng tôi không phải giải quyết rõ ràng với các tập kết quả

Cuối cùng, chúng tôi thực hiện toàn bộ và gọi

% package require tdbc::sqlite3
→ 1.0.4
28 trên chính kết nối cơ sở dữ liệu. Rõ ràng, trong trường hợp này, chúng ta phải cho nó biết SQL mà chúng ta muốn chạy ngoài việc chuyển vào các giá trị truy vấn

tdbc::sqlite3::connection create db my-database.sqlite3
4

TCL có phải là Trình kết nối MySQL không?
Chúng tôi không phải đối phó với các tuyên bố

Với hình minh họa cuối cùng này ngắn hơn nhiều so với các ví dụ trước, tại sao người ta lại chọn bất kỳ hình nào trong số những hình khác?

  • Với cơ sở dữ liệu và tập hợp kết quả rất lớn,

    % package require tdbc::sqlite3
    → 1.0.4
    28 có thể không hoạt động được do không thể thu thập tất cả các hàng trong bộ nhớ trước khi xử lý

  • Xử lý rõ ràng các tập kết quả cho phép kiểm soát chi tiết quá trình lặp lại, ví dụ: chấm dứt quá trình lặp lại dựa trên một số quy tắc phức tạp nằm ngoài khả năng của SQL

Định dạng của mỗi hàng được trả về có thể được kiểm soát bởi tùy chọn

package require tdbc::sqlite3
43 có thể lấy các giá trị
package require tdbc::sqlite3
44 hoặc
package require tdbc::sqlite3
45 (mặc định). Một tùy chọn bổ sung
package require tdbc::sqlite3
46 cho phép truy xuất tên của các cột được trả về

tdbc::sqlite3::connection create db my-database.sqlite3
5

4. 4. 2. Phương pháp
% package require tdbc::sqlite3
→ 1.0.4
29

Phương thức

% package require tdbc::sqlite3
→ 1.0.4
29 có mục đích rất giống với
% package require tdbc::sqlite3
→ 1.0.4
28 ngoại trừ việc thay vì chỉ thu thập kết quả vào một danh sách, nó thực thi một tập lệnh đã cho cho mọi hàng trong tập kết quả. Vì nó giống với
% package require tdbc::sqlite3
→ 1.0.4
28 nên chúng tôi không bàn chi tiết mà chỉ minh họa nó như được gọi trên một đối tượng
package require tdbc::odbc
5. Lưu ý rằng
package require tdbc::odbc
6 và
package require tdbc::odbc
7 cũng triển khai phương thức ở dạng được sửa đổi phù hợp

tdbc::sqlite3::connection create db my-database.sqlite3
6

Giống như

% package require tdbc::sqlite3
→ 1.0.4
28,
% package require tdbc::sqlite3
→ 1.0.4
29 cũng đảm nhiệm tất cả các công việc kế toán trung gian

5. Chủ đề khác

5. 1. giao dịch

Có một số cách ứng dụng có thể sử dụng các giao dịch. Chúng tôi mô tả cả hai dưới đây

5. 1. 1. Sử dụng phương pháp
package require tdbc::odbc
0

Đầu tiên là sử dụng phương pháp

package require tdbc::odbc
0 của
package require tdbc::odbc
5. Điều này bắt đầu một giao dịch trên kết nối và đánh giá tập lệnh đã thông qua. Nếu tập lệnh kết thúc ''bình thường'' - với
package require tdbc::sqlite3
59,
package require tdbc::sqlite3
60 hoặc
package require tdbc::sqlite3
61 - giao dịch được thực hiện. Đối với các mã trả lại khác, bao gồm cả lỗi, giao dịch được khôi phục và lỗi được tính lại

Việc sử dụng phương pháp được minh họa bằng ví dụ đơn giản bên dưới để chuyển tiền từ tài khoản này sang tài khoản khác

tdbc::sqlite3::connection create db my-database.sqlite3
7

TCL có phải là Trình kết nối MySQL không?
Trừ số dư của Tom
TCL có phải là Trình kết nối MySQL không?
Xác minh số dư được cập nhật trong giao dịch
TCL có phải là Trình kết nối MySQL không?
Thêm vào số dư của Dick
TCL có phải là Trình kết nối MySQL không?
Xác minh số dư của Tom đã được khôi phục thành

Lưu ý rằng số dư của Tom được khôi phục khi giao dịch bị hủy bỏ do ngoại lệ lỗi

5. 1. 2. Sử dụng
package require tdbc::odbc
1,
package require tdbc::odbc
2 và
package require tdbc::odbc
3

Trong trường hợp chuỗi các hoạt động trong một giao dịch không thể được gói gọn trong một tập lệnh có thể được truyền cho phương thức

package require tdbc::odbc
0, một ứng dụng có thể tự quản lý giao dịch một cách rõ ràng bằng cách gọi phương thức
package require tdbc::odbc
1 của đối tượng
package require tdbc::odbc
5. Sau đó, tại một số thời điểm sau đó, nó có thể gọi các phương thức
package require tdbc::odbc
2 hoặc
package require tdbc::odbc
3 để hoàn thành hoặc hủy bỏ giao dịch

Viết lại ví dụ trước,

tdbc::sqlite3::connection create db my-database.sqlite3
8

TCL có phải là Trình kết nối MySQL không?
Bắt đầu giao dịch
TCL có phải là Trình kết nối MySQL không?
Khi có lỗi, hãy hủy giao dịch
TCL có phải là Trình kết nối MySQL không?
Khi thành công, hãy thực hiện giao dịch

5. 2. Xử lý giá trị NULL

Lưu ý rằng chuỗi rỗng

package require tdbc::sqlite3
70 không giống với giá trị SQL
package require tdbc::sqlite3
71, không có cách nào để biểu diễn
package require tdbc::sqlite3
71 trong Tcl khi mọi thứ đều là chuỗi. Trong một số ứng dụng, sự khác biệt không quan trọng và chuỗi rỗng có thể được sử dụng thay thế cho nhau với
package require tdbc::sqlite3
71. Trong trường hợp sự khác biệt là quan trọng, nên sử dụng giao diện dựa trên từ điển cho các phương pháp TDBC như được minh họa tại đây

Viết giá trị NULL

Để viết

package require tdbc::sqlite3
71 vào một cột trong bảng, hãy chuyển đến phương thức thích hợp một từ điển chứa các giá trị biến bị ràng buộc cho các cột. Một
package require tdbc::sqlite3
71 sẽ được lưu trữ trong bất kỳ cột nào mà khóa tương ứng không có trong từ điển

tdbc::sqlite3::connection create db my-database.sqlite3
9

Tương tự, để truy xuất dữ liệu chứa

package require tdbc::sqlite3
71, hãy sử dụng một trong các biểu mẫu trả về các hàng dưới dạng từ điển. Nếu một giá trị là
package require tdbc::sqlite3
71, từ điển được trả về cho hàng sẽ không chứa khóa tương ứng

% package require tdbc::sqlite3
→ 1.0.4
20

Lưu ý rằng các khóa

package require tdbc::sqlite3
78 và
package require tdbc::sqlite3
79 bị thiếu

Bạn cũng có thể sử dụng phương pháp

package require tdbc::sqlite3
80 cho mục đích tương tự

Lưu ý kết quả khi định dạng danh sách được sử dụng

% package require tdbc::sqlite3
→ 1.0.4
21

Trong trường hợp này, không có cách nào để phân biệt liệu giá trị được lưu trữ trong cơ sở dữ liệu thực sự là

package require tdbc::sqlite3
70 hay
package require tdbc::sqlite3
71

5. 3. thủ tục lưu trữ

Các thủ tục được lưu trữ có thể được gọi bằng phương thức

package require tdbc::sqlite3
83 của đối tượng
package require tdbc::odbc
5. Giống như phương thức
package require tdbc::odbc
16, điều này cũng trả về một đối tượng
package require tdbc::odbc
6 mà sau đó có thể được sử dụng như đã mô tả trước đó

5. 4. nội tâm

Tất cả các lớp TDBC đều cho phép xem xét nội tâm và kiểm tra siêu thông tin liên quan đến cơ sở dữ liệu. Chúng tôi chỉ mô tả một vài trong số này. Xem danh sách đầy đủ và chi tiết

TDBC theo dõi các đối tượng vẫn đang mở trong kết nối cơ sở dữ liệu

% package require tdbc::sqlite3
→ 1.0.4
22

Rõ ràng là chúng tôi đã quên phát hành một số đối tượng. Điều này thực sự hữu ích cho lần dọn dẹp cuối cùng, chẳng hạn như trên cơ sở mỗi yêu cầu đối với máy chủ web để mở kết nối cơ sở dữ liệu

Chúng tôi có thể truy xuất thông tin lược đồ từ cơ sở dữ liệu…​

% package require tdbc::sqlite3
→ 1.0.4
23

…​hoặc về các cột trong cơ sở dữ liệu…​

% package require tdbc::sqlite3
→ 1.0.4
24

…​hoặc về một cột cụ thể

% package require tdbc::sqlite3
→ 1.0.4
25

Xem ý nghĩa của các từ điển được trả về

5. 5. tiện ích ODBC

Gói

tdbc::odbc::connection create db "Driver={SQL Server};Server=localhost;Trusted_Connection=Yes;Database=YourDatabaseName;"
5 cung cấp một số lệnh tiện ích liên quan đến tương tác với trình quản lý ODBC. Một số trong số này phụ thuộc vào sự hỗ trợ của trình quản lý ODBC của hệ thống đối với API Trình cài đặt ODBC

Lệnh

package require tdbc::sqlite3
88 liệt kê các trình điều khiển ODBC đã cài đặt trên hệ thống

% package require tdbc::sqlite3
→ 1.0.4
26

Lệnh

package require tdbc::sqlite3
89 liệt kê các nguồn dữ liệu ODBC được định cấu hình trên hệ thống

% package require tdbc::sqlite3
→ 1.0.4
27

Cuối cùng, bạn có thể tạo nguồn dữ liệu ODBC mới bằng lệnh

package require tdbc::sqlite3
90. Có những ví dụ về điều này

6. Người giới thiệu

TIPTDBC

Kết nối cơ sở dữ liệu Tcl (TDBC), Kevin B. Kenny và cộng sự, Đề xuất cải tiến Tcl #350, http. //www. tcl. tk/cgi-bin/tct/tip/350

KBKPAPER

Kết nối cơ sở dữ liệu Tcl, Kevin B. Kenny, Kỷ yếu Hội nghị Tcl, 2008. Bài viết gốc mô tả TDBC. Có sẵn từ http. //www. tclcommunityassociation. org/wub/proceedings/Proceedings-2008/proceedings/tdbc/tcl2k8-kenny-withfonts. pdf

TDBCREF

Các trang tham khảo TDBC, http. //www. tcl. tk/man/tcl8. 6/TdbcCmd/nội dung. htm

WWWCONNSTR

Tham chiếu chuỗi kết nối, https. //www. dây kết nối. com/


Một số mã sẽ nhất thiết phải dành riêng cho cơ sở dữ liệu do các khả năng và yêu cầu khác nhau trong việc triển khai cơ sở dữ liệu

Ruby có phải là trình kết nối MySQL hợp lệ không?

Trình kết nối đề cập đến một phần mềm cho phép ứng dụng của bạn kết nối với máy chủ cơ sở dữ liệu MySQL. MySQL cung cấp trình kết nối cho nhiều ngôn ngữ, bao gồm Python, Perl, Ruby, PHP, Java (JDBC), C, v.v.

Làm cách nào để sử dụng các lệnh TCL trong MySQL?

Giao dịch là một tập hợp các câu lệnh SQL được thực thi trên dữ liệu được lưu trữ trong DBMS. Bất cứ khi nào bất kỳ giao dịch nào được thực hiện, các giao dịch này tạm thời xảy ra trong cơ sở dữ liệu. Vì vậy, để thực hiện các thay đổi vĩnh viễn, chúng tôi sử dụng các lệnh TCL. .
LÀM. Lệnh này dùng để lưu dữ liệu vĩnh viễn. .
QUAY LẠI. .
TIẾT KIỆM

Các lệnh TCL trong DBMS là gì?

Hình thức đầy đủ của TCL là Ngôn ngữ kiểm soát giao dịch. Các lệnh TCL về cơ bản là được sử dụng để quản lý và kiểm soát các giao dịch trong cơ sở dữ liệu nhằm duy trì tính nhất quán . Và nó cũng giúp người dùng quản lý tất cả các thay đổi được thực hiện bởi các lệnh DML để duy trì các giao dịch của mình.

MySQL có giao diện không?

MySQL Shell là một giao diện tương tác với MySQL hỗ trợ các chế độ JavaScript, Python hoặc SQL . Bạn có thể sử dụng MySQL Shell để tạo nguyên mẫu ứng dụng, thực hiện truy vấn và cập nhật dữ liệu. Cài đặt MySQL Shell đã có hướng dẫn tải và cài đặt MySQL Shell.