- #include "libsedna.h"
- #include "stdio.h"
- int handle_error(SednaConnection* conn,
- const char* op,
- int close_connection) {
- printf("%s failed: \\n%s\\n", op, SEgetLastErrorMsg(conn));
- if(close_connection == 1) SEclose(conn);
- return -1;
- }
- int main() {
- struct SednaConnection conn = SEDNA_CONNECTION_INITIALIZER;
- int bytes_read, res, value;
- char buf[1024];
- /* Turn off autocommit mode */
- value = SEDNA_AUTOCOMMIT_OFF;
- res = SEsetConnectionAttr(&conn, SEDNA_ATTR_AUTOCOMMIT,
- (void*)&value, sizeof(int));
- /* Connect to the database */
- res = SEconnect(&conn, "localhost", "test_db",
- "SYSTEM", "MANAGER");
- if(res != SEDNA_SESSION_OPEN)
- return handle_error(&conn, "Connection", 0);
- /* Begin a new transaction */
- res = SEbegin(&conn);
- if(res != SEDNA_BEGIN_TRANSACTION_SUCCEEDED)
- return handle_error(&conn, "Transaction begin", 1);
- /* Load file "region.xml" into the document "region" */
- res = SEexecute(&conn, "LOAD 'region.xml' 'region'");
- if(res != SEDNA_BULK_LOAD_SUCCEEDED)
- return handle_error(&conn, "Bulk load", 1);
- /* Execute XQuery statement */
- res = SEexecute(&conn, "doc('region')/*/*");
- if(res != SEDNA_QUERY_SUCCEEDED)
- return handle_error(&conn, "Query", 1);
- /* Iterate and print the result sequence */
- while((res = SEnext(&conn)) != SEDNA_RESULT_END) {
- if (res == SEDNA_ERROR)
- return handle_error(&conn, "Getting item", 1);
- do {
- bytes_read = SEgetData(&conn, buf, sizeof(buf) - 1);
- if(bytes_read == SEDNA_ERROR)
- return handle_error(&conn, "Getting item", 1);
- buf[bytes_read] = '\\0';
- printf("%s\\n", buf);
- } while(bytes_read > 0);
- }
- /* Drop document "region" */
- res = SEexecute(&conn, "DROP DOCUMENT 'region'");
- if(res != SEDNA_UPDATE_SUCCEEDED)
- return handle_error(&conn, "Drop document", 1);
- /* Commit transaction */
- res = SEcommit(&conn);
- if(res != SEDNA_COMMIT_TRANSACTION_SUCCEEDED)
- return handle_error(&conn, "Commit", 1);
- /* Close connection */
- res = SEclose(&conn);
- if(res != SEDNA_SESSION_CLOSED)
- return handle_error(&conn, "Close", 0);
- return 0;
- }
本文转载自