转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
Oracle空间数据库的读取与写入         ★★★★

Oracle空间数据库的读取与写入

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3451 更新时间:2009/4/22 22:06:16

这是一个控制台应用程序,包括3个文件。根据Oracle技术网上的一个C程序改写,
作用:用OCI来读取和写入Oracle空间数据。

//----------------------------------------------
// main.cpp : 定义控制台应用程序的入口点。
//----------------------------------------------
#include "WReadAndWriteGeometry.h"

int _tmain(int argc, _TCHAR* argv[])
{
 WReadAndWriteGeometry wjj("txk", "mlib", "147");
 wjj.read_geometries("B562D8C5E4C81D0", "GEOLOC", "MI_PRINX", 1);
 return 0;
}


//----------------------------------------------
// WReadAndWriteGeometry.h
//----------------------------------------------
#if(!defined(WReadAndWriteGeometry_H))
#define WReadAndWriteGeometry_H

#pragma comment( lib, "oci.lib" )
#pragma comment( lib, "ociw32.lib" )
#pragma comment( lib, "oraocci9.lib" )

#ifndef OCI_ORACLE
#include <oci.h>
#include <oci1.h>
#endif

/*---------------------------------------------------------------------------
                     PUBLIC TYPES AND CONSTANTS
  ---------------------------------------------------------------------------*/
#define ARRAY_SIZE                 32
#define TYPE_OWNER                 "MDSYS"
#define SDO_ORDINATE_ARRAY         TYPE_OWNER".SDO_ORDINATE_ARRAY"
#define SDO_ELEM_INFO_ARRAY        TYPE_OWNER".SDO_ELEM_INFO_ARRAY"
#define SDO_GEOMETRY               TYPE_OWNER".SDO_GEOMETRY"

/*************************************************************************/
/* Type definitions                                                      */
/*************************************************************************/
struct sdo_point_type
{
   OCINumber x;
   OCINumber y;
   OCINumber z;
};
typedef struct sdo_point_type sdo_point_type;

typedef OCIArray sdo_elem_info_array;
typedef OCIArray sdo_ordinate_array;

struct sdo_geometry
{
   OCINumber      sdo_gtype;
   OCINumber      sdo_srid;
   sdo_point_type sdo_point;
   OCIArray       *sdo_elem_info;
   OCIArray       *sdo_ordinates;
};

typedef struct sdo_geometry SDO_GEOMETRY_TYPE;

/***
** Indicator structures for SDO_GEOMETRY_TYPE
***/

struct sdo_point_type_ind
{
   OCIInd _atomic;
   OCIInd x;
   OCIInd y;
   OCIInd z;
};
typedef struct sdo_point_type_ind sdo_point_type_ind;

struct SDO_GEOMETRY_ind
{
   OCIInd                    _atomic;
   OCIInd                    sdo_gtype;
   OCIInd                    sdo_srid;
   struct sdo_point_type_ind sdo_point;
   OCIInd                    sdo_elem_info;
   OCIInd                    sdo_ordinates;
};
typedef struct SDO_GEOMETRY_ind SDO_GEOMETRY_ind;


/*************************************************************************/
/* Class definitions                                                      */
/*************************************************************************/
class WReadAndWriteGeometry
{
public:
 WReadAndWriteGeometry(char *username, char *password,char *connectstring);
 ~WReadAndWriteGeometry();
 void read_geometries (char *table, char *geom_column, char *id_column, int   num_dimensions);
 void write_geometries ();

protected:
 void checkerr(OCIError *errhp, sword status);
 void connect(char *username, char *password, char *connectstring);
 void disconnect(void);
 OCIType *get_tdo(char *typeName);
 void process_data(int  num_dimensions, char *id_column, int  rows_to_process, int  *rows_processed);

protected:
 int  sc_ops_geom_null(void);
 void sc_ops_init_geometry (SDO_GEOMETRY_TYPE *, SDO_GEOMETRY_ind  *, int);
 void sc_ops_get_gtype (void);
 void sc_ops_get_sdo_point (void);
 int  sc_ops_next_elem (void);
 ub4  sc_ops_get_element_type (void);
 void sc_ops_get_type1 (void);
 void sc_ops_get_type2 (void);
 void sc_ops_get_type3 (void);
 void sc_ops_get_type4 (void);
 void sc_ops_get_type5 (void);
 ub4 get_interpretation (void);
 void get_ordinates (int starting_offset, int ending_offset);
 int get_next_ending_offset (int processing_type_4or5);
 int get_next_starting_offset (int read_varray);

private:
 OCIEnv   *envhp;                       /* OCI general handles */
 OCIError  *errhp;

