日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OCCI读写Oracle Spatial的SDO_Geometry

發布時間:2025/5/22 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OCCI读写Oracle Spatial的SDO_Geometry 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.使用Oracle OTT工具生成對應的C++類。1.1設置ORACLE_HOME:服務器端安裝目錄。設置客戶端安裝目錄,提示什么java錯誤。暫時不管了。1.2寫一個intype文件test.typ放在D盤根目錄。TYPE MDSYS.SDO_GEOMETRY1.3OTT語法如下:可以打入ott顯示命令提示。ott attraccess=private code=cpp cppfile=spatial_classes.cpp?hfile=spatial_classes.h intype=spatial.typ?mapfile=spatial_classes_map.cpp mapfunc=RegisterClasses userid=MDSYS/password
在命令行下進入你intype.typ的目錄,生成的文件就在這個目錄。2.生成sdo.h(.cpp),map.h(.cpp)map類是用來注冊sql的,否則會提示:ORA-32162:讀/寫SQL的方法未注冊注冊的方法是在連接數據庫前加上一句:CMap(pEnv);低版本用:RegisterClasses(pEnv);3.讀SDO_GEOMETRYCSdo *pSdo = (CSdo *)rs->getObject(1);select shape from table
sdo_point里保存的是Number類型的數據。
可以用float f = float(number);4.寫SDO_GEOMETRY可以直接用sql語句:update tlbtest set shape=MDSYS.SDO_GEOMETRY(3003,NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(100,200))也可以構建CSdo sdo;stmt->setObject(sdo);這次博文寫得太粗糙,這不是我的風格,家里沒安裝oracle憑印象記下來,費了好大勁得來這些經驗。url:http://greatverve.cnblogs.com/archive/2012/11/30/occi-sdo_geometry.html參考:
用OTT翻譯Oracle Spatial中的類型

OTT是Oracle數據庫的數據類型翻譯工具,可以把Oracle中的數據類型翻譯為C++類。

在使用Oracle Spatial的時候,需要通過OTT把MDSYS方案中有關空間數據結構翻譯為C++類。

在網上找了半天有關OTT使用的方法,基本上都說的不清不楚。

沒辦法,自己看Oracle的b14294文檔——是關于OCCI的,里面有講到OTT的使用。

OTT的命令如下:

ott attraccess=private code=cpp cppfile=spatial_classes.cpp hfile=spatial_classes.h

intype=spatial.typ mapfile=spatial_classes_map.cpp mapfunc=RegisterClasses userid=MDSYS/password

其中,intype=spatial.typ這一項參數可以省去。如果省去就會把user方案中的所有數據類型都翻譯出來。

因此,可以簡單自己定義一個typ文件,只把需要的幾個類型翻譯出來就可以了。

最簡單的typ文件象下面這樣就可以了:

TYPE MDSYS.SDO_GEOMETRY
TYPE MDSYS.SDO_POINT_TYPE

以上內容用文本文件保存為spatial.typ,然后用上門的ott命令,就會生成spatial_classes.h、spatial_classes.cpp、spatial_classes_map.h、spatial_classes_map.cpp四個文件。

在vc工程中通過使用occi和這四個文件就可以進行Oracle Spatial編程了。

VS2005中用OCCI訪問Oracle Spatial的幾個常見錯誤

網上有關使用OCCI訪問Oracle Spatial的資料比較少,在用VS2005編寫occi程序時出現了好幾個Oracle錯誤,經過在網上淘,總算逐個解決了。結果很簡單,過程很艱難,作一個小結還是有必要的。

錯誤1:ORA-21301:沒有按對象模式進行初始化

原因:要用OBJECT模式初始化環境才能操作SDO_GEOMETRY空間對象

網上很多關于OCCI示例代碼中都是:

Environment *pEnv = Environment::createEnvironment (Environment::DEFAULT);

但是要操縱SDO_GEOMETRY空間對象,應該用OBJECT模式:

Environment *pEnv = Environment::createEnvironment (Environment::OBJECT);

錯誤2:ORA-32162:讀/寫SQL的方法未注冊

原因:用ott生產有關oracle spatial的c++代碼時,有一個class map的文件,例如spatial_classes_map.h、spatial_classes_map.cpp。這個文件里有一個RegisterClasses函數,用于注冊生產的spatial類(SDO_GEOMETRY等)中讀寫SQL的方法。因此在創建數據庫連接之前,要進行注冊:

RegisterClasses(pEnv);

錯誤3:OCI-22625

關于這個錯誤,沒有給出具體信息。搜遍了百度、google、yahoo,找遍中外網站,唯一的答案是:這是Oracle occi的一個bug,在9201版之后已經解決了。

暈啊,我用的vs2005、orcle 0cci for vc8 10.2.0.3。不是早就解決了嗎?折騰了一個下午,反復檢查代碼,用各種方式測試,實在沒發現什么問題。后來改用release模式編譯運行,咦,沒有出現這個錯誤。然后對比檢查vs中debug和release的編譯環境,還是沒發現問題,debug模式下還是出現這個錯誤。

反復在網上找,沒有其他的信息,尋思還是應該是oracle的bug。最后總算在oracle網站上發現occi 10.2.0.3還有兩個patch,分別是patch 10和patch 13。下載,把編譯庫改為patch 13的lib,編譯運行,問題解決!

?

總結

以上是生活随笔為你收集整理的OCCI读写Oracle Spatial的SDO_Geometry的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。