ArcSDE 10.2 SDK for Java实现直连

来源:互联网 发布:知乎 曹明伦 编辑:程序博客网 时间:2024/05/08 16:25

最近有不少用户咨询到ArcSDE SDK是否可以实现直连,这个当然没有问题,从ArcGIS支持直连开始,相关开发都是支持直连的,今天特此测试一下,来验证一下其实ArcGIS直连只是连接方式的参数以及多安装了数据库客户端,其他代码是无需修改的。


测试环境:Windows Server 2008 R2 ,ArcSDE 10.2 SDK for Java,Eclipse 64Bit Oracle11.2.0.1 (包含ArcSDE 10.2地理数据库),但是没有安装ArcSDE10.2应用程序。


因为ArcSDE10.2 SDK只有64Bit程序,所以如果需要安装Oracle客户端(直连)64Bit应用程序,Eclipse 64Bit应用程序。


具体的安装步骤可以参考:http://blog.csdn.net/linghe301/article/details/8058806


在环境部署过程中我还遇到了一些情况:

1:在执行程序是,控制台报如下信息no sdejavautil in java.library.path

Exception in thread "main" java.lang.UnsatisfiedLinkError: no sdejavautil in java.library.pathat java.lang.ClassLoader.loadLibrary(Unknown Source)at java.lang.Runtime.loadLibrary0(Unknown Source)at java.lang.System.loadLibrary(Unknown Source)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 arcgis.sde.test.test.getConn(test.java:22)at arcgis.sde.test.test.main(test.java:38)

解决方法:将ArcSDE SDK的bin文件夹添加到环境变量中,因为sdejavautil文件就在该文件中



2:如果你当前运行环境并没有按照ArcSDE Server软件,在执行应用程序会报如下错误:SE_SDEHOME_NOT_SET (-95)——The SDEHOME variable is not set and is needed for this operation.

从这个错误信息很容易得知是什么问题,环境变量没有添加




------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

建议看到转载,请直接访问正版链接获得最新的ArcGIS技术文章

Blog:               http://blog.csdn.net/linghe301 

------------------------------------------------------------------


下面我们来看怎么直连?基本上无论是服务连接还是直连,只是连接参数写法以及是否需要安装相关客户端?所以,你在你的ArcGIS for Desktop怎么写的参数,在ArcSDE SDK同样适合,但是有一点需要注意的。

1:关于Server参数写法

在ArcGIS 10.0之前,用户还是可以看到输入Server界面的,而且如果需要直连的话,该输入框里面的内容可以不填写,但是ArcGIS10.1之后,就看不到该界面了,所以ArcSDE SDK开发者可能对这个有所考虑,该怎么写?


答案:该参数可以随便写,只要不为空即可。为什么呢?

我们使用反编译软件来查看


if ((paramString1 == null) || (paramString1.length() == 0) || (paramString1.length() >= 32) || ((paramString3 != null) && (paramString3.length() >= 32)) || (paramString2 == null) || (paramString2.length() == 0) || (paramString2.length() >= 32) || (paramString4 == null) || (paramString4.length() == 0) || (paramString5 == null) || (paramString5.length() == 0) || (paramString5.length() >= 32))      throw new SeException(this.o, -66, "");
如果第一个参数为null、为空、长度大于32都会报-66无效参数的错误,所以不管是直连还是服务连接,该参数都必须填写,特别是直连,虽然该参数没有意义,但是鉴于一开始的逻辑限制,我们必须填写点内容。


2:Service选项

在ArcGIS 10.0之前,我们习惯于输入sde:oracle11g:netservicename,在ArcGIS10.1之后,我们只需要输入netservicename,但是在SDK开发过程中,需要用户将sde:oracle11g内容添加上。


而且如果你在service输入sde:oracle11g,那么你需要在密码输入项输入:password@netservicename


相关参数代码如下

package arcgis.sde.test;import com.esri.sde.sdk.client.SeConnection;import com.esri.sde.sdk.client.SeException;import com.esri.sde.sdk.client.SeRelease;public class test {private static SeConnection conn = null;        private static String server = "192.168.220.132";      //如果输入sde:oracle11g    private static String instance = "sde:oracle11g:orcl";      private static String database = "";      private static String username = "sde";      //密码需要输入sde@orcl    private static String password = "sde";      //获得ArcSDE连接      private static SeConnection getConn() {          if (conn == null) {              try {                  conn = new SeConnection(server, instance, database, username,                          password);              } catch (SeException ex) {                  ex.printStackTrace();              }            }                    return conn;      }  /** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSeConnection conn =getConn();          SeRelease release=conn.getRelease();         System.out.println(release.getBugFix());          System.out.println(release.getDesc());          System.out.println(release.getRelease());          System.out.println(release.getMajor());          System.out.println(release.getMinor());  }}

欢迎添加微信公众号:ArcGIS技术分享(arcgis_share),直接回复1就可以在移动端获取最新技术文章。



0 0