tỷ lệ kèo bóng đá trực tuyến hôm nay 8.3.23 Tài liệu | ||||
---|---|---|---|---|
Prev | Backward nhanh | tỷ lệ kèo bóng đá trực tuyến hôm nay 30.libpq- C Thư viện | Chuyển tiếp nhanh | Tiếp theo |
Những ví dụ này và các ví dụ khác có thể được tìm thấy trong thư mụcsrc/test/exreTrong mã nguồn phân bổ.
Ví dụ 30-1.libpqtỷ lệ kèo bóng đá trực tuyến hôm nay ví dụ 1
/* * testlibpq.c * * Kiểm tra phiên bản C của libpq, thư viện frontend tỷ lệ kèo bóng đá trực tuyến hôm nay. */ #include <stdio.h #include <stdlib.h #include "libpq-fe.h" khoảng trống tĩnh exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); int Main (int argc, char ** argv) const char *Conninfo; Pgconn *Conn; Pgresult *res; int nfields; int i, j; /* * Nếu người dùng cung cấp tham số trên dòng lệnh, hãy sử dụng nó làm * Chuỗi Conninfo; Nếu không, mặc định để cài đặt dbname = postgres và sử dụng * Biến môi trường hoặc mặc định cho tất cả các tham số kết nối khác. */ if (argc 1) Conninfo = argv [1]; khác ConnInfo = "dbname = postgres"; / * Tạo kết nối với cơ sở dữ liệu */ Conn = PQConnectDB (ConnInfo); / * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */ if (pqstatus (Conn)! = Connection_ok) fprintf (stderr, "kết nối với cơ sở dữ liệu không thành công: %s", Pqerrormessage (Conn)); exit_nicely (Conn); /* * Trường hợp thử nghiệm của chúng tôi ở đây liên quan đến việc sử dụng con trỏ, mà chúng tôi phải ở bên trong * Một khối giao dịch. Chúng ta có thể làm toàn bộ với một * Pqexec () của "chọn * từ pg_database", nhưng điều đó quá tầm thường để thực hiện * Một ví dụ tốt. */ / * Bắt đầu một khối giao dịch */ res = pqExec (Conn, "bắt đầu"); if (pqresultstatus (res)! = pgres_command_ok) fprintf (stderr, "lệnh bắt đầu không thành công: %s", pqerrormessage (Conn)); PQCLEAR (RES); exit_nicely (Conn); /* * PQClear pgresult có nên không còn cần thiết để tránh bộ nhớ * rò rỉ */ PQCLEAR (RES); /* * Tìm nạp các hàng từ PG_DATABASE, Danh mục hệ thống của cơ sở dữ liệu */ res = pqExec (Conn, "khai báo con trỏ myportal cho chọn * từ pg_database"); if (pqresultstatus (res)! = pgres_command_ok) fprintf (stderr, "tuyên bố con trỏ không thành công: %s", pqerrormessage (Conn)); PQCLEAR (RES); exit_nicely (Conn); PQCLEAR (RES); res = pqExec (Conn, "tìm nạp tất cả trong myportal"); if (pqresultstatus (res)! = pgres_tuples_ok) fprintf (stderr, "tìm nạp tất cả đều thất bại: %s", pqerrormessage (Conn)); PQCLEAR (RES); exit_nicely (Conn); / * Đầu tiên, in ra tên thuộc tính */ nfields = pqnfields (res); for (i = 0; i <nfields; i ++) printf ("%-15s", pqfname (res, i)); printf ("\ n \ n"); / * Tiếp theo, in ra các hàng */ for (i = 0; i <pqntuples (res); i ++) for (j = 0; j <nfields; j ++) printf ("%-15s", pqgetValue (res, i, j)); printf ("\ n"); PQCLEAR (RES); / * Đóng cổng ... chúng tôi không bận tâm kiểm tra lỗi ... */ res = pqExec (Conn, "Đóng myportal"); PQCLEAR (RES); / * kết thúc giao dịch */ res = pqExec (Conn, "end"); PQCLEAR (RES); / * Đóng kết nối với cơ sở dữ liệu và dọn dẹp */ Pqfinish (Conn); trả lại 0;
Ví dụ 30-2.libpqtỷ lệ kèo bóng đá trực tuyến hôm nay ví dụ 2
/* * testlibpq2.c * Kiểm tra giao diện thông báo không đồng bộ * * Bắt đầu tỷ lệ kèo bóng đá trực tuyến hôm nay này, sau đó từ PSQL trong một cửa sổ khác làm * Thông báo cho TBL2; * Lặp lại bốn lần để có được tỷ lệ kèo bóng đá trực tuyến hôm nay này để thoát. * * Hoặc, nếu bạn muốn có được ưa thích, hãy thử điều này: * Xuất hiện một cơ sở dữ liệu với các lệnh sau * (được cung cấp trong SRC/Test/Agrly/TestLibPQ2.sql): * * Tạo bảng tbl1 (i int4); * * Tạo bảng tbl2 (i int4); * * Tạo quy tắc R1 như khi chèn vào TBL1 làm * (Chèn vào các giá trị TBL2 (new.i); thông báo cho TBL2); * * Và làm điều này bốn lần: * * Chèn vào các giá trị TBL1 (10); */ #include <stdio.h #include <stdlib.h #include <chuỗi.h #include <errno.h #include <sys/time.h #include "libpq-fe.h" khoảng trống tĩnh exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); int Main (int argc, char ** argv) const char *Conninfo; Pgconn *Conn; Pgresult *res; Pgnotify *thông báo; int nnotifys; /* * Nếu người dùng cung cấp tham số trên dòng lệnh, hãy sử dụng nó làm * Chuỗi Conninfo; Nếu không, mặc định để cài đặt dbname = postgres và sử dụng * Biến môi trường hoặc mặc định cho tất cả các tham số kết nối khác. */ if (argc 1) Conninfo = argv [1]; khác ConnInfo = "dbname = postgres"; / * Tạo kết nối với cơ sở dữ liệu */ Conn = PQConnectDB (ConnInfo); / * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */ if (pqstatus (Conn)! = Connection_ok) fprintf (stderr, "kết nối với cơ sở dữ liệu không thành công: %s", Pqerrormessage (Conn)); exit_nicely (Conn); /* * Phát hành lệnh lắng nghe để cho phép thông báo từ thông báo của Quy tắc. */ res = pQExec (Conn, "Nghe TBL2"); if (pqresultstatus (res)! = pgres_command_ok) fprintf (stderr, "lệnh nghe thất bại: %s", pqerrormessage (Conn)); PQCLEAR (RES); exit_nicely (Conn); /* * PQClear pgresult có nên không còn cần thiết để tránh bộ nhớ * rò rỉ */ PQCLEAR (RES); /* Thoát sau bốn thông báo được nhận. */ nnotifys = 0; trong khi (nnotifys <4) /* * Ngủ cho đến khi điều gì đó xảy ra trên kết nối. Chúng tôi sử dụng Chọn (2) * Để chờ đợi, nhưng bạn cũng có thể sử dụng Poll () hoặc tương tự * cơ sở. */ int sock; fd_set input_mask; sock = pqsocket (Conn); if (sock <0) phá vỡ; / * không nên xảy ra */ Fd_zero (& input_mask); Fd_set (sock, & input_mask); if (select (sock + 1, & input_mask, null, null, null) <0) fprintf (stderr, "select () không thành công: %s \ n", strerror (errno)); exit_nicely (Conn); / * Bây giờ kiểm tra đầu vào */ PQConsumeInput (Conn); while ((thông báo = pqnotifyes (Conn))! = null) fprintf (stderr, "Async thông báo về ' %s' nhận được từ phụ trợ pid %d \ n", thông báo- relname, thông báo- be_pid); Pqfreemem (thông báo); nnotifys ++; fprintf (stderr, "thực hiện. \ n"); / * Đóng kết nối với cơ sở dữ liệu và dọn dẹp */ Pqfinish (Conn); trả lại 0;
Ví dụ 30-3.libpqtỷ lệ kèo bóng đá trực tuyến hôm nay ví dụ 3
/* * Testlibpq3.c * Kiểm tra các tham số ngoài dòng và I/O nhị phân. * * Trước khi chạy này, hãy điền vào cơ sở dữ liệu với các lệnh sau * (được cung cấp trong src/test/example/testlibpq3.sql): * * Tạo bảng TEST1 (i int4, t văn bản, b bytea); * * Chèn vào các giá trị test1 (1, 'joe' vị trí ',' \ 000 \ 001 \ 002 \ 003 \ 004 '); * Chèn vào các giá trị Test1 (2, 'ho ở đó', '\ 004 \ 003 \ 002 \ 001 \ 000'); * * Đầu ra dự kiến là: * * Tuple 0: Got * i = (4 byte) 1 * t = (11 byte) 'Joe's Place' * b = (5 byte) \ 000 \ 001 \ 002 \ 003 \ 004 * * Tuple 0: Got * I = (4 byte) 2 * t = (8 byte) 'ho ở đó' * b = (5 byte) \ 004 \ 003 \ 002 \ 001 \ 000 */ #include <stdio.h #include <stdlib.h #include <chuỗi.h #include <sys/type.h #include "libpq-fe.h" / * cho ntohl/htonl */ #include <netinet/in.h #include <arpa/inet.h khoảng trống tĩnh exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); /* * Hàm này in một kết quả truy vấn là một định dạng nhị phân từ * Một bảng được định nghĩa như trong nhận xét ở trên. Chúng tôi chia nó ra vì * hàm main () sử tỷ lệ kèo bóng đá trực tuyến hôm nayng nó hai lần. */ khoảng trống tĩnh show_binary_results (pgresult *res) int i, j; int i_fnum, t_fnum, b_fnum; / * Sử tỷ lệ kèo bóng đá trực tuyến hôm nayng pqfnumber để tránh các giả định về thứ tự trường trong kết quả */ i_fnum = pqfnumber (res, "i"); t_fnum = pqfnumber (res, "t"); b_fnum = pqfnumber (res, "b"); for (i = 0; i <pqntuples (res); i ++) char *iptr; char *tptr; char *bptr; int blen; int ival; / * Nhận các giá trị trường (chúng tôi bỏ qua khả năng chúng là null!) */ iptr = pqgetValue (res, i, i_fnum); tptr = pqgetValue (res, i, t_fnum); bptr = pqgetValue (res, i, b_fnum); /* * Đại diện nhị phân của INT4 nằm trong thứ tự byte mạng, mà * Chúng ta nên ép buộc tốt hơn cho đơn đặt hàng byte địa phương. */ Ival = nTohl ( *((uint32_t *) iptr)); /* * Biểu diễn nhị phân của văn bản là, tốt, văn bản và kể từ khi libpq * Đủ tốt để nối một byte số 0 vào nó, nó sẽ hoạt động tốt * dưới dạng chuỗi C. * * Đại diện nhị phân của bytea là một loạt các byte, có thể * Bao gồm các null nhúng vì vậy chúng tôi phải chú ý đến chiều dài trường. */ blen = pQGetLpm (res, i, b_fnum); printf ("tuple %d: got \ n", i); printf ("i = ( %d byte) %d \ n", PqgetLpm (res, i, i_fnum), ival); printf ("t = (%d byte) '%s' \ n", PQGetLpm (res, i, t_fnum), tptr); printf ("b = (%d byte)", blen); for (j = 0; j <blen; j ++) printf ("\%03o", bptr [j]); printf ("\ n \ n");