C语言连接并操作Sedna XML数据库的方法

所属分类: 软件编程 / C 语言 阅读数: 37
收藏 0 赞 0 分享

本文实例讲述了C语言连接并操作Sedna XML数据库的方法。分享给大家供大家参考。具体如下:

#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; 
}

希望本文所述对大家的C语言程序设计有所帮助。

更多精彩内容其他人还在看

详解C++ string字符串类

这篇文章主要介绍了C++ string字符串类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C++单例类模板详解

这篇文章主要介绍了C++单例类模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C语言实现数据结构迷宫实验

这篇文章主要为大家详细介绍了C语言实现数据结构迷宫实验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言数据结构之迷宫问题

这篇文章主要为大家详细介绍了C语言数据结构之迷宫问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言数据结构之迷宫求解问题

这篇文章主要为大家详细介绍了C语言数据结构之迷宫求解问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生考试系统

这篇文章主要为大家详细介绍了C语言实现小学生考试系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生随机出题测试计分

这篇文章主要为大家详细介绍了C语言实现小学生随机出题测试计分,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生计算机辅助教学系统

这篇文章主要为大家详细介绍了C语言实现小学生计算机辅助教学系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

这篇文章主要介绍了C++中构造函数,拷贝构造函数和赋值函数的区别和实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C语言清除scanf()缓存的案例讲解

今天小编就为大家分享一篇关于C语言清除scanf()缓存的案例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多