thePQEXEC
함수는 정상적인 동기 응용 프로그램에서 스포츠 토토 결과을 제출하기에 적합합니다. 그러나 일부 사용자에게는 중요 할 수있는 몇 가지 결함이 있습니다.
PQEXEC
스포츠 토토 결과이 완료되기를 기다립니다. 응용 프로그램에는 다른 작업 (예 : 사용자 인터페이스 유지)이있을 수 있습니다.이 경우 응답 대기를 차단하고 싶지 않습니다.
클라이언트 응용 프로그램의 실행이 결과를 기다리는 동안 중단되기 때문에 응용 프로그램이 진행중인 스포츠 토토 결과을 취소하려고 시도하기가 어렵습니다. (신호 핸들러에서 수행 할 수는 있지만 그렇지 않으면 수행 할 수 있습니다.)
PQEXEC
하나만 반환 할 수 있습니다pgresult
구조. 제출 된 스포츠 토토 결과 문자열에 다중가 포함 된 경우SQL스포츠 토토 결과, 마지막pgresult
PQEXEC
.
PQEXEC
항상 스포츠 토토 결과의 전체 결과를 수집하여 단일로 버퍼링합니다pgresult
. 이것은 응용 프로그램의 오류 처리 로직을 단순화하지만 많은 행이 포함 된 결과에 비현실적 일 수 있습니다.
이러한 제한이 마음에 들지 않는 응용 프로그램은 대신 기본 함수를 사용할 수 있습니다.PQEXEC
에서 구축되었습니다 :pqsendquery
및pqgetresult
. 또한pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsendDescribreprepared
및PQSENDDESCRIPEPORTAL
pqgetresult
의 기능을 복제하려면pqexecparams
, pqprepare
, pqExecprepared
, PQDESCREPREPARED
및pqdescribePortal
각각.
pqsendquery
결과를 기다리지 않고 서버에 스포츠 토토 결과을 제출합니다. 스포츠 토토 결과이 성공적으로 발송 된 경우 1이 반환되고 그렇지 않은 경우 0 (사용.PQERRORMESSAGE
실패에 대한 자세한 정보를 얻으려면).
int pqsendquery (pgconn *conn, const char *command);
성공적으로 전화 한 후pqsendquery
, Callpqgetresult
결과를 얻기 위해 한 번 이상.pqsendquery
| (동일한 연결에서) 다시 호출 할 수 없습니다pqgetresult
스포츠 토토 결과이 완료되었음을 나타내는 널 포인터를 반환했습니다.
pqsendqueryparams
결과를 기다리지 않고 스포츠 토토 결과과 별도의 매개 변수를 서버에 제출합니다..
int pqsendqueryparams (pgconn *conn,
이것은에 해당합니다.pqsendquery
15654_15786pqexecparams
. 좋다pqexecparams
, 2.0 protocol 연결에서 작동하지 않으며 쿼리 문자열에서 하나의 스포츠 토토 결과 만 허용합니다..
pqsendprepare
완료를 기다리지 않고 주어진 매개 변수로 준비된 스포츠 토토 결과문을 작성하라는 요청을 보냅니다.
int pqsendprepare (pgconn *conn,
이것은 비동기 버전의입니다.pqprepare
: 요청을 발송할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
서버가 준비된 스포츠 토토 결과문을 성공적으로 작성했는지 여부를 결정합니다. 함수의 매개 변수는 동일하게 처리됩니다.pqprepare
. 좋다pqprepare
, 2.0 protocol 연결에서는 작동하지 않습니다.
pqsendqueryprepared
결과를 기다리지 않고 주어진 매개 변수로 준비된 스포츠 토토 결과문을 실행하라는 요청을 보냅니다.
int pqsendqueryprepared (pgconn *conn,
이것은와 유사합니다.pqsendqueryparams
, 그러나 실행되는 명령은 쿼리 문자열을 제공하는 대신 이전에 준비된 명령문을 지정하여 지정됩니다. 함수의 매개 변수는 동일하게 처리됩니다.pqExecprepared
. 좋다pqExecprepared
, 2.0 protocol 연결에서는 작동하지 않습니다.
pqsendDescribreprepared
완료를 기다리지 않고 지정된 준비된 스포츠 토토 결과문에 대한 정보를 얻으라는 요청을 제출합니다.
int pqsenddescribeprepared (pgconn *conn, const char *stmtname);
이것은 비동기 버전의입니다.PQDESCREPREPARED
: 요청을 발송할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.PQDESCREPREPARED
. 좋다PQDESCREPREPARED
, 2.0 protocol 연결에서는 작동하지 않습니다.
PQSENDDESCRIPEPORTAL
완료를 기다리지 않고 지정된 포털에 대한 정보를 얻기위한 요청을 제출합니다.
int pqsenddescribePortal (pgconn *conn, const char *portalname);
이것은 비동기 버전의입니다.pqdescribePortal
: 요청을 발송할 수있는 경우 1, 그렇지 않은 경우 0이 반환됩니다. 성공적인 전화 후 전화pqgetresult
결과를 얻으려면. 함수의 매개 변수는 동일하게 처리됩니다.pqdescribePortal
. 좋다pqdescribePortal
, 2.0 protocol 연결에서는 작동하지 않습니다.
pqgetresult
사전에서 다음 결과를 기다립니다pqsendquery
, pqsendqueryparams
, pqsendprepare
, pqsendqueryprepared
, pqsendDescribreprepared
또는PQSENDDESCRIPEPORTAL
전화를 걸어 반환합니다. 스포츠 토토 결과이 완료되면 널 포인터가 반환되고 더 이상 결과가 없습니다.
pgresult *pqgetresult (pgconn *conn);
pqgetresult
스포츠 토토 결과이 완료되었음을 나타내는 널 포인터를 반환 할 때까지 반복적으로 호출해야합니다. (스포츠 토토 결과이 활성화되지 않은 경우 호출되면pqgetresult
한 번에 Null 포인터를 반환합니다.) 각각의 비 널은에서 결과를 얻습니다.pqgetresult
동일한 것을 사용하여 처리해야합니다pgresult
앞에서 설명한 액세서 기능. 로 각 결과 객체를 자유롭게하는 것을 잊지 마십시오.PQCLEAR
완료되면. 참고pqgetresult
스포츠 토토 결과이 활성화되고 필요한 응답 데이터가 아직 읽지 않은 경우에만 차단됩니다pqconsumeInput
.
때도pqresultstatus
치명적인 오류를 나타냅니다.pqgetresult
허용하기 위해 널 포인터를 반환 할 때까지 호출해야합니다libpq오류 정보를 완전히 처리하려면
사용pqsendquery
및pqgetresult
PQEXEC
의 문제 : 스포츠 토토 결과 문자열에 다중 포함 된 경우SQL스포츠 토토 결과, 해당 스포츠 토토 결과의 결과는 개별적으로 얻을 수 있습니다. (이렇게하면 간단한 형태의 중첩 처리가 가능합니다. 그건 그렇고, 클라이언트는 서버가 동일한 스포츠 토토 결과 문자열에서 나중에 쿼리에서 여전히 작동하는 동안 하나의 스포츠 토토 결과의 결과를 처리 할 수 있습니다.).
pqsendquery
및pqgetresult
큰 쿼리 결과를 한 번에 행 씩 검색하고 있습니다. 이것은에서 논의됩니다.PostgreSQL : 문서 : 13 : 33.5. 토토 사이트 결과 검색 row-row.
그 자체로, 전화pqgetresult
서버가 다음을 완료 할 때까지 클라이언트가 여전히 차단하게됩니다SQL명령. 두 가지 기능을 올바르게 사용하여 피할 수 있습니다.
pqconsumeInput
서버에서 입력을 사용할 수 있으면 소비하십시오.
int pqconsumeInput (pgconn *conn);
pqconsumeInput
일반적으로 반환 1 표시“오류 없음”, 그러나 어떤 종류의 문제가 있으면 0을 반환합니다 (어떤 경우PQERRORMESSAGE
참조 할 수 있습니다). 결과는 입력 데이터가 실제로 수집되었는지 여부를 말하지 않습니다.pqconsumeInput
, 응용 프로그램이 확인할 수 있습니다PQISBUSY
및/또는pqnotifies
상태가 바뀌 었는지 확인하려면
pqconsumeInput
응용 프로그램이 아직 결과 나 알림을 처리 할 준비가되지 않은 경우에도 호출 할 수 있습니다. 함수는 사용 가능한 데이터를 읽고 버퍼에 저장하여 A를 유발합니다.select ()
사라질 준비가 된 표시. 따라서 응용 프로그램은 사용할 수 있습니다pqconsumeInput
select ()
즉시 조건을 한 다음 여가에서 결과를 검사하십시오.
PQISBUSY
스포츠 토토 결과이 바쁘면 1, 즉 반환 1pqgetresult
입력 대기 대기 블록. 0 반환은를 나타냅니다.pqgetresult
차단되지 않는다는 확신으로 호출 할 수 있습니다.
int pqisbusy (pgconn *conn);
PQISBUSY
서버에서 데이터를 읽으려고 시도하지 않습니다. 그러므로pqconsumeInput
먼저 호출되어야합니다. 그렇지 않으면 바쁜 상태가 끝나지 않을 것입니다.
이러한 함수를 사용하는 일반적인 응용 프로그램은 사용하는 기본 루프가 있습니다select ()
또는poll ()
응답해야 할 모든 조건을 기다리려면. 조건 중 하나는 서버에서 사용할 수있는 입력이며select ()
pqsocket
. 기본 루프가 입력 준비를 감지하면 호출해야합니다pqconsumeInput
입력을 읽으려면. 그런 다음 호출 할 수 있습니다PQISBUSY
그 다음pqgetresult
ifPQISBUSY
거짓 (0)을 반환합니다. 또한 전화 할 수 있습니다pqnotifies
감지하려면Notify
메시지 (참조와이즈 토토 : 문서 : 13 : 33.8. 비동기 알림).
사용하는 클라이언트pqsendquery
/pqgetresult
서버에서 여전히 처리중인 스포츠 토토 결과을 취소하려고 시도 할 수도 있습니다. 보다윈 토토 : 문서 : 13 : 33.6. 진행중인 쿼리 취소. 그러나 반환 값에 관계없이pqcancel
, 응용 프로그램은를 사용하여 일반 결과 읽기 시퀀스를 계속 유지해야합니다.pqgetresult
. 성공적인 취소는 단순히 스포츠 토토 결과이 다른 것보다 빨리 종료 될 것입니다..
위에서 설명한 함수를 사용하여 데이터베이스 서버에서 입력을 기다리는 동안 차단을 피할 수 있습니다. 그러나 응용 프로그램이 출력을 서버로 전송하기 위해 대기 대기를 차단할 수 있습니다.복사
)
PQSETNONBLOCKING
연결의 비 차단 상태를 설정합니다.
int pqsetnonblocking (pgconn *conn, int arg);
연결 상태를 비 블로킹에 설정하면arg
IS 1, 또는 if 차단arg
는 0입니다. OK 인 경우 0, 오류 인 경우 -1을 반환합니다.
비 차단 상태에서 성공적인 호출pqsendquery
, pqputline
, PQPUTNBYTES
, pqputcopydata
및PQENDCOPY
차단하지 않습니다. 그들의 변경은 플러시 될 때까지 로컬 출력 버퍼에 저장됩니다.
참고PQEXEC
비 차단 모드를 존중하지 않습니다. 그것이 부름을 받으면 어쨌든 패션을 차단하는 데 행동 할 것입니다.
pqisnonBlocking
데이터베이스 연결의 차단 상태를 반환합니다.
int pqisnonblocking (const pgconn *conn);
연결이 차단 모드로 설정된 경우 1이고 차단하면 0을 반환합니다.
pqflush
대기열 출력 데이터를 서버로 플러시하려고 시도합니다. 성공한 경우 (또는 전송 큐가 비어있는 경우), 어떤 이유로 실패한 경우 -1 또는 1 또는 1이 전송 큐에서 모든 데이터를 전송할 수없는 경우 1을 반환합니다 (이 경우 연결이 차단되지 않은 경우에만 발생할 수 있음)..
int pqflush (pgconn *conn);
블로킹되지 않은 연결에 스포츠 토토 결과이나 데이터를 보내고 나면 Callpqflush
. 1이 반환되면 소켓이 읽거나 쓰기 준비가 될 때까지 기다립니다.pqflush
다시. 읽기 준비가되면 전화pqconsumeInput
, 전화pqflush
다시. 까지 반복pqflush
반환 0. (읽기 준비를 확인하고 입력을 배출해야합니다pqconsumeInput
, 서버가 우리에게 데이터를 보내려고 시도 할 수 있기 때문에, 예를 들어 통지 메시지를 보내고, 읽을 때까지 데이터를 읽지 않을 수 있기 때문입니다.) 한 번pqflush
0을 반환하고 소켓을 읽을 때까지 기다린 다음 위에서 설명한대로 응답을 읽습니다..
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면