 OCIServer  *srvhp;
 OCISvcCtx  *svchp;
 OCISession  *usrhp;
 OCIStmt  *stmthp;
 OCIDescribe *dschp;

//读GEOMETRY数据时,需要的变量
private:
 OCINumber    global_gid[ARRAY_SIZE];
 OCIType     *geom_tdo;
 SDO_GEOMETRY_TYPE  *global_geom_obj[ARRAY_SIZE];/* spatial object buffer */
 SDO_GEOMETRY_ind  *global_geom_ind[ARRAY_SIZE]; /* Object indicator */

//写GEOMETRY数据时,需要的变量
private:
 OCIType  *elem_info_tdo;     /* Varrays and the type descriptors */
 OCIArray *elem_info;
 OCIType  *ordinates_tdo;
 OCIArray *ordinates;

private:
 SDO_GEOMETRY_TYPE *m_geom_obj;
 SDO_GEOMETRY_ind  *m_geom_ind;
 int global_num_dimensions;
 int global_elem_index;
 int global_ending_offset;
 int global_nelems;
 int global_nords;
 int global_first_elem;

};
#endif


//----------------------------------------------
// WReadAndWriteGeometry.cpp
//----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vector>
using namespace std;

#include "WReadAndWriteGeometry.h"

static double test_ordinates[] = {
 0, 0,
 1, 1
 };

/*******************************************************************************
**
** Routine:     WReadAndWriteGeometry
**
** Description: 构造函数
**
*******************************************************************************/
WReadAndWriteGeometry::WReadAndWriteGeometry(char *username, char *password,char *connectstring)
{
 dschp = NULL;
 geom_tdo = NULL;
 elem_info_tdo = NULL;
 ordinates_tdo = NULL;

 global_ending_offset = -1;

 for(int i=0;i<ARRAY_SIZE;i++)
 { 
  global_geom_obj[i] = NULL;
  global_geom_ind[i] = NULL;
 }

 connect(username, password, connectstring);
}


/*******************************************************************************
**
** Routine:     ~WReadAndWriteGeometry
**
** Description: 析构函数
**
*******************************************************************************/
WReadAndWriteGeometry::~WReadAndWriteGeometry()
{
 disconnect();
}


/*******************************************************************************
**
** Routine:     checkerr
**
** Description: Error message routine
**
*******************************************************************************/
void WReadAndWriteGeometry::checkerr(OCIError *errhp, sword status)
{
 text errbuf[512];
 sb4 errcode = 0;

 switch (status)
 {
 case OCI_SUCCESS:
  break;
 case OCI_SUCCESS_WITH_INFO:
  fprintf(stderr, "OCI_SUCCESS_WITH_INFO\n");
  break;
 case OCI_ERROR:
  OCIErrorGet((dvoid *)errhp, (ub4)1, (text *)NULL, &errcode,
      errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
  fprintf(stderr, "%.*s\n", 512, errbuf);
  break;
 case OCI_NEED_DATA:
  fprintf(stderr, "OCI_NEED_DATA\n");
  break;
 case OCI_NO_DATA:
  fpr

[1] [2] [3] [4] [5]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台