PostgreSQL: soi kèo bóng đá truoctran | |||
---|---|---|---|
prev | UP | Chương 31.libpq- C Thư viện | 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/exampleTrong phân phối mã nguồn.
Ví dụ 31-3.libpqkèo bóng đá pháp ví dụ 3
/* * src/test/example/testlibpq3.c * * * 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 lược đồ testlibpq3; * Đặt search_path = testlibpq3; * 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 */ #ifdef Win32 #include <windows.h #endif #include <stdio.h #include <stdlib.h #include <stdint.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ử kèo bóng đá phápng 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ử kèo bóng đá phápng 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");