cách đọc kèo bóng đá 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 33.ECPG- nhúngkèo bóng đá việt nam:trong C | NEXT |
ECPG có một số hỗ trợ hạn chế cho các ứng cách đọc kèo bóng đá C ++. Phần này mô tả một số cảnh báo.
TheECPGBộ tiền xử lý lấy đầu vào Tệp được viết bằng C (hoặc một cái gì đó như C) và các lệnh cách đọc kèo bóng đá nhúng, Chuyển đổi các lệnh cách đọc kèo bóng đá nhúng thành các khối ngôn ngữ C và Cuối cùng tạo ra một.cTệp. Tiêu đề Tệp khai báo của các chức năng thư viện được sử cách đọc kèo bóng đá bởi ngôn ngữ C những khối đóECPGtạo ra được bọc trongBên ngoài "C" ...khối khi được sử cách đọc kèo bóng đá dưới C ++, vì vậy chúng nên hoạt động liền mạch trong C ++.
Tuy nhiên, nói chung,ECPGBộ tiền xử lý chỉ hiểu C; nó không xử lý đặc biệt Cú pháp và các từ dành riêng của ngôn ngữ C ++. Vì vậy, một số nhúng Mã SQL được viết bằng mã ứng cách đọc kèo bóng đá C ++ sử cách đọc kèo bóng đá phức tạp các tính năng cụ thể cho C ++ có thể không được xử lý chính xác hoặc có thể không hoạt động như mong đợi.
Một cách an toàn để sử cách đọc kèo bóng đá mã SQL được nhúng trong ứng cách đọc kèo bóng đá C ++ là ẩn các cuộc gọi ECPG trong một mô -đun C, mà mã ứng cách đọc kèo bóng đá C ++ gọi vào để truy cập cơ sở dữ liệu và liên kết cùng với Phần còn lại của mã C ++. Nhìn thấyPhần 33.13.2về điều đó.
TheECPGTiền xử lý hiểu Phạm vi của các biến trong C. Trong ngôn ngữ C, điều này khá đơn giản bởi vì phạm vi của các biến dựa trên các khối mã của chúng. TRONG C ++, tuy nhiên, các biến thành viên lớp được tham chiếu trong một Khối mã khác nhau từ vị trí được khai báo, vì vậyECPGBộ tiền xử lý sẽ không hiểu phạm vi của các biến thành viên lớp.
Ví dụ, trong trường hợp sau,ECPGtiền xử lý không thể tìm thấy bất kỳ tuyên bố nào cho BiếndbnametrongtestPhương thức, vì vậy sẽ xảy ra lỗi.
Lớp TestCpp EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; DBName char [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; công cộng: Testcpp (); thử nghiệm void (); ~ Testcpp (); ; Testcpp :: testcpp () EXEC cách đọc kèo bóng đá kết nối với TestDB1; Exec cách đọc kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec cách đọc kèo bóng đá cam kết; Void Test :: test () Exec cách đọc kèo bóng đá chọn current_database () vào: dbname; printf ("current_database = %s \ n", dbname); Testcpp :: ~ testcpp () EXEC cách đọc kèo bóng đá Ngắt kết nối tất cả;
Mã này sẽ dẫn đến một lỗi như thế này:
ECPG test_cpp.pgctest_cpp.pgc: 28: Lỗi: biến "dbname" không được khai báo
Để tránh vấn đề phạm vi này,TestPhương pháp có thể được sửa đổi để sử cách đọc kèo bóng đá biến cục bộ làm trung gian kho. Nhưng cách tiếp cận này chỉ là một cách giải quyết kém, bởi vì nó Uglify mã và giảm hiệu suất.
void testcpp :: test () EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; char tmp [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; Exec cách đọc kèo bóng đá chọn current_database () vào: tmp; strlcpy (dbname, tmp, sizeof (tmp)); printf ("current_database = %s \ n", dbname);
Nếu bạn hiểu những hạn chế kỹ thuật này củaECPGBộ tiền xử lý trong C ++, bạn có thể đến Kết luận rằng liên kết các đối tượng C và các đối tượng C ++ ở giai đoạn liên kết Để cho phép các ứng cách đọc kèo bóng đá C ++ sử cách đọc kèo bóng đá các tính năng ECPG có thể tốt hơn hơn là viết một số lệnh SQL nhúng trong mã C ++ trực tiếp. Cái này Phần mô tả một cách để tách một số lệnh SQL nhúng khỏi Mã ứng cách đọc kèo bóng đá C ++ với một ví dụ đơn giản. Trong ví dụ này, Ứng cách đọc kèo bóng đá được triển khai trong C ++, trong khi C và ECPG được sử cách đọc kèo bóng đá để Kết nối với máy chủ PostgreSQL.
Ba loại tệp phải được tạo: một tệp C (*.pgc), tệp tiêu đề và tệp C ++:
Một mô-đun tuyến phụ để thực thi các lệnh cách đọc kèo bóng đá được nhúng trong C. Nó sẽ được chuyển đổi thànhtest_mod.cbởi bộ tiền xử lý.
#include "test_mod.h" #include <stdio.h Vô hiệu db_connect () EXEC cách đọc kèo bóng đá kết nối với TestDB1; Exec cách đọc kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec cách đọc kèo bóng đá cam kết; Vô hiệu db_test () EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; DBName char [1024]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; Exec cách đọc kèo bóng đá chọn current_database () vào: dbname; printf ("current_database = %s \ n", dbname); Vô hiệu db_disconnect () EXEC cách đọc kèo bóng đá Ngắt kết nối tất cả;
Tệp tiêu đề với các khai báo của các chức năng trong mô -đun C (test_mod.pgc). Nó được bao gồm bởitest_cpp.cpp. Tệp này phải cóBên ngoài "C"Khối xung quanh các khai báo, bởi vì nó sẽ được liên kết từ mô -đun C ++.
#ifdef __cplusplus bên ngoài "c" #endif void db_connect (); void db_test (); void db_disconnect (); #ifdef __cplusplus
Mã chính cho ứng cách đọc kèo bóng đá, bao gồmchính
thói quen và trong ví dụ này, C ++
lớp học.
#include "test_mod.h" Lớp TestCpp công cộng: Testcpp (); thử nghiệm void (); ~ Testcpp (); ; Testcpp :: testcpp () db_connect (); Vô hiệu Testcpp :: test () db_test (); Testcpp :: ~ testcpp () db_disconnect (); int Main (Void) Testcpp *t = new testcpp (); t- test (); trả lại 0;
Để xây dựng ứng cách đọc kèo bóng đá, hãy tiến hành như sau. Chuyển thànhtest_mod.pgcthànhtest_mod.cbằng cách chạyECPGvà tạotest_mod.obằng cách biên dịchtest_mod.cVới trình biên dịch c:
ECPG -O test_mod.c test_mod.pgc cc -c test_mod.c -o test_mod.o
Tiếp theo, tạotest_cpp.obằng cách biên dịchtest_cpp.cppVới trình biên dịch C ++:
C ++ -C test_cpp.cpp -o test_cpp.o
Cuối cùng, liên kết các tệp đối tượng này,test_cpp.ovàtest_mod.o, thành một thực thi, sử cách đọc kèo bóng đá C ++ Trình điều khiển trình biên dịch:
C ++ test_cpp.o test_mod.o -lecpg -o test_cpp