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