本博文主要是针对ArcSDE的SDK Java开发者,并且是服务连接方式开发的(程序中),至于程序中直连和服务连接开发的区别在笔者的另一篇博文中已经介绍了【ArcGIS】利用ArcGIS 的Java API实现SDE数据库的直连和服务连接,笔者尝试了直连方式利用sde 的sdk java版开发,但是失败了,因为arcgis只在9.3的时候公布过arcsde的sdk java开发,笔者找到的arcsde的sdk安装后,发现dll文件是32位的,而笔者的JVM是64位的,在开发过程中如果采用直连方式,就会出现错误如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\ArcGIS\arcsde\bin\sdejavautil.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.esri.sde.sdk.client.JGsrvr.<clinit>(Unknown Source)
at com.esri.sde.sdk.client.SeConnection.x(Unknown Source)
at com.esri.sde.sdk.client.SeConnection.<init>(Unknown Source)
at com.linkingmap.main.App.main(App.java:28)
而9.3之后的sdk网上并没有渠道可以下载,而直连后来就变成了arcgis强烈推荐的连接方式。从网上的一些论坛上也可以找到一些这个观点的论证:
本文的环境,windows 10,arcgis 10.2,arcsde 10.2,oracle11g服务端和客户端(客户端是免安装版),以上所有软件都是安装在同一台服务器上。
1,安装ArcGIS desktop10.2,ArcSDE10.2,Oracle服务端
这一步没什么好讲的,直接安装,网上已有很多教程示例。需要注意的就是arcsde的安装的路径默认是在C:\Program Files\ArcGIS\ArcSDE,同时安装完成后,会在环境变量中新增一项SDEHOME,以及在path变量中会多一个路径C:\Program Files\ArcGIS\ArcSDE\ora11gexe\bin\。改路径下会有很多dll库,其中包含了一项名为st_shapelib.dll的文件,主要用来对ST_GEOMETRY类型的数据进行操作。这一部分会在我的另一篇博客中讲到(【ArcSDE/Oracle】配置Oracle使SQL可以对ST_GEOMETRY类型操作)。
2,安装Oracle客户端10.2
笔者安装的是免安装版本instantclient-basic-win32-11.2.0.1.0可以在Oracle官网上下载
这里的10.2的tnsname.ora的内容配置如下:
KingWang93 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
3,配置环境变量
在path变量中新增一项:D:\instantclient-basic-win32-11.2.0.1.0\instantclient_11_2(该路径即为Oracle客户端的安装路径)
4,在ArcGIS desktop中利用直连创建企业级地理数据库
上面的2,3步骤都是为了这一步直连创建地理数据库而做的。
4.1在toolbox中创建企业级地理数据库
4.2创建时的参数设定如下
上面的实例的连接串如图所示,后面的KingWang93是在Oracle客户端tnsname.ora中设定的数据库网络服务名(见步骤2)。至于参数的语法格式,可以点击上图中的关于数据库连接得知其中的具体的数据库连接的格式。
5,配置相应的tnsnames.ora、listener.ora、extproc.ora,使得能够用sql操作ST_GEOMETRY类型的数据。
参考博客:SDE.ST_GEOMETRY_SHAPELIB_PKG问题处理
如果用户没有操作ST_GEOMETRY类型数据的需求,那么这一步是可以跳过的
下面给出笔者自己的配置,下面的有的地址用的是计算机名(DESKTOP-L5ENP5D),有的是localhost,其实指的是同一台机器。
tnsnames.ora内容如下:
# tnsnames.ora Network Configuration File: F:\app\KingWang\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L5ENP5D)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
listener.ora内容如下:
# listener.ora Network Configuration File: F:\app\KingWang\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = F:\app\KingWang\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ANY")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L5ENP5D)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
ADR_BASE_LISTENER = F:\app\KingWang
extproc.ora内容如下:
#
# extproc.ora is used by extproc in the default Oracle configuration.
#
# This is a sample extproc init file that contains a name-value(s) pair which
# is same as the value of ENVS parameter in listener.ora file.
#
# Syntax: SET name=value (environment variable name and value)
#
# When specifying the EXTPROC_DLLS environment variable to restrict the DLLs
# that extproc is allowed to load, you may set EXTPROC_DLLS to one of the
# following values:
#
# * ONLY (maximum security)
#
# When EXTPROC_DLLS=ONLY:DLL[:DLL], only the specified DLL(s) can be loaded.
#
# Syntax: SET EXTPROC_DLLS=ONLY:DLL[:DLL]
#
# * NULL (the default value)
#
# When EXTPROC_DLLS=, only the DLL(s) in $ORACLE_HOME/bin and ORACLE_HOME/lib
# can be loaded.
#
# Syntax: SET EXTPROC_DLLS=
#
# * Colon-seperated list of the DLLs
#
# When EXTPROC_DLLS=DLL[:DLL], the specified DLL(s) and the DLLs in
# $ORACLE_HOME/bin and ORACLE_HOME/lib can be loaded.
#
# Syntax: SET EXTPROC_DLLS=DLL:DLL
#
# * ANY
# When EXTPROC_DLLS=ANY, DLL checking is disabled.
#
# Syntax: SET EXTPROC_DLLS=ANY
#
SET EXTPROC_DLLS=ANY
6,创建arcsde服务
6.1 在dos窗口下运行以下命令
sdeservice -o create -d oracle,orcl -p KingWang93 -i esri_sde
上面的KingWang93是设定的sde的数据库密码,也就是上面的4.2中的密码
上面的sdeservice命令其实可以通过输入sdeservice来得知它的用法,如下:
6.2 修改C:\Windows\System32\drivers\etc\services文件
在文件最后添加一行
esri_sde 5151/tcp
7,启动arcsde服务
这样就完成了服务的启动。接下来就可以用程序来进行开发了。
ArcSDE SDK Java开发包下载:
ArcSDE SDK Java开发包
至于如何用程序进行开发的,请参考博客:
《ArcSDE SDK Java 快速实践》
如果要利用arcsde 的sdk开发,可以参考这两个人的博客: