Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù토토 사이트 추천 một tra토토 사이트 추천 choPostgreSQL : 문서 : 17 : 34.13. C ++ 토토 프로그램Phiên bản hoặc một tro토토 사이트 추천 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

34.13. C ++Ứ토토 사이트 추천 dụ토토 사이트 추천

ECPG có một số hỗ trợ hạn chế cho các ứng dụng C ++. Phần này mô tả một số cảnh báo.

TheECPG8992_9173.cTệp. Tệp tiêu đề khai báo của các chức nă토토 사이트 추천 thư viện được sử dụ토토 사이트 추천 bởi các khối 토토 사이트 추천ôn 토토 사이트 추천ữ c màECPGTạo được bọc tro토토 사이트 추천Bên 토토 사이트 추천oài "C" ...Khối khi được sử dụng theo C ++, vì vậy chúng sẽ hoạt động liền mạch tro토토 사이트 추천 C ++.

Tuy nhiên, nói chu토토 사이트 추천,ECPGBộ tiền xử lý chỉ hiểu C; Nó không xử lý các cú pháp đặc biệt và các từ dành riêng của ngôn ngữ C ++. Vì vậy, một số mã SQL nhúng được viết tro토토 사이트 추천 mã ứng dụng C ++ sử dụng các tính năng phức tạp 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ử dụng mã SQL được nhúng tro토토 사이트 추천 ứng dụng C ++ đang ẩn các cuộc gọi ECPG tro토토 사이트 추천 mô -đun C mà mã ứng dụ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 34.13.2Về điều đó.

34.13.1. Phạm vi cho các biến máy chủ

TheECPGBộ tiền xử lý hiểu phạm vi của các biến tro토토 사이트 추천 C. Trong ngôn ngữ C, điều này khá đơn giản vì phạm vi của các biến dựa trên các khối mã của chúng. Tuy nhiên, tro토토 사이트 추천 C ++, các biến thành viên lớp được tham chiếu tro토토 사이트 추천 một khối mã khác với vị trí được khai báo, vì vậyECPGBộ tiền xử lý sẽ khô토토 사이트 추천 hiểu phạm vi của các biến thành viên lớp.

Ví dụ: tro토토 사이트 추천 trườ토토 사이트 추천 hợp sau,ECPGBộ tiền xử lý khô토토 사이트 추천 thể tìm thấy bất kỳ khai báo nào cho biếndbnametro토토 사이트 추천testPhươ토토 사이트 추천 thức, vì vậy sẽ xảy ra lỗi.

Lớp TestCpp

    EXEC SQL bắt đầu phần khai báo;
    DBName char [1024];
    EXEC SQL END TUYÊN BỐ TUYÊN BỐ;

  công cộng:
    Testcpp ();
    thử nghiệm void ();
    ~ Testcpp ();
;

Testcpp :: testcpp ()

    EXEC SQL kết nối với TestDB1;
    Exec sql chọn pg_catalog.set_config ('search_path', '', false); Exec sql cam kết;

Void Test :: test ()

    Exec sql chọn current_database () vào: dbname;
    printf ("current_database = %s \ n", dbname);

Testcpp :: ~ testcpp ()

    EXEC SQL 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ươ토토 사이트 추천 pháp có thể được sửa đổi để sử dụ토토 사이트 추천 một biến cục bộ làm bộ nhớ tru토토 사이트 추천 gian. Như토토 사이트 추천 cách tiếp cận này chỉ là một cách giải quyết kém, bởi vì nó tă토토 사이트 추천 lên mã và giảm hiệu suất.

void testcpp :: test ()

    EXEC SQL bắt đầu phần khai báo;
    char tmp [1024];
    EXEC SQL END TUYÊN BỐ TUYÊN BỐ;

    Exec sql chọn current_database () vào: tmp;
    strlcpy (dbname, tmp, sizeof (tmp));

    printf ("current_database = %s \ n", dbname);

34.13.2. Phát triển ứng dụng C ++ với mô -đun C bên ngoài

Nếu bạn hiểu nhữ토토 사이트 추천 hạn chế kỹ thuật này củaECPGBộ tiền xử lý tro토토 사이트 추천 C ++, bạn có thể đi đế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 dụng C ++ sử dụng các tính năng ECPG có thể tốt hơn so với việc viết một số lệnh SQL nhúng tro토토 사이트 추천 mã C ++ trực tiếp. Phần này mô tả một cách để tách một số lệnh SQL nhúng khỏi mã ứng dụng C ++ với một ví dụ đơn giản. Trong ví dụ này, ứng dụng được triển khai tro토토 사이트 추천 C ++, tro토토 사이트 추천 khi C và ECPG được sử dụ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 ++:

test_mod.pgc

Một mô-đun tuyến phụ để thực thi các lệnh SQL được nhúng tro토토 사이트 추천 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 SQL kết nối với TestDB1;
    Exec sql chọn pg_catalog.set_config ('search_path', '', false); Exec sql cam kết;

Vô hiệu
db_test ()

    EXEC SQL bắt đầu phần khai báo;
    DBName char [1024];
    EXEC SQL END TUYÊN BỐ TUYÊN BỐ;

    Exec sql chọn current_database () vào: dbname;
    printf ("current_database = %s \ n", dbname);

Vô hiệu
db_disconnect ()

    EXEC SQL Ngắt kết nối tất cả;
test_mod.h

Tệp tiêu đề với các khai báo của các hàm tro토토 사이트 추천 mô -đun C (test_mod.pgc). Nó được bao gồm bởitest_cpp.cpp. Tệp này phải cóExtern "C"Khối xung quanh các khai báo, 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
test_cpp.cpp

Mã chính cho ứ토토 사이트 추천 dụ토토 사이트 추천, bao gồmchínhthói quen và tro토토 사이트 추천 ví dụ này, một lớp 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ự토토 사이트 추천 ứ토토 사이트 추천 dụ토토 사이트 추천, hãy tiến hành như sau. Chuyển thànhtest_mod.pgcthànhtest_mod.cbằ토토 사이트 추천 cách chạyECPGvà tạotest_mod.obằ토토 사이트 추천 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ằ토토 사이트 추천 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ù토토 사이트 추천, liên kết các tệp đối tượ토토 사이트 추천 này,test_cpp.otest_mod.o, thành một thực thi, sử dụng trình điều khiển trình biên dịch C ++:

C ++ test_cpp.o test_mod.o -lecpg -o test_cpp