ArcSDE 10.2 SDK for Java实现直连

49 篇文章 1 订阅
21 篇文章 0 订阅

最近有不少用户咨询到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.path
	at 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 stub
		SeConnection 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就可以在移动端获取最新技术文章。



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值